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

VariableRequiredDescription
VOCA_ADMIN_TOKENYESToken for admin API endpoints
VOCA_API_KEYNOOptional API key for room creation
VOCA_MAX_PEERS_PER_ROOMNODefault: 6
VOCA_MAX_GLOBAL_ROOMSNODefault: 10000
VOCA_LOG_DIRNOLog file directory
RUST_LOGNOLogging 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-stopped

Building 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/logs

HTTPS/WSS Setup

Use a reverse proxy (Caddy, Nginx, Traefik) for TLS termination:

# Caddyfile
voca.yourdomain.com {
    reverse_proxy localhost:3001
}