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