Self-Hosting
Run your own Voca signaling server. Just the Rust server—no UI, no database,
no external dependencies.
Build your own apps on top using the SDK.
Quick Start (Docker)
1. Pull & Run
docker run -p 3001:3001 \ -e VOCA_ADMIN_TOKEN=your-secret-token \ ghcr.io/treyorr/voca-signaling:latest
2. Point SDK to Your Server
const client = new VocaClient(roomId, {
serverUrl: 'https://your-domain.com',
});Environment Variables
| Variable | Required | Description |
|---|---|---|
| VOCA_ADMIN_TOKEN | YES | Token for admin API endpoints |
| VOCA_API_KEY | NO | Optional API key for room creation |
| VOCA_MAX_PEERS_PER_ROOM | NO | Default: 6 |
| VOCA_MAX_GLOBAL_ROOMS | NO | Default: 10000 |
| VOCA_LOG_DIR | NO | Log file directory |
| RUST_LOG | NO | Logging level: info, debug, trace |
Docker Compose
docker-compose.yml
services:
signaling:
image: ghcr.io/treyorr/voca-signaling:latest
ports:
- "3001:3001"
environment:
VOCA_ADMIN_TOKEN: ${VOCA_ADMIN_TOKEN}
VOCA_API_KEY: ${VOCA_API_KEY}
VOCA_MAX_PEERS_PER_ROOM: 6
VOCA_MAX_GLOBAL_ROOMS: 10000
RUST_LOG: info
restart: unless-stoppedBuilding from Source
# Clone repo git clone https://github.com/treyorr/voca cd voca/services/signaling # Build cargo build --release # Run export VOCA_ADMIN_TOKEN=your-secret ./target/release/signaling
Admin API
The server provides REST API endpoints for monitoring. All admin endpoints require Bearer authentication.
Available Endpoints
# List active rooms
curl -H "Authorization: Bearer ${VOCA_ADMIN_TOKEN}" \
https://your-domain.com/api/admin/rooms
# Server metrics
curl -H "Authorization: Bearer ${VOCA_ADMIN_TOKEN}" \
https://your-domain.com/api/admin/metrics
# Recent logs (if VOCA_LOG_DIR is set)
curl -H "Authorization: Bearer ${VOCA_ADMIN_TOKEN}" \
https://your-domain.com/api/admin/logsHTTPS/WSS Setup
Use a reverse proxy (Caddy, Nginx, Traefik) for TLS termination:
# Caddyfile
voca.yourdomain.com {
reverse_proxy localhost:3001
}