Infrastructure as Code (Ansible)
Репозиторий управления конфигурациями и развёртыванием сервисов. Конфигурация отделена от логики деплоя. Восстановление сервера с нуля — менее 10 минут.
Бизнес-задача
Унификация окружений для 10+ микросервисных проектов:
- Проблема: Ручная настройка серверов приводит к рассинхрону между prod и stage
- Решение: Воспроизводимая инфраструктура из декларативных конфигов
- Результат: Развёртывание нового проекта — минуты вместо часов
Шаблонизация Docker Compose
Вместо копипасты docker-compose.yml для каждого проекта — роль-генератор:
- Вход: Переменные проекта (YAML) + секреты (Ansible Vault)
- Процесс: Ansible генерирует конфигурации и запускает через community.docker
- Выход: Стандартизированные контейнеры с единым подходом к логированию, сети, рестартам
По аналогии с Helm для K8s, но для небольших проектов где K8s избыточен.
Безопасность
- Секреты: Ansible Vault. Попадают на сервер только в момент деплоя в .env файлы с правами 600
- Firewall: iptables со стратегией Default Deny. Открыты только SSH и порты балансировщика
- SSH: Отключён root-login и вход по паролю. Только ключи
- Логи: Чувствительные переменные не попадают в вывод Ansible (no_log)
Автоматизация
- Бэкапы: PostgreSQL и ClickHouse в S3 по расписанию
- CI/CD: Автоматическое развёртывание self-hosted GitHub Actions Runners
- Мониторинг: Node Exporter + Prometheus
Стек
Core
Ansible Core 2.18
Python 3.11
Jinja2 Templates
Collections
community.docker
community.general
ansible.posix
Cloud
Yandex Cloud (S3)
Docker Engine
Target OS
Debian 12
Ubuntu 22.04/24.04
Моя роль
- Архитектура репозитория, снизившая время развёртывания нового проекта с часов до минут
- Шаблонизация Docker Compose для стандартизации микросервисов
- Настройка безопасности серверов (iptables, SSH) и автоматические бэкапы в S3