🔐 Кейс 2: Построение DevSecOps-платформы и IaC для EdTech-продукта
Роль: DevOps / Platform Engineer
Длительность: ~176 часов (полный цикл: от миграции репозиториев до Production Ready)
Стек: Terraform, Ansible, GitLab CI, Kaniko, Managed PostgreSQL, S3, Phase (Secrets Management), Bash.
🎯 Проблема и Контекст (Baseline)
Продуктовый проект в сфере онлайн-образования работал на VPS с ручным деплоем через low-code PaaS (Dokploy). Ключевые боли:
- Отсутствие отказоустойчивости (SPOF), ручная сборка на проде.
- Открытые технические порты (Traefik Dashboard, Swagger).
- Невозможность масштабирования: развертывание нового окружения занимало 2-3 дня ручной работы.
🛠 Инженерные решения (Action)
1. Infrastructure as Code (Terraform)
- Разработана модульная архитектура: код разделен на независимые слои (IAM, Network, Compute, Data).
- Внедрено разграничение прав доступа к S3 (Bucket Policies) для изоляции данных между сервисами.
- Автоматизировано создание VPC, Security Groups и Managed PostgreSQL кластеров.
2. Dynamic Inventory и автоматизация конфигурации (Ansible)
- Проблема: Как передать данные из Terraform (IP, endpoints) в Ansible без ручного копирования?
- Решение: Реализована схема
Terraform outputs → GitLab Group Variables + Phase Secrets → Ansible Inventory. - Написаны sync-скрипты (
update-gitlab-vars.sh,generate-inventory.sh), которые автоматически обновляют inventory после каждогоterraform apply. - Построен Production-Ready Ansible CI/CD Pipeline: запуск пайплайна одной кнопкой → идентичная конфигурация на DEV и PROD.
3. DevSecOps и миграция данных
- Полный отказ от Dokploy в пользу GitLab CI с Kaniko (вместо DinD): low-code PaaS оставляла ручную сборку на проде и не давала воспроизводимости — заменена полностью декларативным пайплайном.
- Разработан универсальный скрипт миграции БД (
db_migrate_v3.sh) с поддержкой PostgreSQL и автоматической верификацией целостности по таблицам. - Миграция DEV и PROD баз данных выполнена с верификацией ~250 000+ строк.
📊 Результаты и Метрики
| Метрика | Результат |
|---|---|
| Время развертывания окружения | С 2-3 дней ручной работы до 10-15 минут (одна кнопка в GitLab UI). |
| ROI автоматизации | Окупаемость на 2-м проекте: экономия ~65 часов на каждое развертывание. |
| Надежность | Конфигурация идемпотентна и воспроизводима: DEV и PROD настраиваются из одного пайплайна, человеческий фактор в настройке серверов исключен. |
| Безопасность | SSH только через Bastion, секреты в Phase/GitLab Variables (masked), S3 bucket policies. |
🏗 Архитектура синхронизации IaC
graph TD
subgraph Terraform [Terraform - IaC]
TF[terraform apply] --> Outputs[outputs: IPs, DB endpoints]
end
subgraph Sync [Sync Layer]
Outputs -->|update-gitlab-vars.sh| GitLabVars[GitLab Group Variables]
Outputs -->|Phase CLI| Phase[Phase Secrets Manager]
end
subgraph Ansible [Ansible CI/CD]
GitLabVars -->|env injection| Generate[generate-inventory.sh]
Generate --> Inventory[inventory.yml]
Inventory --> Playbook[ansible-playbook]
Playbook --> Servers[DEV / PROD Servers]
end