Signal 群组音视频服务器配置指南

私有化 Signal 服务器部署完成群组音视频功能,特记录如下 以免遗忘。

服务器组件

services:
  dynamodb:
    image: "docker.1ms.run/amazon/dynamodb-local:2.5.4"
    container_name: calling-dynamodb
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
    working_dir: /home/dynamodblocal
    command:
      # Use -inMemory for performance and because the data is temporary.
      -jar DynamoDBLocal.jar -inMemory
    networks:
      - signal

  calling-bootstrap:
    depends_on:
      - dynamodb
    image: registry.cn-hangzhou.aliyuncs.com/mysignal/signal-calling-service-bootstrap:1.0.0
    container_name: calling-bootstrap
    environment:
      AWS_ACCESS_KEY_ID: DummyAccessKey
      AWS_SECRET_ACCESS_KEY: DummyPassword
    networks:
      - signal

  calling-frontend:
    depends_on:
      - dynamodb
      - calling-bootstrap
      - calling-backend
    image: registry.cn-hangzhou.aliyuncs.com/mysignal/signal-calling-service-calling-frontend:1.0.1
    container_name: calling-frontend
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 5G
    environment:
      - RUST_LOG=calling_frontend=trace
    entrypoint: calling_frontend
    networks:
      - signal
    command:
      - --region
      - "us-west1"
      - --authentication-key
      - "HEX ENCODED AUTHENTICATION KEY"
      - --zkparams
      - "AFwg8fW39ph ...... +0TW2bVTBg=="
      - --version
      - "1"
      - --max-clients-per-call
      - "50"
      - --cleanup-interval-ms
      - "10000"
      - --regional-url-template
      - "https://sfu.signal.xxx.cn"
      - --calling-server-url
      - "http://calling-backend:8080"
      - --storage-table
      - "Rooms"
      - --storage-endpoint
      - "http://dynamodb:8000"
      - --storage-region
      - "us-west-1"
      - --internal-api-port
      - "8100"

  calling-backend:
    image: registry.cn-hangzhou.aliyuncs.com/mysignal/signal-calling-service-calling-backend:1.0.4
    container_name: calling-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:
      - signal
    command:
      - --ice-candidate-ip
      - "127.0.0.1/your server public ip"
      - --ice-candidate-port-tcp
      - "10000"
      - --inactivity-timeout-secs
      - "60"
      - --diagnostics-interval-secs
      - "10"
      - --approved-users-persistence-url
      - "http://calling-frontend:8100/v1/call-link-approvals"
      - --remove-call-records-base-url
      - "http://calling-frontend:8100/v2/conference"

networks:
  signal:
    external: true

配置 nginx ,增加一个 sfu.conf 配置如下:

server {
    listen 80;
    listen 443 ssl;
    http2 on;
    server_name  sfu.signal.xxx.cn;
    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://calling-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;
    }
}

并加域名 sfu.signal.xxx.cn 指向目标服务器 IP,即可。

效果演示

发起通话与接收:
img

群聊音视频效果
img

如果你也需要在公司内网部署 signal,可以联系我~ +signal: pfoxh.25 或者 tg: pfoxh25

posted @ 2025-05-21 20:54  pfoxh  阅读(127)  评论(0)    收藏  举报