Проект создан в рамках учебного курса Яндекс.Практикум.
Проект YaMDb собирает отзывы пользователей на произведения. Произведению может быть присвоен жанр из списка предустановленных. Новые жанры может создавать только администратор. Пользователи оставляют к произведениям текстовые отзывы и ставят произведению оценку в диапазоне от одного до десяти. На основании оценок рассчитывается общий рейтинг произведения.
Реализован REST API CRUD для моделей проекта, для аутентификации примненяется JWT-токен. В проекте реализованы пермишены, фильтрации, сортировки и поиск по запросам клиентов, реализована пагинация ответов от API, установлено ограничение количества запросов к API. Проект разворачивается в трех Docker контейнерах: web-приложение, postgresql-база данных и nginx-сервер.
Проект развернут на боевом сервере Yandex.Cloud. Реализовано CI и CD проекта. При пуше изменений в главную ветку проект автоматические тестируется на соотвествие требованиям PEP8 и проверяется внутренними автотестами. После успешного прохождения тестов, на git-платформе собирается образ web-контейнера Docker и автоматически размешается в облачном хранилище DockerHub. Размещенный образ автоматически разворачивается на боевом сервере вмете с контейнером веб-сервера nginx и базой данных PostgreSQL.
- tests - Проверка кода на соответствие стандарту PEP8 (с помощью пакета flake8) и запуск pytest. Дальнейшие шаги выполнятся только если push был в ветку master или main.
- build_and_push_to_docker_hub - Сборка и доставка докер-образов на Docker Hub
- deploy - Автоматический деплой проекта на боевой сервер. Выполняется копирование файлов из репозитория на сервер:
- send_message - Отправка уведомления в Telegram
- Клонировать репозиторий и перейти в него в командной строке:
- https://github.com/umar1593/yamdb_final.git
- cd yamdb_final
- Cоздать и открыть файл
.env
с переменными окружения:
- cd infra
- touch .env
- Создать и активировать виртуальное окружение:
- python -m venv venv
- . venv/Scripts/activate
- cd api_yamdb
- pip install -r requirements.txt
После отредактируйте файл nginx/default.conf
и в строке server_name
напишите IP сервера.
Скопируйте подготовленные файлы docker-compose.yaml
и nginx/default.conf
из вашего проекта на сервер в /home/usermane/
Зайдите в репозиторий на локальной машине и отправьте файлы на сервер.
scp ./infra/docker-compose.yaml <username>@<host>:/home/<username>/docker-compose.yaml
sudo mkdir nginx
scp default.conf <username>@<host>:/home/<username>/nginx/default.conf
В репозитории на Гитхабе добавьте данные в Settings - Secrets - Actions secrets
:
DOCKER_USERNAME - имя пользователя в DockerHub
DOCKER_PASSWORD - пароль пользователя в DockerHub
HOST - ip-адрес сервера
USER - пользователь
SSH_KEY - приватный ssh-ключ (публичный должен быть на сервере)
DB_ENGINE - django.db.backends.postgresql
DB_HOST - db
DB_PORT - 5432
SECRET_KEY - секретный ключ приложения django
TELEGRAM_TO - id своего телеграм-аккаунта
TELEGRAM_TOKEN - токен бота (получить токен можно у @BotFather, /token, имя бота)
DB_NAME - postgres (по умолчанию)
POSTGRES_USER - postgres (по умолчанию)
POSTGRES_PASSWORD - postgres (по умолчанию)
Установите Docker и Docker-compose:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo apt install docker-compose
Проверьте корректность установки Docker-compose:
sudo docker-compose --version
docker-compose up -d
Запуск миграций, создание суперюзера, сбор статики и заполнение БД:
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py createsuperuser
docker-compose exec web python manage.py collectstatic --no-input
docker-compose exec web python manage.py loaddata fixtures.json
http://51.250.6.106/redoc/
http://51.250.6.106/admin/
http://51.250.6.106/api/v1/