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
2.8 KiB
2.8 KiB
ADR-015: Configuration Source of Truth and Secret Management
Status
Accepted
Context
Система использует множество конфигураций:
- база данных
- Redis
- Celery
- внешние API (FNS, закупки и т.д.)
- Django settings
Ошибки конфигурации приводят к:
- невозможности запуска
- некорректной работе
- утечкам секретов
Также важно:
- разделение dev/prod
- воспроизводимость окружения
- безопасность секретов
Decision
Используется environment-based configuration.
Источники конфигурации
.env.dev— локальная разработка.env.prod— production.env.prod.example— контракт обязательных переменных- Docker Compose — точка применения конфигурации
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. Хранение секретов в репозитории
Отклонено — нарушает требования безопасности.