Хакатон Яндекс.Практикум + Росбанк: Разработка дашборда аналитики компетенций групп и сотрудников Росбанка.
Даты проведения хакатона: 4 сентября - 23 октября 2024 года.
Организаторы: АНО ДПО «Образовательные технологии Яндекса» и ПАО РОСБАНК
Подробная информация о хакатоне
- Никита Мальцев, PM команды,
- Борис Руденко, аналитик данных,
- Дмитрий Стреленко, системный аналитик,
- Басанг Амулаков, бизнес-аналитик,
- Анна Юдина, дизайнер,
- Мария Кузьмина, дизайнер,
- Максим Романенко, frontend-разработчик,
- Адель Гарифуллин, python-разработчик,
- Сергей Виноградов, python-разработчик.
Ссылка на файл Хакатон Росбанк API.yaml
Подробнее можно ознакомится в документации Redoc https://rosbankdashboard.ddns.net/dashboards/teams/schema/redoc/
Подробнее можно ознакомится в документации Swagger https://rosbankdashboard.ddns.net/dashboards/teams/schema/swagger/
Перейти в директорию с файлом docker-compose.yml, выполнить запуск и миграции:
docker compose up
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py collectstatic
docker compose exec backend cp -r /app/static/. /backend_static/static/
Для проверки запуска контейнеров выполнить команду:
sudo docker ps
Продакш-версия проекта позволяет:
- Автоматизировать запуск и обновление приложения;
- Сделать запуск приложения воспроизводимым на любых серверах, независимо от настроек.
Для этого необходимо:
-
Собрать образы
rosbank_frontend
,rosbank_backend
иrosbank_gateway
и залить их на Docker Hub:cd frontend docker build -t username/rosbank_frontend . cd ../backend docker build -t username/rosbank_backend . cd ../infra docker build -t username/rosbank_gateway .
docker push username/rosbank_frontend docker push username/rosbank_backend docker push username/rosbank_gateway
-
Создать в корневой директории проекта файл конфигурации docker-compose.production.yml, который будет использовать собранные образы на Docker Hub и управлять запуском контейнеров на продакш-сервере. Отличие нового файла конфигурации от docker-compose.yml состоит в замене
build
наimage
с указанием ссылки на образ (postgres:13.10
дляdb
,username/rosbank_frontend
дляfrontend
,username/rosbank_backend
дляbackend
иusername/rosbank_gateway
дляgateway
). -
Развернуть и запустить Docker на сервере. Поочередно выполнить на сервере следующие команды:
sudo apt update sudo apt install curl curl -fSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh sudo apt install docker-compose-plugin
-
Загрузить на сервер новый файл конфигурации для Docker Compose и запустить контейнеры. Поместить в директорию проекта на сервере файл конфигурации docker-compose.production.yml, а также файл .env. Выполнить команду на сервере в папке проекта:
sudo docker compose -f docker-compose.production.yml up -d
Выполнить миграции, собрать статические файлы бэкенда и скопировать их в
/backend_static/static/
:sudo docker compose -f docker-compose.production.yml exec backend python manage.py makemigrations sudo docker compose -f docker-compose.production.yml exec backend python manage.py migrate sudo docker compose -f docker-compose.production.yml exec backend python manage.py collectstatic sudo docker compose -f docker-compose.production.yml exec backend cp -r /app/static/. /backend_static/static/ sudo docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser
-
Настроить «внешний» Nginx, что вне контейнера — для работы с приложением в контейнерах. Открыть файл default конфигурации Nginx:
sudo nano /etc/nginx/sites-enabled/default
Изменить настройки
location
в секцииserver
(три блокаlocation
заменить на один):location / { proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8000; }
Сделать проверку и перезагрузку файла конфигурации:
sudo nginx -t sudo service nginx reload
-
Подготовить свой удаленный сервер к публикации проекта. Очистить диск сервера от лишних данных (кеш npm, APT, старые системные логи):
npm cache clean --force sudo apt clean sudo journalctl --vacuum-time=1d
Полезно будет выполнить команду
sudo docker system prune -af
: она уберёт все лишние объекты, которые вы могли создать в докере за время выполнения заданий спринта, — неиспользуемые контейнеры, образы и сети. -
Для автоматизации запуска и обновления проекта на продакш-сервере создать в директории
.github/workflows
файл main.yml с описанием workflow. Сделать коммит проекта и разместить его в удаленный репозиторий:git add . git commit -m 'Add Actions' git push
Для управления процессами CI/CD (Continuous Integration/Continuous Delivery) открыть раздел Actions в репозитории проекта в своем аккаунте.
-
Для работы с проектом создать .env-файл по следующему образцу:
ALLOWED_HOSTS = * xxx.xxx.xxx.xxx 127.0.0.1 localhost DB_HOST = db DB_PORT = 5432 DEBUG = False POSTGRES_USER = django_user POSTGRES_PASSWORD = mysecretpassword POSTGRES_DB = django SECRET_KEY = ..... (см. файл **settings.py**)
Python, Django REST Framework, Nginx, DNS, HTTPS, Docker, PostgreSQL, GitHub Actions