Учебный проект по DevOps, разработке и работе с базой данных PostgreSQL.
Данный репозиторий содержит исходный код проекта, конфигурационные файлы, документацию и структуру базы данных.
Проект разрабатывается в рамках учебной работы и предназначен для демонстрации практических навыков:
- работы с Git и GitHub;
- организации структуры проекта;
- работы с PostgreSQL;
- управления конфигурацией приложения;
- документирования API;
- создания и хранения схемы базы данных;
- базовых DevOps-практик.
Основные технологии проекта:
- Git — система контроля версий
- GitHub — хранение и совместная работа с репозиторием
- PostgreSQL 17 — система управления базами данных
- Python — язык программирования проекта
.env— хранение локальных переменных окружения
API проекта предоставляет интерфейс для взаимодействия клиентского приложения с серверной частью и базой данных PostgreSQL.
API используется для получения, создания, изменения и удаления данных приложения. Обмен данными между клиентом и сервером осуществляется в формате JSON по протоколу HTTP.
API поддерживает стандартные CRUD-операции:
- GET — получение данных;
- POST — создание новых записей;
- PUT / PATCH — изменение существующих записей;
- DELETE — удаление записей.
Запросы к API отправляются по HTTP.
Пример:
GET /api/objects- Задача
Описать требование и ожидаемый результат. Определить критерии приемки. Оценить влияние на API, интерфейс и схему PostgreSQL.
- Изменение кода
Создать отдельную Git-ветку для изменения. Внести минимальные необходимые изменения. Если меняется схема БД, добавить миграцию Alembic. Не хранить пароли и секреты в Git
- Локальные проверки
Перед коммитом выполнить: Проверку стиля кода Ruff. Статический анализ безопасности Bandit. Unit- и интеграционные тесты pytest. Проверку покрытия тестами — не менее 40%. Проверку миграций и работоспособности приложения.
Изменение не принимается, если обязательные проверки не пройдены.
- Git
Создать ветку для задачи. Сохранить изменения в коммите. Отправить ветку в удаленный репозиторий. Не включать в Git .env, виртуальное окружение и резервные копии.
- CI
GitHub Actions автоматически устанавливает закрепленные зависимости и выполняет линтер, анализ безопасности и тесты. При ошибке проверки сборка считается неуспешной.
- Образ приложения
После успешного CI собрать Docker-образ с версией, привязанной к коммиту. Не публиковать образ из неуспешной сборки.
- CD
Развернуть проверенный образ в целевом окружении. Перед миграцией базы данных создать резервную копию. Секреты и настройки окружения передавать отдельно от образа.
- Проверка релиза
После развертывания проверить:
запуск приложения; подключение к PostgreSQL; доступность главной страницы; регистрацию и вход; основные операции с экспедициями и уловом; корректность миграций.
При критической ошибке остановить выпуск и выполнить откат по заранее подготовленному плану.
- Наблюдение
Проверять журналы приложения и ошибки PostgreSQL. Контролировать доступность API. Проверять успешность резервного копирования. Фиксировать инциденты и при необходимости возвращаться к предыдущему образу. Единая команда проверок
Перед каждым коммитом и изменением функциональности выполнять make verify. Все обязательные проверки должны завершиться успешно.
uni-devops/
│
├── docs/
│
├── informal documentation/
│
├── lab1/
│ ├── beetles_app/
│ ├── .env.example
│ ├── .gitignore
│ ├── static/
│ │ ├── app.js
│ │ └── style.css
│ ├── templates/
│ │ ├── auth.html
│ │ └── index.html
│ └── README.md
│
├── lab2/
│ ├── main.py
│ ├── database.py
│ ├── requirements.txt
│ ├── .gitignore
│ ├── static/
│ │ ├── app.js
│ │ └── style.css
│ ├── templates/
│ │ ├── auth.html
│ │ └── index.html
│ └── README.md
│
└── README.md
Изменения выполняются в отдельных ветках. Прямое внесение изменений в main не используется.
Для новой задачи необходимо создать ветку:
git switch main
git pull origin main
git switch -c feature/название-задачи