/yamdb_final

yamdb_final

Primary LanguagePython

Django-app workflow

Описание

Проект YaMDb собирает отзывы (Review) пользователей на произведения (Titles). Произведения делятся на категории: «Книги», «Фильмы», «Музыка». Список категорий (Category) может быть расширен администратором (например, можно добавить категорию «Изобразительное искусство» или «Ювелирка»).

Сами произведения в YaMDb не хранятся, здесь нельзя посмотреть фильм или послушать музыку.

Произведению может быть присвоен жанр (Genre) из списка предустановленных (например, «Сказка», «Рок» или «Артхаус»). Новые жанры может создавать только администратор.

Благодарные или возмущённые пользователи оставляют к произведениям текстовые отзывы (Review) и ставят произведению оценку в диапазоне от одного до десяти (целое число); из пользовательских оценок формируется усреднённая оценка произведения — рейтинг (целое число). На одно произведение пользователь может оставить только один отзыв.

Стек:

bash Python 3.7, Django 2.2.19, DRF, Simple-JWT, PostgreSQL 13.0, Docker, Docker Hub, nginx, gunicorn 20.0.4, GitHub Actions, Yandex.Cloud.

Шаблон создания файла .env расположенный по пути infra/.env

DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
SECRET_KEY=key

Запуск проекта:

Клонируем репозиторий и переходим в него:

git clone https://github.com/PivnoyFei/yamdb_final
cd yamdb_final

Создаем и активируем виртуальное окружение для linux:

python3 -m venv venv
source venv/bin/activate

для Windows

python -m venv venv
source venv/Scripts/activate

Обновиляем pip:

python -m pip install --upgrade pip

Ставим зависимости из requirements.txt:

pip install -r api_yamdb/requirements.txt

Запускаем автотесты:

pytest

Отредактируйте файл nginx/default.conf и в строке server_name впишите IP виртуальной машины (сервера). Скопируйте файлы docker-compose.yaml и nginx/default.conf из вашего проекта на сервер:

Переходим в папку с файлом docker-compose.yaml:

cd infra

Запуск docker-compose:

docker-compose up -d --build

Примените миграции:

docker-compose exec web python manage.py makemigrations
docker-compose exec web python manage.py migrate --noinput

Команда для заполнения базы начальными данными (необязательно):

docker-compose exec web python manage.py loaddata fixtures.json

Создайте суперпользователя Django:

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 dumpdata > dumpPostrgeSQL.json

Останавливаем контейнеры:

docker-compose down -v

После успешного деплоя:

Зайдите в репозиторий в котором расположены файлы на локальной машине и отправьте файлы на сервер.

scp docker-compose.yaml <username>@<host>:<Нужная папка>/docker-compose.yaml
sudo mkdir nginx
scp default.conf <username>@<host>:<Нужная папка>/nginx/default.conf

В репозитории на Гитхабе добавьте данные в Settings - Secrets - Actions secrets:

DOCKER_USERNAME - имя пользователя в DockerHub
DOCKER_PASSWORD - пароль пользователя в DockerHub

HOST - публичный ip-адрес сервера
USER - пользователь
SSH_KEY - приватный ssh-ключ (публичный должен быть на сервере)
PASSPHRASE - если используете пароль для ssh

DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
SECRET_KEY - секретный ключ приложения django

TELEGRAM_TO - id своего телеграм-аккаунта (можно узнать у @userinfobot, команда /start)
TELEGRAM_TOKEN - токен бота (получить токен можно у @BotFather, /token, имя бота)

Как запустить проект на сервере:

Установите Docker и Docker-compose:

sudo apt install docker.io
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Проверьте корректность установки Docker-compose:

sudo  docker-compose --version

Разработчики проекта

Смелов Илья

  • тимлид, разработка ресурсов Auth и Users
  • Докеризация, GitHub Actions.
  • Автоматический деплой на боевой сервер YandexCloud.

Юрий Кузнецов

  • разработка ресурсов Categories, Genres и Titles

Наумчук Владимир

  • разработка ресурсов Review и Comments