Проект: Сайт для портфолио с Kubernetes и DevOps-практиками: Путь обучения и развития навыков
Цель данного проекта — создать веб-сайт для личного портфолио, который позволил бы не только продемонстрировать мои проекты, но и освоить ключевые практики разработки и DevOps. В этой статье я расскажу о процессе разработки, о том, что удалось реализовать на данный момент, а также о том, какие задачи еще предстоит выполнить.
Идея проекта и выбор технологий
Главной целью было создание функционального сайта для отображения моих проектов, статей и информации о себе. В процессе работы я решил применить DevOps-практики и освоить инструменты для автоматизации, мониторинга и оркестрации.
Я выбрал стек технологий, который включал:
- Backend: Python с использованием Flask.
- Frontend: HTML, CSS и JavaScript (с использованием фреймворков Bootstrap и React).
- База данных: PostgreSQL для хранения данных о проектах.
- Контейнеризация: Docker для упаковки приложений.
- Оркестрация: Kubernetes для управления контейнерами.
- CI/CD: Jenkins для автоматизации процессов сборки и деплоя.
- Мониторинг и логирование: Prometheus, Grafana и ELK Stack.
Этот стек позволит мне не только создать сайт, но и изучить практики DevOps, включая контейнеризацию, автоматизацию деплоя и мониторинг.
Шаги разработки и освоение новых навыков
1. Разработка бэкенда
На старте я сосредоточился на создании бэкенда сайта с использованием Python и Flask. Это позволило мне углубить знания по разработке API, взаимодействию с базой данных через ORM (SQLAlchemy) и работе с POST и GET запросами.
Первоначально был разработан основной функционал:
- Создание моделей данных для хранения информации о проектах.
- Написание API для выполнения операций CRUD с проектами.
- Реализация авторизации и регистрации пользователей, а также разделение прав доступа для администраторов и обычных пользователей(это было не в самом начале)
Кроме того, я написал тесты для проверок корректности работы API, что позволило не только убедиться в правильности работы кода, но и улучшить навыки тестирования.
2. Контейнеризация и Docker
Когда бэкенд был готов, я решил запаковать его в Docker-контейнер. Это было единственное, что получилось с первого раза. Я создал Dockerfile для бэкенда и использовал Docker Compose для связывания бэкенда, базы данных и графического интерфейса для работы с базой данных(а связать уже не с первого)
На этом этапе я:
- Освоил основы Docker: создание контейнеров для различных частей приложения.
- Разработал Docker Compose файл, который объединяет несколько контейнеров (бэкенд, база данных и интерфейс).
- Связал контейнеры между собой, что является важным элементом при работе с микросервисами.
3. Разработка функционала и тестирование
В процессе разработки я добавлял дополнительные блоки:
- Блоки обработки ошибок для удобного отображения ошибок пользователям.
- Реализация форм для добавления проектов и управления ими.
- Тут как раз и добавил регистрацию пользователей
Это был важный этап. И он получился. Хотя я уверен технически код можно сделать лучше, но пока это за пределами моего понимания
4. Создание базовой структуры проекта
Я построил основу для дальнейшего развития сайта:
- Спроектировал и настроил структуру проекта для разделения логики приложения, что облегчает его масштабирование в будущем(не я, а ChatGPT).
- Внес все необходимые зависимости в проект, установив все библиотеки и фреймворки(проблема несовместимости с версиями это трэш).
Это позволило мне организовать расширяемую архитектуру приложения.
Что уже сделано
На данный момент я завершил несколько ключевых этапов:
- Создан сервер для сайта, который отвечает за обработку запросов и работу с базой данных.
- Разработана базовая структура проекта, включая все необходимые файлы и папки.
- Внесены зависимости и настроены библиотеки, необходимые для работы с Flask и PostgreSQL.
- Написан код для бэкенда: разработаны модели данных, API для CRUD-операций с проектами и реализована авторизация пользователей.
- Внесены блоки для обработки ошибок и регистрации пользователей, а также разделение прав доступа для администраторов и обычных пользователей.
- Написаны тесты для проверки работы POST и GET запросов.
- Запакован бэкенд в Docker и создан файл Docker Compose для контейнеризации приложения, базы данных и интерфейса для работы с базой данных.
Что предстоит:
- Написание и контейнеризация фронтенда: необходимо запаковать фронтенд в Docker и настройка его взаимодействие с бэкендом.
- Оркестрация с Kubernetes: настройка Kubernetes для развертывания приложения, создание манифестов для каждого компонента (бэкенд, фронтенд, база данных).
- Настройка CI/CD с Jenkins: интеграция с GitHub, создание пайплайнов для автоматической сборки, тестирования и деплоя в Kubernetes.
- Мониторинг и логирование: настройка Prometheus и Grafana для мониторинга метрик приложения и сбор логов с помощью ELK Stack.
- Оптимизация безопасности: настройка SSL, внедрение политики безопасности и настройка фаерволов.
- Развертывание и тестирование в продакшн-среде: окончательное развертывание в Kubernetes и тестирование всей инфраструктуры.
Заключение
Этот проект стал отличной возможностью не только создать веб-сайт для портфолио, но и значительно улучшить свои знания и навыки в области разработки и DevOps. Однако впереди еще много работы по настройке инфраструктуры и автоматизации процессов, что даст мне возможность углубиться во всё инженерное