1 min read

Как я перестал править 50 конфигов вручную и начал использовать Jinja2 в Ansible

Как я перестал править 50 конфигов вручную и начал использовать Jinja2 в Ansible

Я сидел и правил третий конфиг для прода. Потом для стейджинга. Потом заметил, что девелоперский упал — забыл поменять порт.

Это был не первый раз. Каждый новый сервер означал копипасту и замену десятка строк. Через месяц я уже путался, где какая версия.

Как это было

Мы запускали микросервис. Три окружения. На каждом свой IP, порт базы, уровень логирования. Я хранил три копии nginx.conf и правил их руками.

Один раз забыл поправить таймаут для прода. Сервер лёг на час. Клиенты звонили, менеджер бегал.

Где болит

Ручное управление конфигами — это не просто скучно. Это опасно. Ошибка в одной строке может положить продакшн. Ищи потом, где ты забыл заменить хост.

Когда окружений 10+, копипаста убивает время. Каждый новый сервис — 30 минут на адаптацию. И это не считая тестов.

Один шаблон, который подставляет правильные переменные под каждое окружение, — это не удобство. Это вопрос надёжности.

Что я сделал

Взял Jinja2 и Ansible. Написал один шаблон nginx.conf.j2 с переменными: server_name, proxy_pass, log_level.

В Ansible подставил переменные через group_vars. Для каждого окружения — свой файл. Шаблон один. А конфигов — сколько нужно.

Как это работает

  • 📄 Создаёте шаблон: server {{ server_name }}; proxy_pass {{ backend_url }};
  • ⚙️ Описываете переменные в group_vars/prod.yml, group_vars/staging.yml
  • 🔄 Запускаете playbook — Ansible сам собирает конфиг под нужное окружение

Добавил условия: if env == ''prod'' — включаю gzip и кэш. Для девелопера этого не нужно.

Решил проблему с портами за одну итерацию. Больше не скроллю 50 строк в поиске того самого таймаута.

Что изменилось

Время на развёртывание нового сервиса сократилось с 30 минут до 2. Ошибки, связанные с конфигами, ушли. Команда теперь не боится менять параметры — просто правит YAML.

Шаблон стал единственным источником правды. Если нужно поменять формат логов — меняю в одном месте. Все окружения подтягивают обновление при следующем запуске.


📬 Зв'яжіться з нами

Бажаєте впровадити це у своєму бізнесі? Пишіть нам!

Связаться с нами
Telegram
WhatsApp
Email