Архитектура проекта

Схема инфраструктуры и компонентов DevOps Portfolio

Архитектура

  • IaC: Terraform управляет VM в Yandex Cloud
  • Конфигурация: Ansible устанавливает Docker и деплоит контейнеры
  • CI/CD: GitHub Actions билдит образ, пушит и вызывает Ansible
  • Реверс-прокси: Nginx
  • Мониторинг: Prometheus + Grafana
  • Логи: Loki + Promtail
  • Бэкапы: restic/rclone (скрипты)

🏗️ Diagram

graph LR %% User U[👤 Пользователь
Браузер] %% 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 образов

🚀 Автоматический деплой при push в main

☁️ Yandex Cloud VM

Ubuntu 24.04 LTS - Операционная система

2 CPU, 2GB RAM - Ресурсы виртуальной машины

Terraform - Создание инфраструктуры как код

🔒 Открыты порты: 22 (SSH), 80 (HTTP), 443 (HTTPS)

🐳 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 - Автоматические бэкапы

💾 Все данные сохраняются на VM

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

🚀 Автоматический деплой

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 - автоматическое создание и очистка

Безопасность

🔒 Firewall: Открыты только порты 22, 80, 443
🔐 HTTPS: Let's Encrypt сертификаты
🐳 Изоляция: Docker контейнеры в отдельной сети
🔑 Доступ: SSH ключи для административного доступа
🚨 Мониторинг: Alertmanager для уведомлений о проблемах
📊 Наблюдение: Node Exporter для системных метрик