mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
✨ feat(calls): relay работает сразу после установки, без настройки
Звонок через симметричный NAT или VPN без relay не соединяется — значит relay должен стоять из коробки, а не быть отдельным профилем с выделенным IP и сертификатом. Coturn поднимается вместе со стеком на том же адресе: порт 3478 не спорит с 80 и 443, TURN-over-TLS выключен, потому что он и требовал второго адреса. Адреса relay и STUN считаются от адреса установки и появляются в настройках сами; вписанное владельцем по-прежнему побеждает. Deploy и doctor больше не требуют второго публичного адреса, README обоих языков переписан: вместо «опционально, выделенный IP» — какие порты открыть. Проверено: тесты TURN (включая четыре новых на автонастройку), тесты API звонков и адреса установки. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1de6239eb4
commit
d9bc540bc3
10 files changed
+157
-102
No files matched your search
@@ -97,27 +97,6 @@ verify_release_checksums() {
|
||||
}
|
||||
}
|
||||
|
||||
validate_calls_network_boundary() {
|
||||
# Профиль calls включают переменной окружения — тем же способом, каким её
|
||||
# читает сам compose. Файла с конфигурацией у установки нет.
|
||||
local web_ip turn_ip
|
||||
web_ip="${CHATBALLS_WEB_LISTENING_IP:-}"
|
||||
turn_ip="${CHATBALLS_TURN_LISTENING_IP:-}"
|
||||
|
||||
[[ -n "$web_ip" ]] || {
|
||||
log_err "CHATBALLS_WEB_LISTENING_IP is required for calls profile"
|
||||
return 1
|
||||
}
|
||||
[[ "$web_ip" != "0.0.0.0" ]] || {
|
||||
log_err "CHATBALLS_WEB_LISTENING_IP cannot be 0.0.0.0 when calls profile uses TURN TLS on 443"
|
||||
return 1
|
||||
}
|
||||
[[ "$web_ip" != "$turn_ip" ]] || {
|
||||
log_err "web and TURN listeners must use different public IP addresses"
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
release_image_keys() {
|
||||
printf '%s\n' \
|
||||
CHATBALLS_BACKEND_IMAGE \
|
||||
|
||||
@@ -24,10 +24,7 @@ cmd_deploy() {
|
||||
run_compose run --rm init || die "deploy: init (migrate) failed" 1
|
||||
|
||||
log "deploy: starting application services"
|
||||
local app_services=(backend-app backend-platform backend-admin worker frontend gateway)
|
||||
if profile_enabled calls; then
|
||||
app_services+=(coturn)
|
||||
fi
|
||||
local app_services=(backend-app backend-platform backend-admin worker frontend gateway coturn)
|
||||
run_compose up -d "${app_services[@]}" || die "deploy: application start failed" 1
|
||||
|
||||
log "deploy: waiting for application health"
|
||||
@@ -36,9 +33,8 @@ cmd_deploy() {
|
||||
_wait_running backend-admin 30 || die "deploy: admin backend did not start" 1
|
||||
_wait_running frontend 30 || die "deploy: frontend did not start" 1
|
||||
_wait_running gateway 30 || die "deploy: gateway did not start" 1
|
||||
if profile_enabled calls; then
|
||||
_wait_healthy coturn 60 || die "deploy: coturn did not become healthy" 1
|
||||
fi
|
||||
# Relay поднимается вместе со всеми: звонки за NAT без него не соединяются.
|
||||
_wait_healthy coturn 60 || die "deploy: coturn did not become healthy" 1
|
||||
|
||||
log "deploy: running smoke checks"
|
||||
_smoke || die "deploy: smoke checks failed" 1
|
||||
@@ -57,10 +53,6 @@ _deploy_validate() {
|
||||
# Домены здесь не проверяются: установка отвечает по адресу сервера, а свой
|
||||
# домен владелец задаёт в «Настройках» — снаружи его знать неоткуда.
|
||||
|
||||
if profile_enabled calls; then
|
||||
validate_calls_network_boundary || return 1
|
||||
fi
|
||||
|
||||
compose_config_validate >/dev/null 2>&1 || {
|
||||
log_err "compose config invalid"
|
||||
return 1
|
||||
|
||||
@@ -85,19 +85,12 @@ cmd_doctor() {
|
||||
# прежние проверки просто ругались на исправную установку — они читали
|
||||
# instance .env, которого у продукта нет.
|
||||
|
||||
if profile_enabled calls; then
|
||||
local missing=0 k
|
||||
for k in CHATBALLS_CALL_TURN_REALM CHATBALLS_TURN_EXTERNAL_IP CHATBALLS_TURN_LISTENING_IP; do
|
||||
if [[ -z "${!k:-}" ]]; then
|
||||
_doctor_report 0 "$k required for calls profile"
|
||||
missing=1
|
||||
fi
|
||||
done
|
||||
if [[ "$missing" == "0" ]] && validate_calls_network_boundary; then
|
||||
_doctor_report 1 "calls profile network boundary valid"
|
||||
else
|
||||
_doctor_report 0 "calls profile network boundary invalid"
|
||||
fi
|
||||
# Relay стоит на том же адресе, что и веб: порт 3478 не спорит с 80 и 443,
|
||||
# поэтому проверять нечего, кроме того, что он поднялся.
|
||||
if run_compose ps --status running --services 2>/dev/null | grep -qx coturn; then
|
||||
_doctor_report 1 "calls relay (coturn) is running"
|
||||
else
|
||||
_doctor_report 0 "calls relay (coturn) is not running — calls behind NAT will fail"
|
||||
fi
|
||||
|
||||
if { [[ -d "$inst/backups" ]] && [[ -w "$inst/backups" ]]; } || [[ -w "$inst" ]]; then
|
||||
|
||||
Reference in new issue
Block a user