Skip to content

Repository files navigation

DevOps Portfolio

Проект сайта-визитки для демонстрации DevOps навыков. Включает полный стек технологий: Kubernetes, CI/CD, мониторинг, GitOps и многое другое.

🎯 Цели проекта

Проект создан как аналог сайта-визитки tosinonikute.com, развёрнутый в облаке с демонстрацией DevOps навыков. Итоговый результат: рабочий сайт-визитка + открытый проект на GitHub, по которому можно оценить уровень DevOps компетенций.

Стек технологий, демонстрируемых в проекте

Легенда: ✅ — реализовано | ⚠️ — частично реализовано/альтернатива | ❌ — не реализовано

Технологии, используемые в проекте:

  • Backend/Frontend: Python FastAPI, React + Vite
  • Контейнеризация: Docker, Docker Compose
  • Оркестрация: Kubernetes (локально через minikube), Helm charts
  • IaC: Terraform с Yandex Cloud провайдером
  • CI/CD: GitHub Actions (автоматическая сборка образов, деплой в YCR и Object Storage)
  • Облачная платформа: Yandex Cloud (Serverless Containers, Container Registry, Object Storage, API Gateway, IAM, Monitoring, Logging)
  • Управление затратами: FinOps практики (документировано)

Критически важные (Must Have):

  • Kubernetes - k8s (Pod, Deployment, Service) — реализовано в k8s/ и helm/ для локального развёртывания
  • CI/CD пайплайны (GitHub Actions) — полностью автоматизированный пайплайн в .github/workflows/ci.yml
  • Образы, контейнеры - Dockerfile, Docker Compose — реализовано для backend и frontend
  • Terraform (Infrastructure as Code) — полная инфраструктура в terraform/serverless/ и terraform/cloudK8/
  • ⚠️ Мониторинг и метрики (Prometheus, Grafana) — используется Yandex Monitoring (встроенный сервис Yandex Cloud)
  • GitOps (ArgoCD, Flux) — в планах для Kubernetes развёртывания (см. roadmap.md)
  • Helm (управление приложениями в k8s) — реализовано в helm/ с полным Chart
  • Code style, принципы чистого кода (SOLID, DRY, KISS) — применено в структуре проекта

Очень важные (Should Have):

  • ⚠️ Централизованное логирование (ELK Stack, Loki, Fluentd) — используется Yandex Logging (встроенный сервис Yandex Cloud)
  • ⚠️ DevSecOps ("Сдвиг влево", Управление секретами, сканирование образов, SAST) — частично: управление секретами через GitHub Secrets; сканирование образов и SAST в планах
  • Стратегии деплоя (Blue-Green, Canary, Rolling Update) — не реализовано (используется простой деплой)
  • ⚠️ Multi-environment подход (dev, staging, production) — реализовано только dev окружение (переменная environment в Terraform)
  • Управление сертификатами (cert-manager, Let's Encrypt) — не используется (Yandex Cloud предоставляет сертификаты автоматически)
  • OWASP Top 10 (безопасность приложений) — не реализовано
  • Автоматизация тестирования в CI/CD (unit, integration, e2e тесты) — не реализовано
  • minikube (для локального тестирования развёртывания) — использовано для разработки и тестирования k8s манифестов

Важные (Nice to Have):

  • Ansible (конфигурационное управление) — не используется
  • Облачные сервисы (Yandex Cloud) — реализовано: Yandex Serverless Containers, Yandex Container Registry, Yandex Object Storage, Yandex API Gateway, Yandex IAM
  • Контейнерные реестры (Yandex Container Registry) — используется для хранения Docker образов
  • Базы данных и их управление (PostgreSQL, MongoDB, Redis) с backup стратегиями — не используется (статическое приложение)
  • Disaster Recovery и backup стратегии — не реализовано
  • Трейсинг (Jaeger или Zipkin) — не реализовано
  • Service Mesh (Istio, Linkerd) — не реализовано
  • API Gateway (Yandex API Gateway) — используется для backend (альтернатива Kong/Ambassador/Traefik)

Дополнительные компетенции (Advanced):

  • Platform Engineering и Internal Developer Platforms (IDP) — не реализовано
  • FinOps (управление затратами на облачную инфраструктуру) — документировано в FinOps.md с анализом стоимости различных вариантов развёртывания
  • Serverless и Container-as-a-Service (Yandex Serverless Containers) — реализовано как основной вариант развёртывания

🚀 Технологии

  • Backend: Python FastAPI
  • Frontend: React + Vite
  • Архитектура: Микросервисная (разделение фронтенда и бэкенда)

📋 Структура проекта

DevOpsPortfolio/
├── src/              # Исходный код приложения
│   ├── backend/      # FastAPI приложение
│   │   ├── app/
│   │   │   ├── main.py   # Главный файл приложения
│   │   │   ├── models.py # Pydantic модели
│   │   │   └── routers/  # API роутеры
│   │   ├── requirements.txt
│   │   └── run.py        # Скрипт запуска
│   └── frontend/     # React приложение
│       ├── src/
│       │   ├── components/  # React компоненты
│       │   ├── App.jsx
│       │   └── main.jsx
│       ├── package.json
│       └── vite.config.js
├── terraform/        # Infrastructure as Code
│   ├── serverless/   # Serverless развёртывание (Yandex Cloud)
│   ├── local/        # Локальное развёртывание
│   └── cloudK8/      # Kubernetes в облаке
├── k8s/              # Kubernetes манифесты
│   └── README.md     # Подробная документация по Kubernetes
├── helm/             # Helm chart
│   └── README.md     # Подробная документация по Helm
├── CI/               # CI/CD скрипты и документация
│   ├── build_backend.sh
│   ├── build_frontend.sh
│   └── README.md
├── .github/workflows/ # GitHub Actions workflows
└── README.md         # Этот файл

📚 Структура документации

  • README.md (этот файл) — общая информация и быстрый старт
  • k8s/README.md — подробная документация по развертыванию через Kubernetes манифесты
  • helm/README.md — подробная документация по использованию Helm chart
  • terraform/serverless/README.md — деплой backend + статического фронтенда (Object Storage + API Gateway)
  • Monitoring/README.md — настройка мониторинга в Yandex Cloud (метрики, дашборды, алерты)
  • Logging/README.md — логирование в Yandex Cloud (автоматический сбор, поиск, экспорт)
  • FinOps.md — анализ вариантов инфраструктуры и стоимости владения

🛠️ Установка и запуск

Предварительные требования

Для разработки и локального запуска:

  • Python 3.9+
  • Node.js 18+
  • npm или yarn
  • Docker и Docker Compose (для контейнеризации)

Для развёртывания в облаке:

  • Terraform >= 1.0 (рекомендуется последняя стабильная версия)
  • Yandex Cloud CLI (yc) для работы с Yandex Cloud
  • Yandex Cloud провайдер для Terraform >= 0.89 (версия фиксируется в .terraform.lock.hcl)

Примечание: Версии провайдеров Terraform фиксируются в файлах .terraform.lock.hcl для обеспечения воспроизводимости развёртывания. При первом запуске terraform init будут установлены версии, указанные в lock-файлах.

Backend (FastAPI)

  1. Перейдите в директорию backend:
cd src/backend
  1. Создайте виртуальное окружение:
python -m venv venv
source venv/bin/activate  # Linux/Mac
# или
venv\Scripts\activate  # Windows
  1. Установите зависимости:
pip install -r requirements.txt
  1. Запустите сервер:
python run.py

Backend будет доступен по адресу: http://localhost:8000 API документация (Swagger): http://localhost:8000/docs

Frontend (React)

  1. Перейдите в директорию frontend:
cd src/frontend
  1. Установите зависимости:
npm install
  1. Запустите dev сервер:
npm run dev

Frontend будет доступен по адресу: http://localhost:3000

📡 API Endpoints

  • GET / - Корневой эндпоинт
  • GET /health - Health check
  • GET /api/about - Информация о себе
  • GET /api/skills - Список навыков
  • GET /api/projects - Список проектов
  • GET /api/contacts - Контактная информация

🐳 Контейнеризация приложения

Предварительные требования

  • Docker установлен и запущен
  • Пользователь добавлен в группу docker (или используйте sudo)

Сборка Docker образов

Предварительная загрузка базовых образов

Перед сборкой рекомендуется предварительно загрузить базовые образы:

# Загружаем базовые образы
docker pull node:20-alpine
docker pull python:3.13-slim
docker pull nginx:alpine

Если загрузка образов из Docker Hub не работает:

Если у вас проблемы с загрузкой образов из основного репозитория Docker Hub (например, из-за блокировок), можно использовать удаленный сервер:

  1. На удаленном сервере (где загрузка работает):
# Загружаем образы
docker pull node:20-alpine
docker pull python:3.13-slim
docker pull nginx:alpine

# Сохраняем образы в tar-файлы
docker save node:20-alpine -o node-20-alpine.tar
docker save python:3.13-slim -o python-3.13-slim.tar
docker save nginx:alpine -o nginx-alpine.tar
  1. Копируем файлы на локальную машину (через scp, rsync или другой способ):
scp user@remote-server:/path/to/*.tar /home/user/
  1. На локальной машине загружаем образы:
docker load -i node-20-alpine.tar
docker load -i python-3.13-slim.tar
docker load -i nginx-alpine.tar

# Проверяем загруженные образы
docker images

Сборка образов приложения

После загрузки базовых образов можно собирать образы приложения:

Backend:

cd backend
docker build -t devops-portfolio-backend:latest .

Frontend:

cd src/frontend
docker build -t devops-portfolio-frontend:latest .

Проверка собранных образов:

docker images | grep devops-portfolio

Ожидаемый результат:

devops-portfolio-frontend   latest    ~53MB
devops-portfolio-backend    latest    ~173MB

Тестирование образов

Запуск backend:

docker run -d -p 8000:8000 --name backend-test devops-portfolio-backend:latest

Проверка работы:

curl http://localhost:8000/health
curl http://localhost:8000/api/about

Остановка и удаление тестового контейнера:

docker stop backend-test
docker rm backend-test

Запуск через Docker Compose

Для удобного запуска всего приложения используйте Docker Compose:

Запуск всех сервисов:

cd /home/user/yandex/DevOpsPortfolio
docker-compose up -d

Просмотр логов:

# Все сервисы
docker-compose logs -f

# Только backend
docker-compose logs -f backend

# Только frontend
docker-compose logs -f frontend

Проверка статуса:

docker-compose ps

Остановка сервисов:

docker-compose down

Пересборка образов:

docker-compose build
docker-compose up -d

Доступ к приложению:

Особенности конфигурации:

  • Frontend ждет готовности backend (health check)
  • Сервисы общаются через внутреннюю сеть portfolio-network
  • Backend доступен для frontend по универсальному имени backend:8000 (работает во всех случаях развертывания)
  • Автоматический перезапуск контейнеров при сбоях (restart: unless-stopped)

☸️ Локальное развертывание в Kubernetes (minikube)

Для развертывания приложения в локальном Kubernetes кластере используйте манифесты из каталога k8s/.

Быстрый старт:

# Установка minikube и kubectl (Arch Linux)
sudo pacman -S kubectl minikube

# Запуск minikube
minikube start --driver=docker

# Развертывание приложения
kubectl apply -f k8s/

Подробные инструкции: см. k8s/README.md

📦 Управление развертыванием через Helm

Helm — менеджер пакетов для Kubernetes, упрощающий развертывание и управление приложениями.

Быстрый старт:

# Установка Helm chart
cd devops-portfolio
helm install devops-portfolio .

Подробные инструкции: см. devops-portfolio/README.md

🎯 Roadmap

См. roadmap.md для полного списка задач проекта.

📝 Лицензия

MIT License - см. LICENSE

👤 Автор

UZver24 - GitHub

About

Проект странички-портфолио для демонстрации навыков

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages