Deploying Signal Group Voice and Video Calling Service

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.

Tags: signal WebRTC group calling docker SFU

Posted on Sat, 29 Aug 2026 16:20:32 +0000 by yujikaido