Headless RallyTone party host for encrypted LAN voice and text chat on Linux AMD64 and ARM64.
528
RallyTone is a LAN-first game party voice and text chat app by BitingGoat Software. This image runs one standalone RallyTone party on an always-on Linux host or NAS.
It uses the same authoritative session and certificate-pinned TLS 1.3 QUIC transport as the RallyTone desktop host. Active party state, messages, and voice are ephemeral; the Docker volume keeps the server identity stable. Voice is relayed without being decoded, recorded, or persisted.
An optional token-protected management page shows live status and persists settings. Management-page values override environment variables one field at a time, and each override can be reset to reveal its environment or default value.
IP direct connect: RallyTone desktop can join this server by IPv4 or IPv6 address. The first connection shows an identity code that must be compared with the certificate fingerprint shown by the server owner. RallyTone does not provide a relay, hostname resolution, automatic router setup, or NAT traversal. The management page is for loopback or trusted private networks, not the public internet.
Download
docker-compose.server.yml,
then run:
docker compose -f docker-compose.server.yml pull
docker compose -f docker-compose.server.yml up -d
docker compose -f docker-compose.server.yml logs -f
Compose creates a named /config volume for page overrides and the stable
server identity. The management page remains disabled until an administrator
token is supplied.
Back up /config/identity.json as a secret. Recreating the container with the
same volume preserves the identity code; losing that file makes clients report
an identity change on the next connection.
docker volume create rallytone-server-config
docker run -d \
--name rallytone-server \
--network host \
--restart unless-stopped \
--read-only \
--cap-drop ALL \
--security-opt no-new-privileges:true \
--mount source=rallytone-server-config,target=/config \
-e RALLYTONE_PARTY_NAME="RallyTone Server" \
-e RALLYTONE_CAPACITY=12 \
bitinggoatsoft/rallytone-server:latest
Set an administrator token of 16–256 bytes and bind the management listener to a trusted LAN interface:
-e RALLYTONE_ADMIN_BIND=0.0.0.0:15382
-e RALLYTONE_ADMIN_TOKEN_FILE=/run/secrets/rallytone_admin_token
-v /private/path/rallytone-admin-token:/run/secrets/rallytone_admin_token:ro
Open http://<server-LAN-address>:15382/. Keep TCP 15382 restricted to the
trusted LAN and never forward it from a router. The built-in endpoint is plain
HTTP; use the default loopback binding or a restricted HTTPS reverse proxy when
possible.
Party details, access, join lock, LAN visibility, and member permissions update
without disconnecting participants. Party and management listener addresses
and LAN discovery startup require a restart. A password set on the page is
stored in the private /config/server.json file but is never returned by the
management API.
| Port | Protocol | Purpose |
|---|---|---|
15381 | UDP | Party control, chat, and encrypted voice |
15382 | TCP | Optional token-protected management page |
RallyTone discovery uses multicast that does not cross normal Docker bridge/NAT
networking. Use --network host, network_mode: host, or Host network mode
in QNAP Container Station and Synology Container Manager.
Bridge networking is only appropriate when both LAN discovery settings are
disabled and UDP 15381:15381 is published. If the host is behind a router,
forward UDP 15381 to it. In the desktop app, choose Connect by IP, enter
the address, and compare the displayed identity code with the server's
certificate fingerprint before confirming. Use a strong party password and
never forward the management TCP port.
| Variable | Default | Description |
|---|---|---|
RALLYTONE_SESSION_BIND | 0.0.0.0:15381 | UDP party listener address |
RALLYTONE_MDNS | 1 | Start LAN discovery support |
RALLYTONE_ADVERTISE_ON_LAN | 1 | Show the party on the LAN |
RALLYTONE_PARTY_NAME | RallyTone Server | Party name |
RALLYTONE_HOST_NICKNAME | RallyTone Server | Host participant name |
RALLYTONE_HOST_AVATAR_ID | ember | Built-in avatar ID |
RALLYTONE_CAPACITY | 12 | Total participants, including the host |
RALLYTONE_GAME_LABEL | empty | Optional game or activity label |
RALLYTONE_PARTY_PASSWORD | unset | Inline party password |
RALLYTONE_PARTY_PASSWORD_FILE | unset | Party password file |
RALLYTONE_SELF_MOVE_ALLOWED | 1 | Let members change rooms |
RALLYTONE_RENAME_ALLOWED | 1 | Let members rename themselves |
RALLYTONE_JOIN_LOCKED | 0 | Start with new joins paused |
RALLYTONE_ADMIN_BIND | 127.0.0.1:15382 | Management HTTP listener |
RALLYTONE_ADMIN_TOKEN | unset | Inline administrator token |
RALLYTONE_ADMIN_TOKEN_FILE | unset | Administrator token file |
RALLYTONE_CONFIG_PATH | /config/server.json | Page override file in this image |
RALLYTONE_CONFIG_READ_ONLY | 0 | Prevent page configuration changes |
RALLYTONE_IDENTITY_PATH | /config/identity.json | Private persistent server certificate/key |
Boolean values accept 1/0, true/false, on/off, and yes/no. Inline and
file variants for the same password/token are mutually exclusive. The complete
configuration and security contract is in the
RallyTone server documentation.
When member rename is enabled, compatible desktop clients commit the new
nickname through the profile control; the server validates its length and
uniqueness before publishing it to the party.
latest — most recently published server releasev<version> — versioned release taglinux/amd64, linux/arm6465532:65532, no shellContent type
Image
Digest
sha256:86cc76939…
Size
2.6 MB
Last updated
25 days ago
docker pull bitinggoatsoft/rallytone-server