Install Claper: Self-Host Interactive Presentations with Docker

Create interactive presentations with Claper. This guide shows you step-by-step how to install and secure Claper on your own server using Docker and Docker Compose.

Install Claper: Self-Host Interactive Presentations with Docker hero image

Boring, one-sided presentations? It doesn’t have to be that way. Imagine being able to directly engage your audience in your presentation – with live polls, an interactive quiz, or a moderated Q&A session. This is exactly what Claper, an open-source tool that brings your presentations to life, makes possible.

While there is a hosted service at claper.co, we want to maintain full control here and install Claper on our own server. In this guide, I’ll show you how to set up Claper with Docker and Docker Compose and publish it securely via a reverse proxy.

What is Claper?

Claper is a tool that helps make presentations more interactive. Instead of just showing slides, you can directly involve your audience. The main features are:

  • Questions & Answers (Q&A): The audience can submit questions, which you can moderate and answer live.
  • Quizzes and Polls: Create multiple-choice questions or open-ended polls and display the results in real-time.
  • Forms: Collect structured feedback or information from participants.
  • Embed Web Content: Integrate external websites or videos directly into your presentation.
  • Moderation Tools: Maintain control over what content is visible to everyone.
  • Reports: Analyze engagement and results after the presentation.

Since Claper is open-source software under a GNU v3.0 license, we can run it for free on our own server.

Step 1: Server Preparation and Docker Installation

I’m assuming for this guide that you already have a running server with Docker and Docker Compose. If not, here’s the short version:

  1. Server and Domain: You need a server (e.g., a VPS from Hetzner or Netcup) and a domain that points to the server’s IP address. Check this with ping your-domain.com. You can find more details on initial setup in my VPS Basics Guide.

  2. Connect to the Server:

    ssh your-user@YOUR_SERVER_IP
  3. Install Docker (if not already done):

    # Install dependencies
    sudo apt-get update
    sudo apt-get install -y ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Add repository and install Docker
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    Verify the installation with docker --version and docker compose version.

Step 2: Installing Claper with Docker Compose

Now, let’s set up Claper. We’ll base our setup on the compose.yaml from the official Claper GitHub Repository.

Creating the Directory Structure

First, we’ll create a dedicated folder for our Claper project.

mkdir claper
cd claper

If you have trouble with the commands in the terminal, feel free to check out my blog post on the most important terminal commands.

Creating Docker Compose and Configuration Files

Now we’ll create all the necessary files and folders.

# Create folders for persistent data
mkdir db uploads

# Create configuration files
touch compose.yaml .env

Now, let’s edit the compose.yaml file with an editor like vim or nano. Press i to enter Insert Mode in Vim.

vim compose.yaml

Copy the following content into it. I have already adjusted it slightly:

services:
  db:
    image: postgres:16
    container_name: claper-db
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test:
        - CMD
        - pg_isready
        - "-q"
        - "-d"
        - "claper"
        - "-U"
        - "claper"
      retries: 3
      timeout: 5s
    environment:
      POSTGRES_PASSWORD: claper
      POSTGRES_USER: claper
      POSTGRES_DB: claper
    networks:
      - claper-net

  app:
    image: ghcr.io/claper-app/claper:2
    ports:
      - 4000:4000
    container_name: claper
    restart: unless-stopped
    volumes:
      - ./uploads:/app/uploads
    healthcheck:
      test: curl --fail http://localhost:4000 || exit 1
      retries: 3
      start_period: 20s
      timeout: 5s
    env_file: .env
    depends_on:
      db:
        condition: service_healthy
    networks:
      - claper-net

networks:
  claper-net:
    external: false

Adjustments in compose.yaml

  • image: I have set the PostgreSQL version to 16 and Claper to version 2. This prevents unexpected “breaking changes” from a latest update.
  • volumes: I have replaced the named volumes with bind mounts (./db and ./uploads). This way, the data is stored directly in our project folder, which simplifies backups.
  • ports: Port 4000 is exposed so we can access Claper directly before the reverse proxy is configured.

Save the file with :x and Enter.

Configuring the .env File

Now comes the most important configuration file. The env.sample from the Claper repository gives us the template.

vim .env

Paste this content and customize it:

# PostgreSQL settings
POSTGRES_HOST=db
POSTGRES_USER=claper
POSTGRES_DB=claper
POSTGRES_PASSWORD=YOUR_SECURE_DB_PASSWORD

# Claper settings
BASE_URL=http://YOUR_SERVER_IP:4000
SECRET_KEY_BASE=YOUR_VERY_SECRET_KEY
PRESENTATION_STORAGE=local
PRESENTATION_STORAGE_DIR=/app/uploads

# Mail configuration

MAIL_TRANSPORT=local
MAIL_FROM=noreply@claper.co
MAIL_FROM_NAME=Claper

#SMTP_RELAY=xx.example.com
#SMTP_USERNAME=johndoe@example.com
#SMTP_PASSWORD=xxx
#SMTP_PORT=465

# SMTP settings (Optional, for email functions)
# SMTP_HOST=
# SMTP_PORT=
# SMTP_USERNAME=
# SMTP_PASSWORD=
# SMTP_SENDER_EMAIL=

# Claper configuration
#ENABLE_ACCOUNT_CREATION=true
  • SECRET_KEY_BASE: Replace this with a long, random string. You can generate one with openssl rand -base64 32.
  • BASE_URL: For now, enter your server’s IP address and port 4000.

Starting the Containers

Now we are ready. In the claper directory, run:

sudo docker compose up -d

The Docker images will be downloaded on the first start. If everything has worked, you can access Claper in your browser at http://YOUR_SERVER_IP:4000.

Step 3: Initial Setup and Security

You should now see the Claper start page.

  1. Create a user account: Click on “Login” and create your admin account.
  2. Disable registration: After creating your account, other people can also register. We want to prevent this.
    • Stop the containers: sudo docker compose down
    • Edit the .env file: vim .env
    • Change #ENABLE_ACCOUNT_CREATION=true to ENABLE_ACCOUNT_CREATION=false.
    • Restart the containers: sudo docker compose up -d

To securely access Claper via a domain with HTTPS, a reverse proxy is the best solution.

  1. Create a network (if not already done):

    sudo docker network create proxy
  2. Set up Caddy: Create a separate directory for Caddy with the necessary files. You can find a detailed guide on this in my Nextcloud tutorial. Here’s the short version:

    ~/caddy/docker-compose.yml:

    services:
      caddy:
        image: caddy:2
        container_name: caddy
        restart: unless-stopped
        ports: ["80:80", "443:443", "443:443/udp"]
        volumes: ["./Caddyfile:/etc/caddy/Caddyfile", "./data:/data", "./config:/config"]
        networks:
          - proxy
    networks:
      proxy:
        external: true

    ~/caddy/Caddyfile:

    claper.your-domain.com {
        reverse_proxy claper:4000
    }
  3. Adapt Claper for the proxy:

    • Edit Claper’s compose.yaml:
      • Add claper to the proxy network.
      • Remove the ports section.
    • Edit Claper’s .env file:
      • Change the BASE_URL to https://claper.your-domain.com.
  4. Start everything:

    # In the Caddy directory
    sudo docker compose up -d
    
    # In the Claper directory
    sudo docker compose up -d

You should now be able to securely access Claper at your domain, with a valid SSL certificate.

Practice Test: Creating an Interactive Presentation

Now that everything is running, we can try out Claper.

  • Create an event: Give your presentation a name and upload a PDF or PowerPoint file.
  • Invite participants: Share the displayed code or QR code with your audience.
  • Add interactions:
    • Click “Add Interaction”.
    • Create a poll with yes/no answers.
    • Add a quiz and mark the correct answer.
    • Embed a YouTube video or another webpage.

During your presentation, you can activate the interactions and display the results live. Participants can send messages and reactions via their smartphones. After the presentation, a detailed report is available.

CAUTION

If uploading files fails, it is often due to an incorrect BASE_URL in the .env file. The value there must exactly match the URL you use to access Claper. Check the logs with sudo docker compose logs -f app for precise error messages.

Conclusion

Claper is an incredibly useful tool for taking presentations and lectures to the next level. The installation with Docker is quick, once you know the small hurdles. With a self-hosted instance, you retain full control and can engage your audience in a new, interactive way.

FAQs

Is Claper free?

Yes, Claper is open-source software under the GNU v3.0 license. You can install and use it for free on your own server. Costs only arise for your server and your domain.

Can I install Claper without Docker?

Yes, the official documentation also describes a manual installation. For most users, however, the installation with Docker is much easier and requires less maintenance, as all dependencies are encapsulated in the containers.

What file formats can I upload for my presentations?

Claper supports common formats like PDF and PowerPoint (.pptx). The files are converted into a web-friendly format during processing. Note that animations from PowerPoint may be lost in the process.

How do I update my Claper instance?

Thanks to Docker, an update is easy. Change the image tag in your `compose.yaml` file to the desired new version, run `sudo docker compose pull` to download the new image, and then restart the containers with `sudo docker compose down && sudo docker compose up -d`. Always make a backup beforehand!

Share this post:

This website uses cookies. These are necessary for the functionality of the website. You can find more information in the privacy policy