feat(turn): TURN/TLS с сертификатом, порты релея и автообновление сертификата

- install.sh: --turn-domain/--turn-cert/--turn-key, проверка наличия сертификата,
  копирование в /opt/glchat/certs, UFW открывает диапазон релея
- livekit.yaml.tpl: relay_range_start/end, cert_file/key_file
- compose: сертификаты монтируются в LiveKit read-only
- systemd timer glchat-cert-refresh: ежедневно копирует обновлённый сертификат
  из внешнего ACME-хранилища и перезапускает LiveKit при изменении
- smoke.sh: TURN-порты обязательны при включённом TURN + проверка CN сертификата
This commit is contained in:
2026-09-19 20:22:57 +03:00
parent 5353c5d5a2
commit c5392349cd
5 changed files with 135 additions and 4 deletions
+14 -1
View File
@@ -121,9 +121,22 @@ else
if ss -tulnH 2>/dev/null | grep -q ":${port} "; then
pass "слушает ${spec}"
else
skip "не слушает ${spec} (проверьте конфиг LiveKit/TURN)"
fail "не слушает ${spec} (TURN не запустился: проверьте cert_file в livekit.yaml)"
fi
done
# TURN/TLS должен отдавать валидный сертификат на своём домене.
turn_domain="$(grep -A3 '^turn:' "${GLCHAT_ETC_DIR}/livekit/livekit.yaml" 2>/dev/null |
awk '/domain:/ {print $2; exit}')"
if [ -n "$turn_domain" ] && command -v openssl >/dev/null 2>&1; then
cert_cn="$(echo | timeout 8 openssl s_client -connect "127.0.0.1:${TURN_TLS_PORT}" \
-servername "$turn_domain" 2>/dev/null |
openssl x509 -noout -subject 2>/dev/null | sed 's/.*CN *= *//')"
if [ "$cert_cn" = "$turn_domain" ]; then
pass "TURN/TLS отдаёт сертификат для ${turn_domain}"
else
fail "TURN/TLS: сертификат не для ${turn_domain} (CN=${cert_cn:-нет})"
fi
fi
fi
fi