Signal's calling service enables group voice and video functionality. This guide covers the deployemnt of the calling servicce components using Docker.
Server Components
The calling service consists of four main components deployed via Docker Compose:
services:
database:
image: "docker.1ms.run/amazon/dynamodb-local:2.5.4"
container_name: sfu-database
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
working_dir: /home/dynamodblocal
command:
-jar DynamoDBLocal.jar -sharedDb -port 8000
networks:
- voip-network
bootstrap-service:
depends_on:
- database
image: registry.cn-hangzhou.aliyuncs.com/mysignal/signal-calling-service-bootstrap:1.0.0
container_name: sfu-bootstrap
environment:
AWS_ACCESS_KEY_ID: DummyAccessKey
AWS_SECRET_ACCESS_KEY: DummyPassword
networks:
- voip-network
frontend-service:
depends_on:
- database
- bootstrap-service
- backend-service
image: registry.cn-hangzhou.aliyuncs.com/mysignal/signal-calling-service-calling-frontend:1.0.1
container_name: sfu-frontend
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
deploy:
resources:
limits:
cpus: '2.0'
memory: 5G
environment:
- RUST_LOG=calling_frontend=debug
entrypoint: calling_frontend
networks:
- voip-network
command:
- --region
- "us-west1"
- --authentication-key
- "HEX ENCODED AUTHENTICATION KEY"
- --zkparams
- "AFwg8fW39ph ...... +0TW2bVTBg=="
- --version
- "1"
- --max-clients-per-call
- "50"
- --cleanup-interval-ms
- "15000"
- --regional-url-template
- "https://sfu.yourdomain.com"
- --calling-server-url
- "http://backend-service:8080"
- --storage-table
- "Rooms"
- --storage-endpoint
- "http://database:8000"
- --storage-region
- "us-west-1"
- --internal-api-port
- "8100"
backend-service:
image: registry.cn-hangzhou.aliyuncs.com/mysignal/signal-calling-service-calling-backend:1.0.4
container_name: sfu-backend
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
deploy:
resources:
limits:
cpus: '4.0'
memory: 5G
ports:
- "10000:10000/tcp"
- "10000:10000/udp"
networks:
- voip-network
command:
- --ice-candidate-ip
- "127.0.0.1/your-server-public-ip"
- --ice-candidate-port-tcp
- "10000"
- --inactivity-timeout-secs
- "90"
- --diagnostics-interval-secs
- "10"
- --approved-users-persistence-url
- "http://frontend-service:8100/v1/call-link-approvals"
- --remove-call-records-base-url
- "http://frontend-service:8100/v2/conference"
networks:
voip-network:
driver: bridge
Nginx Reverse Proxy Configuration
Configure Nginx to handle external traffic and forward it to the calling service:
server {
listen 80;
listen 443 ssl http2;
server_name sfu.yourdomain.com;
access_log /var/log/nginx/sfu.access.log main;
ssl_certificate /etc/nginx/conf.d/certs/fullchain.cer;
ssl_certificate_key /etc/nginx/conf.d/certs/server.key;
location / {
proxy_pass http://sfu-frontend:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
DNS Configuration
Point your domain name to the server IP address. After DNS propagation completes, the service will be accessible at the configured domain.
Service Verification
Once all containers are runing and DNS is configured, the group calling functionality becomes available. Users can initiate and receive group voice and video calls through the Signal client connected to your private deployment.