Конфигурация и секреты: env-файлы, Ansible-фабрика, окружения dev/staging/prod

↑ 7.6 DevOps для бэкенд-разработчика · ← Предыдущая · → Следующая

По желанию~3 мин чтенияУровень: senior

Зачем это на собесе

Как управлять конфигурацией нескольких окружений без копипаста и утечек секретов.

Примечание

Описан общий подход «шаблоны + инвентарь окружений».

Объяснение

Принцип 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

Правила:

Нюансы и подводные камни

  • Расхождение окружений («на stage работает») — ведите различия минимальными и явными.
  • Один общий .env на все окружения приводит к использованию prod-данных в dev.
  • Незашифрованные vault-файлы в git — утечка.
  • Изменение конфигурации требует перезапуска (или конфигурации с reload).

Практика

  1. Сгенерируйте env-файлы двух окружений из одного шаблона и инвентаря.
  2. Зашифруйте секреты ansible-vault/SOPS.
  3. Добавьте проверку в CI: рендер шаблонов и валидация обязательных ключей.

Вопросы с ответами

Связанные темы