Проект сайта-визитки для демонстрации 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 практики (документировано)
- ✅ 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) — применено в структуре проекта
⚠️ Централизованное логирование (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 манифестов
- ❌ 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)
- ❌ 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:
cd src/backend- Создайте виртуальное окружение:
python -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows- Установите зависимости:
pip install -r requirements.txt- Запустите сервер:
python run.pyBackend будет доступен по адресу: http://localhost:8000 API документация (Swagger): http://localhost:8000/docs
- Перейдите в директорию frontend:
cd src/frontend- Установите зависимости:
npm install- Запустите dev сервер:
npm run devFrontend будет доступен по адресу: http://localhost:3000
GET /- Корневой эндпоинтGET /health- Health checkGET /api/about- Информация о себеGET /api/skills- Список навыковGET /api/projects- Список проектовGET /api/contacts- Контактная информация
- Docker установлен и запущен
- Пользователь добавлен в группу
docker(или используйтеsudo)
Перед сборкой рекомендуется предварительно загрузить базовые образы:
# Загружаем базовые образы
docker pull node:20-alpine
docker pull python:3.13-slim
docker pull nginx:alpineЕсли загрузка образов из Docker Hub не работает:
Если у вас проблемы с загрузкой образов из основного репозитория Docker Hub (например, из-за блокировок), можно использовать удаленный сервер:
- На удаленном сервере (где загрузка работает):
# Загружаем образы
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- Копируем файлы на локальную машину (через scp, rsync или другой способ):
scp user@remote-server:/path/to/*.tar /home/user/- На локальной машине загружаем образы:
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:
Запуск всех сервисов:
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: http://localhost
- Backend API: http://localhost:8000
- API документация: http://localhost:8000/docs
Особенности конфигурации:
- Frontend ждет готовности backend (health check)
- Сервисы общаются через внутреннюю сеть
portfolio-network - Backend доступен для frontend по универсальному имени
backend:8000(работает во всех случаях развертывания) - Автоматический перезапуск контейнеров при сбоях (
restart: unless-stopped)
Для развертывания приложения в локальном Kubernetes кластере используйте манифесты из каталога k8s/.
Быстрый старт:
# Установка minikube и kubectl (Arch Linux)
sudo pacman -S kubectl minikube
# Запуск minikube
minikube start --driver=docker
# Развертывание приложения
kubectl apply -f k8s/Подробные инструкции: см. k8s/README.md
Helm — менеджер пакетов для Kubernetes, упрощающий развертывание и управление приложениями.
Быстрый старт:
# Установка Helm chart
cd devops-portfolio
helm install devops-portfolio .Подробные инструкции: см. devops-portfolio/README.md
См. roadmap.md для полного списка задач проекта.
MIT License - см. LICENSE
UZver24 - GitHub