Skip to content

Инструкция по установке расширения Callbox с использованием Docker compose

Конфигурация в Nextbox установленный с помощью docker-compose

Если ранее был использован метод установки nextbox с помощью docker-compose. То достаточно добавить четыре сервиса в уже существующую конфигурацию:

  • callbox
  • livekit
  • livekit-egress
  • egress-files

А также создать файл livekit.yaml в одной директории с docker-compose.yaml.

1. Создать файл livekit.yaml

yaml
port: 7880
rtc:
  tcp_port: 7881
  port_range_start: 50000
  port_range_end: 50060
  use_external_ip: false
keys:
  # Формат: <LIVEKIT_API_KEY>: <LIVEKIT_API_SECRET>
  # Значения должны совпадать с переменными в docker-compose.yaml
  devkey: devsecret
logging:
  level: info

2. Добавить сервисы в docker-compose.yaml

В конец файла docker-compose.yaml добавьте следующие строки:

yaml
callbox:
  image: nextbox-docker.ptnl.moscow/nextbox/callbox:alder-1.10.0
  restart: always
  depends_on:
    postgresql:
      condition: "service_started"
    discovery:
      condition: "service_started"
    livekit:
      condition: "service_started"
  networks:
    - nextbox
  volumes:
    - callbox_data:/var/callbox
  environment:
    - PORT=8081
    - JWT_SECRET=qwe123
    - DATABASE_DSN=host=postgresql port=5432 user=nextbox password=nextbox dbname=callbox sslmode=disable
    - DISCOVERY_URL=http://discovery:6011
    - SERVICE_TOKEN=qwe123
    - SERVICE_BACK_URL=http://callbox:8081
    - NEXTBOX_API_URL=http://gateway:6005
    - LIVEKIT_SERVER_URL=http://livekit:7880
    - LIVEKIT_CLIENT_URL=ws://localhost:8095/livekit
    - LIVEKIT_API_KEY=devkey
    - LIVEKIT_API_SECRET=devsecret
    - RECORDING_ENABLED=false
    - EGRESS_FILES_URL=http://egress-files:9100

livekit:
  image: livekit/livekit-server:latest
  restart: always
  command: --config /etc/livekit.yaml
  networks:
    - nextbox
  ports:
    - "7880:7880"
    - "7881:7881"
    - "50000-50060:50000-50060/udp"
  volumes:
    - ./livekit.yaml:/etc/livekit.yaml:ro

livekit-egress:
  image: livekit/egress:latest
  restart: always
  depends_on:
    - livekit
  networks:
    - nextbox
  environment:
    EGRESS_CONFIG_STRING: |
      log_level: info
      api_key: devkey
      api_secret: devsecret
      ws_url: ws://livekit:7880
      file_output:
        local:
          - /data/egress
  volumes:
    - egress_data:/data/egress

egress-files:
  image: nextbox-docker.ptnl.moscow/nextbox/callbox-egress-files:alder-1.10.0
  restart: always
  depends_on:
    - livekit-egress
  networks:
    - nextbox
  environment:
    - DATA_DIR=/data/egress
    - PORT=9100
    - MAX_AGE=60m
    - CLEANUP_INTERVAL=10m
  volumes:
    - egress_data:/data/egress

И в секцию volumes добавьте:

yaml
volumes:
  # ...уже существующие volumes
  callbox_data:
  egress_data:

WARNING

Значения LIVEKIT_API_KEY и LIVEKIT_API_SECRET должны совпадать в трёх местах: в сервисах callbox и livekit-egress (docker-compose.yaml), а также в секции keys файла livekit.yaml. Иначе callbox не сможет выдавать токены на подключение, а egress — записывать звонки.

3. Добавить проксирование в default.conf

В уже существующий блок server { ... } в файле default.conf добавьте два роута — для веб-интерфейса Callbox и для WebSocket-соединения с LiveKit:

nginx
server {
    # Настройки nextbox
    # из предыдущей инструкции
    # ...

    # новые настройки, которые необходимо добавить
    location /callbox {
        proxy_pass http://callbox:8081;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $the_host/callbox;
        proxy_set_header X-Forwarded-Proto $the_scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_request_buffering off;
    }

    location /livekit {
        proxy_pass http://livekit:7880;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_request_buffering off;
        proxy_read_timeout 86400;
    }
}

После изменения конфигурации примените её:

bash
docker compose up -d

Приложение доступно по адресу http://localhost:8095/callbox.

Рекомендации для продакшена

  • Сетевой периметр. Порт 7880 (HTTP/WebSocket LiveKit) и UDP-диапазон 50000-50060 (медиа) должны быть доступны с устройств пользователей. Если Nextbox стоит за reverse proxy с TLS, замените LIVEKIT_CLIENT_URL на внешний WebSocket-адрес: wss://calls.example.com/livekit.
  • Секреты. Значения JWT_SECRET, SERVICE_TOKEN, LIVEKIT_API_KEY, LIVEKIT_API_SECRET по умолчанию — тестовые. Для продакшена замените на криптографически стойкие.
  • Внешний IP. В livekit.yaml поставьте rtc.use_external_ip: true, иначе LiveKit не сможет сообщить клиентам свой публичный адрес.
  • Push-уведомления. Если используете push о входящих звонках — сгенерируйте VAPID-ключи npx web-push generate-vapid-keys и передайте их в callbox через VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY.
  • Запись звонков. Для включения записи поставьте RECORDING_ENABLED=true. Параметры хранения (MAX_AGE, CLEANUP_INTERVAL) и токен защиты ссылок (BEARER_TOKEN у egress-files) настраиваются в переменных окружения.