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

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

🏗️ 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] 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 образов

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

☁️ Yandex Cloud VM

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

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

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

🔒 Security Groups для портов 22,80,443,9090,3001,3100

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

💾 Все данные сохраняются на 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/ → Метрики
  • /grafana/ → Дашборды
  • /loki/ → Логи

📊 Мониторинг

Prometheus собирает метрики со всех контейнеров

Grafana показывает красивые дашборды

Promtail собирает логи и отправляет в Loki

Grafana может показывать и метрики, и логи

💾 Хранение

SQLite - настройки Grafana и дашборды

Файлы - логи Loki

Автобэкапы - ежедневно в 2:00

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

🔒 Firewall: Yandex Cloud Security Groups (порты 22,80,443,9090,3001,3100)
🔐 HTTPS: Let's Encrypt SSL сертификаты
🐳 Изоляция: Docker контейнеры в отдельной сети
🔑 SSH: Доступ только по ключам