self-host
Run Rune
One image for a single node or a cluster. Configuration is environment variables.
Single node
On Docker Desktop or Rosetta, add -e RUNE_IO_BACKEND=portable.
docker run --rm --shm-size=256m \
-e RUNE_NODE_ID=0 \
-e RUNE_PEERS='0@127.0.0.1:40111' \
-e RUNE_CLIENT_ENDPOINT='0.0.0.0:40200' \
-e RUNE_DATA_DIR=/var/lib/rune -v rune-data:/var/lib/rune \
-p 40200:40200/udp rune-broker:latest
3-node cluster
Same image on every node; only RUNE_NODE_ID differs. Use 1 node, or an odd count of 3 or more.
docker compose -f docker/docker-compose.yml up -d rune-1 rune-2 rune-3
docker compose -f docker/docker-compose.yml down -v
one node in docker/docker-compose.custom.yml
rune-1:
image: rune-broker:latest
shm_size: 256m
environment:
RUNE_NODE_ID: "0"
RUNE_PEERS: "0@rune-1:40111:40200,1@rune-2:40111:40200,2@rune-3:40111:40200"
RUNE_CLIENT_ENDPOINT: "0.0.0.0:40200"
RUNE_DATA_DIR: /var/lib/rune
RUNE_TOPICS: "player:8:compact,match_events:8,kills:1"
volumes: ["./rune-data/node0:/var/lib/rune"]
ports: ["40201:40200/udp"]
Environment
Everything else has a default derived from the host.
RUNE_NODE_IDThis node's id, 0-based.RUNE_PEERSAll nodes asid@host:consensusPort:clientPort, identical on every node.RUNE_CLIENT_ENDPOINTRawhost:portclients connect to, e.g.0.0.0.0:40200.RUNE_DATA_DIRLogs, checkpoints and views. Mount a volume.RUNE_TOPICSOptional boot topics:name:partitions[:delete|compact][:persistence=transient].RUNE_WORKERSPartition workers per node, one per core.RUNE_TLS_CERT_FILE / _KEY_FILEPEM files; reloaded onSIGHUP.RUNE_REQUIRE_TLS1rejects plaintext clients.
Ports
All UDP. Pass --shm-size=256m and a high nofile ulimit.
40111/udpConsensus between nodes.40200/udpClients.41000 + 192 × idPer-worker block: ingress, +64 replication, +128 egress control.