SHA256
61 lines
2.8 KiB
Markdown
61 lines
2.8 KiB
Markdown
# Подключение TURN к SHiNE-серверу
|
||
|
||
Клиент звонков запрашивает ICE-конфиг у backend через WS-операцию `GetCallIceConfig` и использует её для `RTCPeerConnection`.
|
||
|
||
## Репозиторный конфиг
|
||
|
||
В `SHiNE-server/src/main/resources/application.properties` можно хранить только публичные домены и пустые placeholders.
|
||
|
||
Пример:
|
||
|
||
```properties
|
||
call.ice.stun.urls=stun:stun.l.google.com:19302
|
||
call.ice.turn.urls=turn:turn1.shineup.me:3478?transport=udp,turn:turn1.shineup.me:3478?transport=tcp
|
||
call.ice.turn.ttlSec=600
|
||
call.ice.turn.userPrefix=shine
|
||
call.ice.turn.sharedSecret=
|
||
|
||
call.ice.turn.servers.1.id=turn1
|
||
call.ice.turn.servers.1.urls=turn:turn1.shineup.me:3478?transport=udp,turn:turn1.shineup.me:3478?transport=tcp
|
||
call.ice.turn.servers.1.sharedSecret=
|
||
```
|
||
|
||
## Production override
|
||
|
||
Реальные `sharedSecret`, статические логины/пароли и другие секреты задавать только на сервере через внешний `application.properties` или override-конфиг. В git их не хранить.
|
||
|
||
Рекомендуемый режим:
|
||
|
||
- на coturn включить `use-auth-secret`;
|
||
- в coturn задать `static-auth-secret=<secret-on-server-only>`;
|
||
- в SHiNE-сервере задать такой же `call.ice.turn.sharedSecret` или `call.ice.turn.servers.N.sharedSecret`;
|
||
- сервер будет выдавать короткоживущие `turnUsername` / `turnPassword` с TTL.
|
||
|
||
Fallback-режим:
|
||
|
||
```properties
|
||
call.ice.turn.sharedSecret=
|
||
call.ice.turn.username=turn_user
|
||
call.ice.turn.password=turn_password
|
||
```
|
||
|
||
Fallback тоже не должен хранить реальные credentials в git.
|
||
|
||
## Деплой после изменения TURN-настроек
|
||
|
||
Для production сначала обновить бэкап в `deploy/backup/archive/`, затем выполнить нужный server deploy script:
|
||
|
||
```bash
|
||
bash deploy/scripts/production_shineupme_server.sh
|
||
```
|
||
|
||
Если менялись только серверные TURN-настройки во внешнем override-конфиге, достаточно перезапустить соответствующий `shine-server.service`.
|
||
|
||
## Проверка звонка
|
||
|
||
1. Авторизоваться двумя клиентами.
|
||
2. Запустить звонок.
|
||
3. Проверить, что звонок устанавливается в сети, где прямой P2P затруднён.
|
||
4. В диагностике звонков смотреть `CallDeliveryReport`, `pcIceConnectionState`, `routeLabel`, `configuredTurnHosts*`, `reachableTurnHosts*`.
|
||
5. Если TURN недоступен, клиент должен откатиться к STUN-конфигу по умолчанию.
|