## Переменные окружения в docker-compose: безопасность и гибкость **Контекст:** `docker-compose.yml` содержал хардкоженные пароли (`photoplaces_dev`) и JWT-секреты. Это безопасно только для локальной разработки, но легко приводит к утечкам через Git. **Суть:** Все чувствительные значения выносятся в переменные с дефолтами для dev: ```yaml services: postgres: environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-photoplaces_dev} redis: command: redis-server --requirepass ${REDIS_PASSWORD:-photoplaces_dev} backend: environment: JWT_SECRET: ${JWT_SECRET:-dev-secret} DATABASE_URL: postgres://user:${POSTGRES_PASSWORD:-photoplaces_dev}@postgres/db ``` **Правила:** 1. Всегда используй `${VAR:-default}` — прозрачный fallback 2. В `.env` файле для dev переопределяй только то, что нужно 3. В production — всегда задавай через `--env-file` или secrets 4. Никогда не коммить `.env` с реальными секретами **Защита от утечек:** - `.gitignore` должен содержать `*.env` (кроме `.env.example`) - Docker secrets через `_FILE` suffix (уже реализовано в config.go) - `deploy/env.prod` — только заглушки CHANGE_ME **Связанные заметки:** [[deploy-production-readiness]], [[backend-auth-security]] **Источник:** Code review docker-compose.yml #docker #devops #security #best-practice