deploy: require redis auth (--requirepass) across all consumers

Redis without a password was the root cause of the security incident
(cron miner via unauthenticated replication RCE, see
.forcc/deploy/SESSION2-FINDINGS.md). Loopback binding alone doesn't
protect against a compromised container inside the same compose
network, so wire REDIS_PASSWORD as a required secret everywhere redis
is used: backend/worker/worker-transcriber(-gpu), redis-exporter,
livekit and egress (via rendered templates). docker compose now
refuses to start without it instead of silently running unauthenticated.
This commit is contained in:
2026-07-25 22:59:34 +03:00
parent d593add0f3
commit 5e42f6d11b
9 changed files with 77 additions and 15 deletions

View File

@@ -248,7 +248,7 @@ fi
ensure_env_file
if [ "$FRESH_ENV" = "1" ]; then
for key in JWT_SECRET POSTGRES_PASSWORD TURN_STATIC_AUTH_SECRET \
for key in JWT_SECRET POSTGRES_PASSWORD REDIS_PASSWORD TURN_STATIC_AUTH_SECRET \
LIVEKIT_API_SECRET GRAFANA_ADMIN_PASSWORD SEED_ADMIN_PASSWORD; do
set_env_var "$key" ""
done
@@ -264,6 +264,14 @@ ensure_secret POSTGRES_PASSWORD 16
# compose), не `localhost` (тот годится только для запуска backend на хосте
# вне контейнера, см. docs/deploy/dev-setup.md).
set_env_var DATABASE_URL "postgresql+asyncpg://$(get_env_var POSTGRES_USER):$(get_env_var POSTGRES_PASSWORD)@postgres:5432/$(get_env_var POSTGRES_DB)"
ensure_secret REDIS_PASSWORD 24
# REDIS_URL здесь — только для запуска backend/worker НА ХОСТЕ вне
# docker-сети (см. docs/deploy/dev-setup.md): внутри контейнеров
# docker-compose.yml всегда подставляет redis://:${REDIS_PASSWORD}@redis:6379/0
# сам, независимо от этого значения. Пересобираем на каждом запуске по
# тому же принципу, что и DATABASE_URL выше — иначе после регенерации
# REDIS_PASSWORD это значение осталось бы со старым паролем.
set_env_var REDIS_URL "redis://:$(get_env_var REDIS_PASSWORD)@localhost:6379/0"
ensure_secret TURN_STATIC_AUTH_SECRET 24
ensure_secret LIVEKIT_API_SECRET 32
ensure_secret GRAFANA_ADMIN_PASSWORD 16
@@ -372,7 +380,7 @@ for _p in "${_profiles[@]}"; do
[ -n "$_p" ] && PROFILE_ARGS+=(--profile "$_p")
done
echo "[install] Рендерю coturn/livekit из шаблонов (deploy/render-templates.sh)"
echo "[install] Рендерю coturn/livekit/egress из шаблонов (deploy/render-templates.sh)"
"$SCRIPT_DIR/deploy/render-templates.sh"
echo "[install] docker compose pull (лучше сразу, но необязательный шаг — образы, которых нет в реестре под текущим тегом, пропускаются)"