Переносит рабочие правки продакшен-сервера в репозиторий воспроизводимо: - nginx: HTTPS-блок на 443 (TLS1.2/1.3, http->https redirect, ACME webroot, X-Forwarded-Proto) добавлен в nginx.conf.template. Список доменов и имя каталога сертификата — параметры (NGINX_SERVER_NAMES, NGINX_CERT_NAME), не хардкод. Рендерится штатным entrypoint'ом образа nginx (envsubst-on-templates). - Самоподписанный dev-сертификат генерируется на старте контейнера (docker-entrypoint-certs.sh), если реальный Let's Encrypt не смонтирован — иначе `docker compose up` без профиля ломался бы локально без реальных сертификатов. - healthcheck nginx переключён на /healthz (без TLS-редиректа), иначе http://127.0.0.1:80/ после добавления 443-редиректа всегда unhealthy. - coturn/turnserver.conf и livekit/livekit.yaml переведены в *.template — оба образа не читают env для статических полей (static-auth-secret, use_external_ip/node_ip, webhook.api_key), поэтому реальные файлы генерируются перед стартом стека скриптом deploy/render-templates.sh (вызывается install.sh). Секреты/IP — только в .env, не в git. - docker-compose.yml: LIVEKIT_API_KEY/SECRET везде (backend, livekit, egress) через ${VAR:?} без небезопасных дефолтов; порт 443 + монтирование /etc/letsencrypt (ro) и certbot-webroot у nginx; build-args VITE_LIVEKIT_URL/NEXT_PUBLIC_LIVEKIT_URL для frontend (сейчас не используются кодом, оставлены про запас).
53 lines
3.2 KiB
Bash
Executable File
53 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Рендерит статические конфиги coturn/LiveKit из шаблонов (deploy/**/*.template)
|
||
# в реальные файлы, которые монтирует docker-compose. Оба образа (coturn,
|
||
# livekit-server) НЕ поддерживают подстановку переменных окружения в файле
|
||
# конфигурации (см. комментарии в *.template) — единственный способ вынести
|
||
# секреты/IP в .env и не хранить их в git — сгенерировать файл перед стартом.
|
||
#
|
||
# Вызывается автоматически из install.sh. При ручном запуске (без install.sh)
|
||
# запускайте ПЕРЕД `docker compose up` (и после каждого изменения .env,
|
||
# влияющего на эти конфиги) — из корня репозитория:
|
||
# ./deploy/render-templates.sh
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
ENV_FILE="$SCRIPT_DIR/../.env"
|
||
|
||
if [ ! -f "$ENV_FILE" ]; then
|
||
echo "render-templates.sh: не найден $ENV_FILE — сначала запустите ./install.sh или скопируйте .env.example в .env" >&2
|
||
exit 1
|
||
fi
|
||
|
||
# Читаем только нужные ключи через grep/cut (НЕ `source .env`) — .env содержит
|
||
# значения вроде `SMTP_FROM=VidConf <no-reply@vidconf.example>`, где `<` —
|
||
# валидный литерал для docker-compose/pydantic, но невалидный bash-синтаксис
|
||
# (интерпретируется как редирект) при попытке `source` файла целиком.
|
||
env_var() {
|
||
grep -E "^${1}=" "$ENV_FILE" 2>/dev/null | tail -1 | cut -d= -f2-
|
||
}
|
||
|
||
TURN_STATIC_AUTH_SECRET="$(env_var TURN_STATIC_AUTH_SECRET)"
|
||
TURN_REALM="$(env_var TURN_REALM)"
|
||
TURN_EXTERNAL_IP="$(env_var TURN_EXTERNAL_IP)"
|
||
LIVEKIT_API_KEY="$(env_var LIVEKIT_API_KEY)"
|
||
LIVEKIT_NODE_IP="$(env_var LIVEKIT_NODE_IP)"
|
||
LIVEKIT_USE_EXTERNAL_IP="$(env_var LIVEKIT_USE_EXTERNAL_IP)"
|
||
|
||
: "${TURN_STATIC_AUTH_SECRET:?TURN_STATIC_AUTH_SECRET не задан в .env}"
|
||
: "${TURN_REALM:?TURN_REALM не задан в .env}"
|
||
: "${TURN_EXTERNAL_IP:?TURN_EXTERNAL_IP не задан в .env (внешний IP/домен сервера для TURN-релея)}"
|
||
: "${LIVEKIT_API_KEY:?LIVEKIT_API_KEY не задан в .env}"
|
||
: "${LIVEKIT_NODE_IP:?LIVEKIT_NODE_IP не задан в .env (внешний IP/домен для ICE)}"
|
||
: "${LIVEKIT_USE_EXTERNAL_IP:?LIVEKIT_USE_EXTERNAL_IP не задан в .env (true/false)}"
|
||
|
||
export TURN_STATIC_AUTH_SECRET TURN_REALM TURN_EXTERNAL_IP LIVEKIT_API_KEY LIVEKIT_NODE_IP LIVEKIT_USE_EXTERNAL_IP
|
||
|
||
envsubst '${TURN_STATIC_AUTH_SECRET} ${TURN_REALM} ${TURN_EXTERNAL_IP}' \
|
||
< "$SCRIPT_DIR/coturn/turnserver.conf.template" > "$SCRIPT_DIR/coturn/turnserver.conf"
|
||
echo "[render] deploy/coturn/turnserver.conf готов"
|
||
|
||
envsubst '${LIVEKIT_USE_EXTERNAL_IP} ${LIVEKIT_NODE_IP} ${LIVEKIT_API_KEY}' \
|
||
< "$SCRIPT_DIR/livekit/livekit.yaml.template" > "$SCRIPT_DIR/livekit/livekit.yaml"
|
||
echo "[render] deploy/livekit/livekit.yaml готов"
|