Онлайн-сервис 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=<токен вашего бота>
- запускается при выполнении команды git push
- tests: проверка кода на соответствие PEP8.
- build_and_push_to_docker_hub: сборка и размещение образа проекта на DockerHub.
- deploy: автоматический деплой на боевой сервер и запуск проекта.
- send_massage: отправка уведомления пользователю в Телеграм.
- Примените миграции:
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
Регистрация пользователя:
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 - [email protected]
пароль - sh7811vu
Пользователь:
email - [email protected]
пароль - am2471383
Гут Владимир - https://github.com/VladimirMonolith