Skip to content

Cервис Foodgram, "Продуктовый помощник".Реализован на DRF.Имеется API, CI/CD проекта.

License

Notifications You must be signed in to change notification settings

VladimirMonolith/foodgram

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cервис Foodgram, "Продуктовый помощник"

Python Django Django REST Framework PostgreSQL Nginx gunicorn docker GitHub%20Actions Yandex.Cloud

Описание

Онлайн-сервис Foodgram и API для него.Имеется реализация CI/CD проекта.На этом сервисе пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список "Избранное", а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.

Доступный функционал

  • Аутентификация реализована с помощью стандартного модуля DRF - Authtoken.
  • У неаутентифицированных пользователей доступ к API только на уровне чтения.
  • Создание объектов разрешено только аутентифицированным пользователям.На прочий фунционал наложено ограничение в виде административных ролей и авторства.
  • Управление пользователями.
  • Возможность получения подробной информации о себе и ее редактирование.
  • Возможность подписаться на других пользователей и отписаться от них.
  • Получение списка всех тегов и ингредиентов.
  • Получение списка всех рецептов, их добавление.Получение, обновление и удаление конкретного рецепта.
  • Возможность добавить рецепт в избранное.
  • Возможность добавить рецепт в список покупок.
  • Возможность скачать список покупок в PDF формате.
  • Фильтрация по полям.

Документация к API доступна по адресу http://localhost/api/docs/ после локального запуска проекта

Технологи

  • Python 3.7
  • Django 3.2.15
  • Django Rest Framework 3.12.4
  • Authtoken
  • Docker
  • Docker-compose
  • PostgreSQL
  • Gunicorn
  • Nginx
  • GitHub Actions
  • Выделенный сервер Linux Ubuntu 22.04 с публичным IP

Локальный запуск проекта

  • Склонировать репозиторий:
   git clone <название репозитория>
   cd <название репозитория> 

Cоздать и активировать виртуальное окружение:

Команда для установки виртуального окружения на Mac или Linux:

   python3 -m venv env
   source env/bin/activate

Команда для Windows:

   python -m venv venv
   source venv/Scripts/activate
  • Перейти в директорию infra:
   cd infra
  • Создать файл .env по образцу:
   cp .env.example .env
  • Выполнить команду для доступа к документации:
   docker-compose up 

Установить зависимости из файла requirements.txt:

   cd ..
   cd backend
   pip install -r requirements.txt
   python manage.py migrate

Заполнить базу тестовыми данными об ингредиентах:

   python manage.py load_ingredients_data

Создать суперпользователя, если необходимо:

python manage.py createsuperuser
  • Запустить локальный сервер:
   python manage.py runserver

Установка на удалённом сервере

  • Выполнить вход на удаленный сервер
  • Установить docker:
   sudo apt install docker.io
  • Установить docker-compose:
    sudo apt install docker-compose     

или воспользоваться официальной инструкцией

  • Находясь локально в директории infra/, скопировать файлы docker-compose.yml и nginx.conf на удаленный сервер:
scp docker-compose.yml <username>@<host>:/home/<username>/
scp nginx.conf <username>@<host>:/home/<username>/
  • Для правильной работы workflow необходимо добавить в Secrets данного репозитория на GitHub переменные окружения:
Переменные PostgreSQL, ключ проекта Django и их значения по-умолчанию можно взять из файла .env.example, затем установить свои.

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

USER=<username для подключения к удаленному серверу>
HOST=<ip сервера>
PASSPHRASE=<пароль для сервера, если он установлен>
SSH_KEY=<ваш приватный SSH-ключ (для получения команда: cat ~/.ssh/id_rsa)>

TELEGRAM_TO=<id вашего Телеграм-аккаунта>
TELEGRAM_TOKEN=<токен вашего бота>

Workflow проекта

  • запускается при выполнении команды git push
  • tests: проверка кода на соответствие PEP8.
  • build_and_push_to_docker_hub: сборка и размещение образа проекта на DockerHub.
  • deploy: автоматический деплой на боевой сервер и запуск проекта.
  • send_massage: отправка уведомления пользователю в Телеграм.

После успешного результата работы workflow зайдите на боевой сервер

  • Примените миграции:
   sudo docker-compose exec backend python manage.py migrate
  • Подгружаем статику:
   sudo docker-compose exec backend python manage.py collectstatic --no-input
  • Заполните базу тестовыми данными об ингредиентах:
   sudo docker-compose exec backend python manage.py load_ingredients_data
  • Создайте суперпользователя:
   sudo docker-compose exec backend python manage.py createsuperuser

Примеры некоторых запросов API

Регистрация пользователя:

   POST /api/v1/users/

Получение данных своей учетной записи:

   GET /api/v1/users/me/ 

Добавление подписки:

   POST /api/v1/users/id/subscribe/

Обновление рецепта:

   PATCH /api/v1/recipes/id/

Удаление рецепта из избранного:

   DELETE /api/v1/recipes/id/favorite/

Получение списка ингредиентов:

   GET /api/v1/ingredients/

Скачать список покупок:

   GET /api/v1/recipes/download_shopping_cart/

Проект доступен по адресу: http://foodgram-diplom.myddns.me/

Доступ в админку:

   email - ad@min.com
   пароль - sh7811vu

Пользователь:

   email - dima@dima.com
   пароль - am2471383

Полный список запросов API находятся в документации

Автор

Гут Владимир - https://github.com/VladimirMonolith

About

Cервис Foodgram, "Продуктовый помощник".Реализован на DRF.Имеется API, CI/CD проекта.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages