Deployment guide

Claper

Overview

This guide shows you how to deploy and configure Claper on Ubuntu 24.04 on Azure, using SecureAnyCloud Azure Marketplace images. Claper is an open-source interactive presentation platform. A presenter uploads their slides, and Claper turns the deck into a live session that the audience follows on their own phone or laptop by opening a short join link, with no account and no app to install.

Alongside each slide, the presenter can run multiple-choice polls, scored quizzes, open questions, messages and emoji reactions. Every response updates live on screen as people answer.

All of that real-time interaction is delivered by Phoenix LiveView and WebSockets, so votes, questions and reactions appear the moment they are sent. Because the platform is self-hosted, the presentation content, the audience responses and the attendee identities stay on infrastructure you control.

The SecureAnyCloud image ships the free and open-source, AGPL-3.0 licensed Claper release. It runs the officially supported way, as the upstream container pinned by image digest, paired with PostgreSQL 15. Both images are captured into the VM, so your instance starts in seconds with nothing to download.

Claper is fronted by nginx on port 80, configured to proxy the LiveView WebSocket upgrades that the live features depend on. Claper itself binds to the loopback interface, and PostgreSQL publishes no host port at all.

The Phoenix SECRET_KEY_BASE, the database password and a unique administrator password are all generated on the first boot of every VM. The upstream default administrator is never created, and public presenter sign-up is disabled. The image is backed by 24/7 SecureAnyCloud support.

Claper is a trademark of its respective owner. This image is produced by SecureAnyCloud and is not affiliated with, endorsed by, or sponsored by ClaperCo or the Claper project. It ships the free and open-source AGPL-3.0 licensed software, unmodified.

What you get:

  • Claper 3.0.0: the official upstream release container ghcr.io/claperco/claper:3.0.0, pinned by image digest, with the compiled front end and the LibreOffice slide conversion toolchain built in
  • PostgreSQL 15: the application database, on a private container network with no host port published
  • nginx: the single public listener on port 80, configured for the LiveView / Channels WebSocket upgrades that the live features rely on
  • First-boot secret generation: Phoenix SECRET_KEY_BASE, database password and a unique administrator password, all generated per VM, replacing the published upstream defaults
  • A bundled self-test: logs in as the per-VM administrator, proves the upstream defaults are refused, and confirms the live WebSocket upgrades

Prerequisites

  • An Azure subscription with permission to create virtual machines
  • An SSH key pair for administrative access
  • A network security group allowing inbound TCP 22 (SSH) and TCP 80 (web UI) from your own address ranges
  • Standard_B2s (2 vCPU, 4 GB RAM) or larger. Claper is comfortable on Standard_B2s for small and medium sessions. For large live audiences or big slide decks, choose a larger size with more RAM.
1

Deploy from the Azure Portal

  • Open the Azure Marketplace and search for Claper on Ubuntu 24.04 LTS by SecureAnyCloud.
  • Select Create, then choose your subscription, resource group and region.
  • Pick a VM size of Standard_B2s or larger.
  • Under Administrator account, select SSH public key and paste your public key.
  • Under Inbound port rules, allow SSH (22) and HTTP (80).
  • Select Review + create, then Create.
2

Deploy from the Azure CLI

az group create --name claper-rg --location eastus
az vm image terms accept --urn sac1647283583153:claper:default:latest
az vm create \
  --resource-group claper-rg \
  --name claper-vm \
  --image sac1647283583153:claper:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard
az vm open-port --resource-group claper-rg --name claper-vm --port 80 --priority 1010
3

Connect to your VM

ssh azureuser@<vm-ip>
4

Confirm the services are running

Five units make up the deployment: docker, claper-firstboot (which generates this VM's secrets), claper (the compose stack), claper-postboot (which bootstraps the administrator account) and nginx.

Check their status:

systemctl is-active docker claper-firstboot claper claper-postboot nginx

All five report active. Both containers should be up and healthy:

sudo docker ps --format 'table {{.Names}}\t{{.Status}}'
NAMES STATUS claper Up 14 minutes (healthy) claper-db Up 14 minutes (healthy)
5

Confirm the network exposure

Claper is deliberately not reachable directly, and only nginx listens publicly. List the listening ports:

ss -tlnH | grep -E ':(80|4000|5432) ' | sort

You will see 127.0.0.1:4000 for Claper and 0.0.0.0:80 (and [::]:80) for nginx. PostgreSQL does not appear. It publishes no host port and is reachable only from the Claper container on a private network.

LISTEN 0 4096 127.0.0.1:4000 0.0.0.0:* LISTEN 0 511 0.0.0.0:80 0.0.0.0:* LISTEN 0 511 [::]:80 [::]:*
6

Read the per-instance credentials

Every VM generates its own secrets on first boot and writes them to a file that only root can read. Print it:

sudo cat /root/claper-credentials.txt

The file records the administrator email address and password for signing in to Claper, and this VM's URL. Then confirm the file is locked down:

sudo stat -c '%a %U:%G %n' /root/claper-credentials.txt
600 root:root /root/claper-credentials.txt
7

Understand the security model

Claper has its own email and password login. This image seeds that login carefully.

  • No known bootstrap credential. Upstream's container, left to its defaults, seeds a well-known administrator (admin@claper.co / claper) whenever the database is empty. It also ships a published SECRET_KEY_BASE that would let anyone forge an administrator session. This image does neither. It starts Claper with database migrations only, generates a fresh SECRET_KEY_BASE, database password and administrator password on first boot, and creates a single per-VM administrator. The upstream default administrator is never created.
  • Audience join is open, presenter sign-up is not. Your audience joins a presentation with a code and needs no account. Public presenter and administrator self-registration is disabled: ENABLE_ACCOUNT_CREATION is off, and nginx also returns 403 for /users/register, so nobody can register an account over the internet.
  • Only nginx is public. Claper binds to 127.0.0.1:4000, PostgreSQL publishes no host port, and nginx on port 80 is the single public listener, configured for the LiveView WebSocket upgrades that the live features need.

Verify that self-registration is refused and that the credentials file is root-only:

curl -s -o /dev/null -w 'register: HTTP %{http_code}\n' -X POST http://127.0.0.1/users/register --data-urlencode 'user[email]=intruder@example.com' --data-urlencode 'user[password]=intruderpass123'

The request returns 403.

The image also ships a self-test that proves the whole security model, not merely that a page loads. It logs in as the per-VM administrator, checks that the upstream default admin and a wrong password are both refused, confirms /users/register is blocked, and confirms the LiveView WebSocket upgrades through nginx:

sudo /usr/local/sbin/claper-roundtrip.sh
8

Open Claper and sign in

Browse to your VM's address (the CLAPER_URL from your credentials file) and select Log in. Sign in with the ADMIN_EMAIL and ADMIN_PASSWORD values from /root/claper-credentials.txt.

9

Your presenter dashboard

After you sign in, you land on My Events, your presenter dashboard. Use it to create and manage presentations and to open the ones that are live.

10

Create a presentation

Select Create an event, give it a name, and optionally drag in a slide deck. Claper accepts a PDF or a PowerPoint file and converts it into per-slide images using the LibreOffice toolchain built into the image, so your existing deck works as is.

Claper generates a short join code for the event, which your audience enters to join. Select Create event, and the event appears on your dashboard as Live.

11

Add a live poll

Open the event to reach the presenter management console. It shows your slides down the left, a preview in the centre, and an Interactions panel where you add a Poll, a Form, a Quiz or web content to the current slide.

Add a poll, give it a question and a couple of options, then toggle it on to make it the current interaction for the audience.

12

Run the session and let the audience answer

Your audience opens the join link on their phones, enters the event code, and immediately sees whatever interaction you have made current.

With the poll enabled, every attendee sees the question and its options and can vote. The results update live for everyone as the votes come in. The same view carries the message board, questions and reactions.

13

Add more presenters

Because public self-registration is disabled, you add further presenter or administrator accounts yourself. Sign in as the administrator and use Claper's admin panel at /admin/users.

To let presenters register themselves, for example on a private network, you can reopen public sign-up. Set ENABLE_ACCOUNT_CREATION=true in the app service of /etc/claper/compose.yaml and remove the location = /users/register { return 403; } block from /etc/nginx/sites-available/claper. Then restart:

sudo systemctl restart claper nginx
14

Managing the service

sudo systemctl status claper --no-pager
sudo docker logs claper --tail 50

Restart or stop the whole stack with sudo systemctl restart claper and sudo systemctl stop claper.

15

Configure email (optional)

Claper can email password reset links and, if you enable it, account confirmations. Out of the box, this image uses a local mail adapter that does not send real email, which is fine for a single administrator.

To send real email, set MAIL_TRANSPORT=smtp and the SMTP_RELAY, SMTP_PORT, SMTP_USERNAME and SMTP_PASSWORD variables in the app service of /etc/claper/compose.yaml. Then run sudo systemctl restart claper.

16

Use your own domain and HTTPS (production)

Claper is served over plain HTTP on port 80, so it works the moment the VM boots. For production, point a DNS name at the VM and terminate TLS in front of it.

After you add a certificate, set BASE_URL in the app service of /etc/claper/compose.yaml to your https:// address and restart. The links Claper generates and the WebSocket origin checks then use your domain.

17

Security recommendations

  • Restrict inbound port 80 to the networks that need it.
  • Put TLS in front of the VM before you use it with real content, so neither the administrator login nor session cookies travel in clear text.
  • Keep presenter self-registration disabled on any internet-facing instance, and add accounts from the admin panel instead.
  • Keep /root/claper-credentials.txt at mode 0600, and never copy it onto a shared system.
  • Back up the claper_db and claper_uploads Docker volumes, which hold every presentation, response and uploaded deck.
18

Support and Licensing

Claper is open source software distributed under the GNU Affero General Public License v3 (AGPL-3.0). This image also carries Erlang/OTP and Elixir under Apache 2.0, the LibreOffice, Ghostscript and ImageMagick slide conversion tools that the official image bundles, PostgreSQL 15 under the PostgreSQL Licence, Docker Engine under Apache 2.0 and nginx under the BSD 2-Clause Licence. All are redistributed unmodified.

Commercial support for the SecureAnyCloud image is available 24/7. The upstream project documentation is at github.com/ClaperCo/Claper.

Deploy on Azure

Find Claper on Ubuntu 24.04 LTS by SecureAnyCloud on the Azure Marketplace.

Deploy on Azure

Launch Claper on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure