atomic-docker-compose-env-vars.md 1.7 KB

Переменные окружения в docker-compose: безопасность и гибкость

Контекст: docker-compose.yml содержал хардкоженные пароли (photoplaces_dev) и JWT-секреты. Это безопасно только для локальной разработки, но легко приводит к утечкам через Git.

Суть: Все чувствительные значения выносятся в переменные с дефолтами для dev:

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