Архитектура проекта
Схема инфраструктуры и компонентов DevOps Portfolio
🏗️ 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] A[🚀 Flask App
Port 8000] P[📊 Prometheus
Port 9090] G[📈 Grafana
Port 3001] L[📝 Loki
Port 3100] PT[📋 Promtail] 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 %% Monitoring & Logging P -->|Scrapes| A G -->|Queries| P PT -->|Logs| L 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 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 3001)
📝 Loki - Хранение логов (Port 3100)
📋 Promtail - Сбор логов с контейнеров
🔧 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/
→ Метрики/grafana/
→ Дашборды/loki/
→ Логи
📊 Мониторинг
Prometheus собирает метрики со всех контейнеров
Grafana показывает красивые дашборды
Promtail собирает логи и отправляет в Loki
Grafana может показывать и метрики, и логи
💾 Хранение
SQLite - настройки Grafana и дашборды
Файлы - логи Loki
Автобэкапы - ежедневно в 2:00