Skip to content

umar1593/yamdb_final

Repository files navigation

CI/CD для проекта api_yamdb

Описание проекта

Проект создан в рамках учебного курса Яндекс.Практикум.

Проект YaMDb собирает отзывы пользователей на произведения. Произведению может быть присвоен жанр из списка предустановленных. Новые жанры может создавать только администратор. Пользователи оставляют к произведениям текстовые отзывы и ставят произведению оценку в диапазоне от одного до десяти. На основании оценок рассчитывается общий рейтинг произведения.

Реализован REST API CRUD для моделей проекта, для аутентификации примненяется JWT-токен. В проекте реализованы пермишены, фильтрации, сортировки и поиск по запросам клиентов, реализована пагинация ответов от API, установлено ограничение количества запросов к API. Проект разворачивается в трех Docker контейнерах: web-приложение, postgresql-база данных и nginx-сервер.

Проект развернут на боевом сервере Yandex.Cloud. Реализовано CI и CD проекта. При пуше изменений в главную ветку проект автоматические тестируется на соотвествие требованиям PEP8 и проверяется внутренними автотестами. После успешного прохождения тестов, на git-платформе собирается образ web-контейнера Docker и автоматически размешается в облачном хранилище DockerHub. Размещенный образ автоматически разворачивается на боевом сервере вмете с контейнером веб-сервера nginx и базой данных PostgreSQL.

Технологический стек

yamdb_final Python Django Django REST Framework PostgreSQL JWT Nginx gunicorn Docker Docker-compose Docker Hub GitHub%20Actions Yandex.Cloud Practicum.Yandex

Workflow

  • tests - Проверка кода на соответствие стандарту PEP8 (с помощью пакета flake8) и запуск pytest. Дальнейшие шаги выполнятся только если push был в ветку master или main.
  • build_and_push_to_docker_hub - Сборка и доставка докер-образов на Docker Hub
  • deploy - Автоматический деплой проекта на боевой сервер. Выполняется копирование файлов из репозитория на сервер:
  • send_message - Отправка уведомления в Telegram

Подготовка для запуска workflow

Установка проекта из репозитория (Windows)


  • Клонировать репозиторий и перейти в него в командной строке:
- 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

Установка и запуск приложения в контейнерах (контейнер web загружаются из DockerHub):

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/

About

yamdb_final

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages