# 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. Хранение секретов в репозитории Отклонено — нарушает требования безопасности.