Архитектура проекта
Схема инфраструктуры и компонентов DevOps Portfolio
Архитектура
- IaC: Terraform управляет VM в Yandex Cloud
- Конфигурация: Ansible устанавливает Docker и деплоит контейнеры
- CI/CD: GitHub Actions билдит образ, пушит и вызывает Ansible
- Реверс-прокси: Nginx
- Мониторинг: Prometheus + Grafana
- Логи: Loki + Promtail
- Бэкапы: restic/rclone (скрипты)
🏗️ Diagram
Браузер] %% GitHub & CI/CD subgraph "🐙 GitHub & CI/CD" GH[GitHub
Исходный код] GHA[GitHub Actions
CI/CD Pipeline] end %% Terraform subgraph "🏗️ Infrastructure" TF[Terraform
IaC] end %% Yandex Cloud subgraph "☁️ Yandex Cloud" VM[VM
Ubuntu 24.04 LTS
2 CPU, 2GB RAM] end %% Ansible subgraph "🔧 Configuration" ANS[Ansible
Playbooks] end %% Docker Containers subgraph "🐳 Docker Containers" N[🌐 Nginx
Port 80/443
Reverse Proxy] A[🚀 Flask App
Port 8000
Portfolio Site] P[📊 Prometheus
Port 9090
Metrics Collection] G[📈 Grafana
Port 3000
Dashboards] L[📝 Loki
Port 3100
Log Aggregation] PT[📋 Promtail
Log Collection] AM[🚨 Alertmanager
Port 9093
Alert Management] NE[🖥️ Node Exporter
Port 9100
System Metrics] CB[🔐 Certbot
SSL Certificates] end %% External Services GHCR[📦 GitHub Container Registry] DATA[💾 Data Storage] %% Main Flow U -->|HTTPS| N N -->|Routes| A GH -->|Push| GHA GHA -->|Build| GHCR GHA -->|Deploy| TF TF -->|Create| VM GHA -->|Configure| ANS ANS -->|Setup| VM GHCR -->|Pull| VM VM -->|Runs| N VM -->|Runs| A VM -->|Runs| P VM -->|Runs| G VM -->|Runs| L VM -->|Runs| PT VM -->|Runs| AM VM -->|Runs| NE VM -->|Runs| CB %% Monitoring & Logging P -->|Scrapes| A P -->|Scrapes| NE G -->|Queries| P G -->|Queries| L PT -->|Logs| L P -->|Alerts| AM AM -->|Notifies| U G -->|Logs| L %% Data Storage A -->|Stores| DATA G -->|Stores| DATA L -->|Stores| DATA %% Styling classDef userClass fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#000 classDef githubClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#000 classDef terraformClass fill:#e8f5e8,stroke:#388e3c,stroke-width:2px,color:#000 classDef cloudClass fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#000 classDef ansibleClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#000 classDef containerClass fill:#f1f8e9,stroke:#689f38,stroke-width:2px,color:#000 classDef serviceClass fill:#e0f2f1,stroke:#00695c,stroke-width:2px,color:#000 class U userClass class GH,GHA githubClass class TF terraformClass class VM cloudClass class ANS ansibleClass class N,A containerClass class P,G,L,PT,AM,NE,CB serviceClass class GHCR,DATA serviceClass
🐙 GitHub & CI/CD
GitHub Repository - Исходный код проекта
GitHub Actions - Автоматический CI/CD пайплайн
GitHub Container Registry - Хранение Docker образов
☁️ Yandex Cloud VM
Ubuntu 24.04 LTS - Операционная система
2 CPU, 2GB RAM - Ресурсы виртуальной машины
Terraform - Создание инфраструктуры как код
🐳 Docker Контейнеры
🌐 Nginx - Reverse proxy, SSL терминация (Port 80/443)
🚀 Flask App - Основное приложение портфолио (Port 8000)
📊 Prometheus - Сбор метрик (Port 9090)
📈 Grafana - Дашборды и визуализация (Port 3000)
📝 Loki - Хранение логов (Port 3100)
📋 Promtail - Сбор логов с контейнеров
🚨 Alertmanager - Управление алертами (Port 9093)
🖥️ Node Exporter - Системные метрики (Port 9100)
🔐 Certbot - Автоматическое обновление SSL сертификатов
🔧 Ansible Playbooks
Configuration Management - Автоматическая настройка VM
Docker Compose - Оркестрация контейнеров
Deployment - Развертывание приложения
💾 Хранение данных
SQLite Database - Данные Grafana (дашборды, настройки)
File System - Логи Loki
Backup System - Автоматические бэкапы
🔄 Как это работает
🚀 Автоматический деплой
1. Push в GitHub → GitHub Actions запускается
2. Сборка образа → Docker образ публикуется в GHCR
3. Создание инфраструктуры → Terraform настраивает Yandex Cloud
4. Настройка VM → Ansible конфигурирует сервер
5. Запуск контейнеров → Docker Compose разворачивает все сервисы
🌐 Пользовательский трафик
Пользователь → Nginx (HTTPS) → Flask App
Маршруты:
/→ Главная/monitoring→ Мониторинг/architecture→ Архитектура/prometheus/→ Prometheus/grafana/→ Grafana/loki/→ Loki/alertmanager/→ Alertmanager
📊 Мониторинг
Prometheus собирает метрики со всех контейнеров и Node Exporter
Grafana показывает красивые дашборды (Port 3000)
Promtail собирает логи и отправляет в Loki
Alertmanager управляет алертами и уведомлениями
Node Exporter предоставляет системные метрики сервера
Certbot автоматически обновляет SSL сертификаты
💾 Хранение и Бэкапы
SQLite - настройки Grafana и дашборды
Файлы - логи Loki
Автобэкапы - ежедневно в 2:00 через cron
Retention Policy - хранение бэкапов 30 дней
Backup Scripts - автоматическое создание и очистка