Appearance
Инструкция по установке расширения 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: info2. Добавить сервисы в 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) настраиваются в переменных окружения.