Files
mostovik-backend/docs/adr/ADR-015: Configuration Source of Truth and Secret Management.md
Aleksandr Meshchriakov 3d298ce352
Some checks failed
CI/CD Pipeline / Run Tests (pull_request) Successful in 1m53s
CI/CD Pipeline / Telegram Notify Success (push) Has been cancelled
CI/CD Pipeline / Run Tests (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 2m54s
CI/CD Pipeline / Telegram Notify Success (pull_request) Has been skipped
feat: expand platform APIs, sources, and test coverage
2026-03-17 12:56:48 +01:00

2.8 KiB
Raw Blame History

ADR-015: Configuration Source of Truth and Secret Management

Status

Accepted

Context

Система использует множество конфигураций:

  • база данных
  • Redis
  • Celery
  • внешние API (FNS, закупки и т.д.)
  • Django settings

Ошибки конфигурации приводят к:

  • невозможности запуска
  • некорректной работе
  • утечкам секретов

Также важно:

  • разделение dev/prod
  • воспроизводимость окружения
  • безопасность секретов

Decision

Используется environment-based configuration.

Источники конфигурации

  1. .env.dev — локальная разработка
  2. .env.prod — production
  3. .env.prod.example — контракт обязательных переменных
  4. Docker Compose — точка применения конфигурации
  5. settings.* — логика конфигурации

Source of Truth

  • обязательные переменные определяются через .env.*
  • структура и использование переменных — в settings
  • значения по умолчанию должны быть минимальны

Secret policy

  • секреты НЕ хранятся в репозитории
  • .env.* файлы не коммитятся (кроме example)
  • реальные значения задаются через:
    • env-файлы
    • секреты инфраструктуры
    • CI/CD переменные

Fail-fast policy

При старте приложения:

  • проверяется доступность DB
  • проверяется Redis
  • проверяются критические переменные

При ошибке:

  • приложение не стартует

Configuration constraints

  • запрещено хардкодить значения в коде
  • запрещено использовать разные имена переменных для одного и того же
  • запрещено использовать устаревшие пути (например config.settings.*)

Consequences

Positive

  • воспроизводимость окружения
  • безопасность
  • предсказуемость запуска

Negative

  • необходимость поддерживать env-файлы
  • риск рассинхронизации example и реальных env

Alternatives considered

1. Конфигурация через код

Отклонено — небезопасно и негибко.

2. Хранение секретов в репозитории

Отклонено — нарушает требования безопасности.