Docker

The image is the server only. The desktop client stays on the desk.

The container starts as root just long enough to give /var/lib/ryme to user 1542. The server then runs as that user, with no capabilities and no new privileges. The root filesystem is read-only. The only published port is UDP 1542. The certificate and the key stay in the volume, mode 0700 and 0600.

Run

In the repository, put the public address in a .env file beside compose.yaml:

RYME_PUBLIC=voice.example:1542
docker compose up -d --build

The invite is in the logs:

docker compose logs

On a Raspberry Pi, build on that Pi. The image matches the machine it is built on. Aarch64 and armv7 do not share a binary.

Rooms and a new invite

The volume holds channels next to the key. Edit it, then restart. One name per line. Lobby is always there.

A leaked link is replaced by stopping the server and starting once with the flag. Old invites stop working. The new invite is printed again.

docker compose stop
docker compose run --rm --service-ports ryme --new-invite

What stays off the image

No client, no shell as the server process, and no extra published port. Do not mount the data volume onto a shared disk. Anyone who can read key.der can pretend to be the server.