Конфигурация и секреты: env-файлы, Ansible-фабрика, окружения dev/staging/prod
↑ 7.6 DevOps для бэкенд-разработчика · ← Предыдущая · → Следующая
Зачем это на собесе
Как управлять конфигурацией нескольких окружений без копипаста и утечек секретов.
Примечание
Описан общий подход «шаблоны + инвентарь окружений».
Объяснение
Принцип 12-factor: конфигурация в окружении, код один.
| Слой | Что | Где |
|---|---|---|
| Код и образ | одинаковы везде | registry |
| Несекретная конфигурация | адреса, флаги, лимиты | шаблоны env-файлов, ConfigMap |
| Секреты | пароли, ключи | Vault/секреты CI/зашифрованные vars (ansible-vault, SOPS) |
| Различия окружений | значения переменных | инвентарь dev/staging/prod |
Ansible как «фабрика конфигурации»: из шаблонов Jinja2 и инвентаря окружения генерируются .env и docker-compose-файлы для каждого сервера.
# inventories/prod/group_vars/all.yml
orders_db_host: pg-prod.internal
orders_replicas: 4
# inventories/prod/group_vars/vault.yml (ansible-vault encrypt)
orders_db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256...
# templates/orders.env.j2
ConnectionStrings__Default=Host={{ orders_db_host }};Database=orders;Password={{ orders_db_password }}
Replicas={{ orders_replicas }}
# деплой
ansible-playbook -i inventories/prod deploy.yml --tags ordersПравила:
- Значения по умолчанию в
dev, явные значения вprod. - Единый список ключей конфигурации; валидация при старте (
ValidateOnStart, см. Options pattern: IOptions, IOptionsSnapshot, IOptionsMonitor, валидация). - Проверка отсутствующих значений в CI (шаблон рендерится для каждого окружения).
- Секреты отдельно от остальной конфигурации, с ограничением доступа и ротацией (см. Секреты и конфигурация: user-secrets, Vault, переменные окружения).
Нюансы и подводные камни
- Расхождение окружений («на stage работает») — ведите различия минимальными и явными.
- Один общий
.envна все окружения приводит к использованию prod-данных в dev. - Незашифрованные vault-файлы в git — утечка.
- Изменение конфигурации требует перезапуска (или конфигурации с reload).
Практика
- Сгенерируйте env-файлы двух окружений из одного шаблона и инвентаря.
- Зашифруйте секреты ansible-vault/SOPS.
- Добавьте проверку в CI: рендер шаблонов и валидация обязательных ключей.
Вопросы с ответами
Как управлять конфигурацией для нескольких окружений?
Один образ, шаблоны конфигурации и инвентарь значений по окружениям, секреты — отдельно и зашифрованно.
Что такое 12-factor config?
Конфигурация хранится в окружении и отделена от кода.