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:
@@ -35,18 +35,38 @@ POSTGRES_DB=vidconf
|
||||
|
||||
## Redis (очередь Celery)
|
||||
|
||||
### REDIS_PASSWORD
|
||||
**Тип:** `str` | **Обязателен** (нет дефолта — `${REDIS_PASSWORD:?}` в `deploy/docker-compose.yml`)
|
||||
|
||||
**Описание:** Пароль Redis (`--requirepass`). Без него `docker compose up` не
|
||||
стартует — намеренно: инцидент безопасности на этом проекте начался именно
|
||||
с redis без пароля, опубликованного наружу (см. `.forcc/deploy/SESSION2-FINDINGS.md`
|
||||
во внутренних заметках сессии деплоя). `install.sh` генерирует случайное
|
||||
значение при первой установке. Используется backend/worker/livekit/egress —
|
||||
все читают его через `REDIS_URL`/секцию `redis:` своих конфигов, генерируемых
|
||||
из `.env` (см. `deploy/render-templates.sh`).
|
||||
|
||||
**Пример:**
|
||||
```bash
|
||||
REDIS_PASSWORD=a1b2c3...
|
||||
```
|
||||
|
||||
### REDIS_URL
|
||||
**Тип:** `str` | **Default:** `redis://localhost:6379/0`
|
||||
|
||||
**Описание:** URL Redis для брокера Celery (очередь задач) и кэша сеансов.
|
||||
Значим только при запуске backend/worker НА ХОСТЕ вне docker-сети — внутри
|
||||
контейнеров `docker-compose.yml` всегда подставляет
|
||||
`redis://:${REDIS_PASSWORD}@redis:6379/0` сам, это значение игнорируя.
|
||||
|
||||
**Пример:**
|
||||
```bash
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
REDIS_URL=redis://:password@localhost:6379/0
|
||||
REDIS_URL=redis://:password@redis.example.com:6379/1 # с паролем, БД 1
|
||||
```
|
||||
|
||||
**Проде:** Используйте Redis с паролем и настройте мониторинг/резервные копии.
|
||||
**Проде:** Redis публикуется только на `127.0.0.1` (loopback) — снаружи
|
||||
недоступен даже с паролем; удалённый доступ — через ssh-туннель.
|
||||
|
||||
---
|
||||
|
||||
@@ -440,7 +460,8 @@ SMTP_TIMEOUT_S=30
|
||||
```bash
|
||||
# Database & Redis
|
||||
DATABASE_URL=postgresql+asyncpg://vidconf:vidconf@localhost:5432/vidconf
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
REDIS_PASSWORD=change-me-redis-secret
|
||||
REDIS_URL=redis://:change-me-redis-secret@localhost:6379/0
|
||||
|
||||
# App
|
||||
PLUGINS_CONFIG_PATH=config/plugins.yaml
|
||||
@@ -468,6 +489,7 @@ MEDIA_ROOT=/app/media
|
||||
```bash
|
||||
# Database & Redis
|
||||
DATABASE_URL=postgresql+asyncpg://vidconf:secure-pass@db.example.com:5432/vidconf
|
||||
REDIS_PASSWORD=redis-password
|
||||
REDIS_URL=redis://:redis-password@redis.example.com:6379/0
|
||||
|
||||
# App
|
||||
|
||||
Reference in New Issue
Block a user