Skip to content
HADEON edited this page May 21, 2026 · 17 revisions

Step by step, deploy your own server.

It is very simple really:

Prerequisites:

git bash docker-compose

This can be installed on any linux server.

You can also achieve this with rootless-docker or podman equivalents.

Firewall

Recommended: install ufw and disable your VPS provider built-in firewall. Reason being that a lot of cheap VPS providers do not support HTTP/3-Quic protocol.

Setting up the firewall locally:

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH adjust if you moved sshd off 22
ufw allow 443 # caddy: https (tcp) + http/3 (udp)
ufw allow 80/tcp # caddy ACME http-01 + http->https redirect
ufw enable && ufw status

The catch is to not expose the CAESAR_PORT: "4991" as this is our reverse proxy through caddy.

You can test this by curl -v this port directly, it should hang at Trying...

Note: docker publishes ports through its own iptables chain that bypasses ufw. So ufw protects against accidental host listeners, not against the ports compose publishes. The real surface is docker-compose.yaml ports: blocks.


Get the source code

git clone --depth 1 https://github.com/h8d13/caesar
cd caesar

vCPUs depending on VPS

Docker uses ranges for mediasoup workers. On a cheap 4vCPUs server:

    ports:
      - "40000-40003:40000-40003/tcp"
      - "40000-40003:40000-40003/udp"
    environment:
      CAESAR_PORT: "4991"
      CAESAR_WEBRTC_WORKERS: "4"

Adapt these ports according to number of CPUs (your hardware becomes the limit) if you modified docker-compose.yaml

See also net-buffers helper. This increases memory for media-soup in case you plan to run multiple screen-share/webcams at the same time.


Domains

Caddy: caddy/Caddyfile

For further config refer to Caddy documentation: https://caddyserver.com/docs/

If you have a domain + a VPS, you can point to it by adding a A record:

www IN A XX.XX.XX.XXX
@ IN A XX.XX.XX.XXX

Wiring up to Caesar

Or edit it .env with editor of your choice.

echo 'CAESAR_SITE=sub.example.com' >> .env

This is sourced automatically by docker-compose and ignored in .gitignore.

It can be domains, IPs directly, Tailscale nodes, whatever.

Full env var reference: Configuration.

Starting the container

Once this is done you can simply run: ./up.sh this runs the prod variant on port 443. Access at: https://yourdomain.ext or with www depending on how you set it up.

Then docker logs caesar on first run will give you a unique one-time use UUID.

Login through the main entry page: First user is always allowed without an invite.

Go to DevTools > Console: useToken("UUID") this sets you as the server owner.

Keeping it updated

Simply: ./updown.sh && ./up.sh

Discord Alternative per your rules. Fork of Sharkord.

Clone this wiki locally