API развернут по адресу http://178.154.234.242/api/v1/
версия c Docker, Continuous Integration на GitHub Actions
Выполнено в рамках реализации группового проекта студентов факультета бэкенд-разработки Яндекс.Практикум по курсу "Работа с внешними API"
Проект YaMDb собирает отзывы пользователей на произведения. Произведения делятся на категории: «Книги», «Фильмы», «Музыка». Список категорий (Category) может быть расширен (например, можно добавить категорию «Изобразительное искусство» или «Ювелирка» через интерфейс Django администратора).
позволяет работать со следующими сущностями:
Пользователи (Получить список всех пользователей, создание пользователя, получить пользователя по username, изменить данные пользователя по username, удалить пользователя по username, получить данные своей учетной записи, изменить данные своей учетной записи)
Произведения, к которым пишут отзывы (Получить список всех объектов, создать произведение для отзывов, информация об объекте, обновить информацию об объекте, удалить произведение)
Категории (типы) произведений (Получить список всех категорий, создать категорию, удалить категорию)
Жанры (Получить список всех жанров, создать жанр, удалить жанр)
Отзывы (Получить список всех отзывов, создать новый отзыв, получить отзыв по id, частично обновить отзыв по id, удалить отзыв по id)
Коментарии к отзывам (Получить список всех комментариев к отзыву по id, создать новый комментарий для отзыва, получить комментарий для отзыва по id, частично обновить комментарий к отзыву по id, удалить комментарий к отзыву по id)
JWT-токен (Отправление confirmation_code на переданный email, получение JWT-токена в обмен на email и confirmation_code)
- Пользователь отправляет запрос с параметром email на /auth/email/.
- YaMDB отправляет письмо с кодом подтверждения (confirmation_code) на адрес email .
- Пользователь отправляет запрос с параметрами email и confirmation_code на /auth/token/, в ответе на запрос ему приходит token (JWT-токен).
- При желании пользователь отправляет PATCH-запрос на /users/me/ и заполняет поля в своём профайле (описание полей — в документации). Полная документация API (redoc.yaml)
Эти инструкции помогут вам создать копию проекта и запустить ее на локальном компьютере для целей разработки и тестирования.
Установите Docker, используя инструкции с официального сайта:
- для Windows и MacOS
- для Linux. Отдельно потребуется установть Docker Compose
- Создайте на своем компютере папку проекта YamDb
mkdir yamdb
и перейдите в нееcd yamdb
- Склонируйте этот репозиторий в текущую папку
git clone https://github.com/BolshakovAndrey/yamdb_final/ .
- Создайте файл
.env
командойtouch .env
и добавьте в него переменные окружения для работы с базой данных:
DB_NAME=postgres # имя базы данных
POSTGRES_USER=postgres # логин для подключения к базе данных
POSTGRES_PASSWORD=postgres # пароль для подключения к БД (установите свой)
DB_HOST=db # название сервиса (контейнера)
DB_PORT=5432 # порт для подключения к БД
- Запустите docker-compose командой
sudo docker-compose up -d
- Накатите миграции
sudo docker-compose exec yamdb python manage.py migrate
- Соберите статику командой
sudo docker-compose exec yamdb python manage.py collectstatic --no-input
- Создайте суперпользователя Django
sudo docker-compose exec yamdb python manage.py createsuperuser --username admin --email 'admin@yamdb.com'
- Загрузите данные в базу данных при необходимости
sudo docker-compose exec yamdb python manage.py loaddata data/fixtures.json
Для запуска проекта на удаленном сервере необходимо:
- скопировать на сервер файлы
docker-compose.yaml
,.env
и папкуnginx
командами:
scp docker-compose.yaml <user>@<server-ip>:
scp .env <user>@<server-ip>:
scp -r nginx/ <user>@<server-ip>:
- создать переменные окружения в разделе
secrets
настроек текущего репозитория:
DOCKER_PASSWORD # Пароль от Docker Hub
DOCKER_USERNAME # Логин от Docker Hub
HOST # Публичный ip адрес сервера
USER # Пользователь зарегистрированный на сервере
PASSPHRASE # Если ssh-ключ защищен фразой-паролем
SSH_KEY # Приватный ssh-ключ
TELEGRAM_TO # ID телеграм-аккаунта
TELEGRAM_TOKEN # Токен бота
- Проверка кода на соответствие стандарту PEP8 (с помощью пакета flake8) и запуск pytest из репозитория yamdb_final
- Сборка и доставка докер-образов на Docker Hub.
- Автоматический деплой.
- Отправка уведомления в Telegram.
Участники:
- Категории (Categories), жанры (Genres) и произведения (Titles): модели, view и эндпойнты для них и рейтинги.
- Докеризация, разработка процесса CI (непрерывной интеграции) с использованием GitHub Actions.
- Подготовка к production и deploy на YandexCloud.
Гаврилов Павел. Управление пользователями (Auth и Users): система регистрации и аутентификации, права доступа, работа с токеном, система подтверждения e-mail, поля.
Дробышев Артем. Отзывы (Review) и комментарии (Comments): модели и view, эндпойнты, права доступа для запросов. Рейтинги произведений.