-
Название проекта: «AugmentationApp»
-
Команда:
- Гоголев Денис,
- Дробот Максим,
- Ивакин Александр,
- Мехоношин Константин
-
Цель работы: создание приложения для аугментации изображений.
Аугментация данных – методика создания дополнительных данных из уже имеющихся. Используется при решении задач компьютерного зрения, для повышения разнообразия данных и устранения дисбаланса между классами в обучающем наборе данных.
Идея приложения: пользователь загружает свои изображения в веб-сервис и настраивает параметры аугментации. На переданные данные применяются алгоритмы аугментации: поворот, добавление шума, изменение яркости и контраста. После чего пользователь получает обработанные алгоритмом изображения в zip архиве.
Для реализации проекта нужно выполнить определенные задачи. Каждая задача требует определенных знаний технологий и была поручена соответствующему исполнителю в группе.
| № | Задача | Стек | Исполнитель |
|---|---|---|---|
| 1 | Создание Pipeline | git | Все |
| 2 | Разработка и развертывание БД | PostgreSQL | Ивакин Александр |
| 3 | Развертывание Docker | Docker | Гоголев Денис |
| 4 | Разработка FrontEnd | Vue | Все |
| 5 | Разработка BackEnd | FastApi, Python | Все |
| 6 | Разработка сервиса аугментации | Python | Дробот Максим |
| 7 | Сборка и визуализация метрик | Grafana, Prometheus | Мехоношин Константин |
| 8 | Запуск на сервере | Nginx | Гоголев Денис |
Использована технология ветвления GitFlow:
Источник: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
Список веток:
- main - ветка для релизов
- developer - отходит от main, ветка для разработки
- feature - отходит от developer, ветка для разработки отдельных функций
- release - отходит от developer и мерджится в main, ветка для доработки текущей версии проекта до релиза
- fix - отходит от** main**, ветка для исправления багов в релизе
Именование коммитов (префиксы):
- feature - разработка отдельных функций
- fix - исправление багов
- update - доработка отдельных функций
- docs - изменение документации
gitignore - использовался для исключения из коммитов установленных зависимостей и конфиденциальных данных
Этапы pipeline:
- build - сборка docker контейнеров
- test - тестирование приложения (unit-тесты)
- deploy - запуск контейнеров на сервере
Использованные теги:
- stage/stages - указание этапов
- variables - переменные
- script - выполняемые команды
- tags - указание этапов для job
- rules (if, when) - правила запуска
Переменные окружения в GitLab:
- Docker_HUB_PASSWORD - пароль от Dockerhub аккаунта для доставки контейнеров на сервер
- DB_CONNECTION - строка подключения к базе данных
Написание dockerfile для сборки контейнеров сервера и клиента.
Использованные теги в dockerfile:
- FROM - указание базового образа
- LABEL - описание контейнера
- RUN - запуск команд внутри контейнера
- WORKDIR - указание рабочей директории внутри контейнера
- COPY - копирование файлов в контейнер
- ARG - указание параметров для передачи в команду build
- ENV - указание переменных окружения
- EXPOSE - указание, какой порт прослушивается внутри контейнера
- ENTRYPOINT - указание базовой команды
- CMD - указание команды
- AS - применяется для multi-stage building
Написание docker-compose для запуска приложения на сервере.
Использованные теги в docker-compose:
- version - указание версии docker-compose
- services - список контейнеров
- image - указание образа для запуска контейнера
- ports - указание проброса портов внутрь контейнера
- command - выполняемая при запуске контейнера команда
- depends_on - ожидание запуска другого контейнера
- environment - переменные окружения
- volumes - монтирование разделов внутрь контейнера
Для оптимизации и безопасности использовались:
- multi-stage building - позволяет скомпилировать приложение в одном контейнере, а результат поместить в другом
- dockerignore - блокирует копирование ненужных и конфиденциальных файлов внутрь контейнера
- Настройка своего сервера на основе Debian
- Установка своего shell runner
- Настройка проксирования запросов на Nginx
- Настройка развертывания отдельного тестового стенда
- Настройка мониторинга через Prometheus и Grafana