Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Проект «Продуктовый помощник» - Foodgram

Foodgram - Продуктовый помощник. Сервис позволяет публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список "Избранное", а перед походом в магазин - скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.

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

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

Workflow

  • build_and_push_to_docker_hub - Сборка и доставка докер-образов на Docker Hub
  • deploy - Автоматический деплой проекта на боевой сервер. Выполняется копирование файлов из репозитория на сервер:
  • send_message - Отправка уведомления в Telegram В репозитории на Гитхабе добавьте данные в Settings - Secrets - Actions secrets:
  • DOCKER_USERNAME - имя пользователя в DockerHub
  • DOCKER_PASSWORD - пароль пользователя в DockerHub
  • HOST - адрес сервера
  • 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 (необходимо чтобы были экранированы или отсутствовали скобки)
  • ALLOWED_HOSTS - список разрешенных адресов
  • TELEGRAM_TO - id своего телеграм-аккаунта (можно узнать у @userinfobot, команда /start)
  • TELEGRAM_TOKEN - токен бота (получить токен можно у @BotFather, /token, имя бота)
    При внесении любых изменений в проект, после коммита и пуша
git add .
git commit -m "..."
git push

запускается набор блоков команд jobs (см. файл backend.yml, т.к. команда git push является триггером workflow проекта.

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

git clone https://github.com/needred/foodgram-project-react.git
cd backend

Создайте и активируйте виртуальное окружение, обновите pip:

python3 -m venv venv
. venv/bin/activate
python3 -m pip install --upgrade pip

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

Установите соединение с сервером:

ssh username@server_address

Обновите индекс пакетов APT:

sudo apt update

и обновите установленные в системе пакеты и установите обновления безопасности:

sudo apt upgrade -y

Создайте папку nginx:

mkdir nginx

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

scp docker-compose.yaml <username>@<host>/home/<username>/docker-compose.yaml
sudo mkdir nginx
scp default.conf <username>@<host>/home/<username>/nginx/default.conf

Установите 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

На сервере создайте файл .env

touch .env

и заполните переменные окружения

nano .env

или создайте этот файл локально и скопируйте файл по аналогии с предыдущим шагом:

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

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

На сервере соберите docker-compose:

sudo docker-compose up -d --build

Соберите статические файлы (статику):

docker-compose exec backend python manage.py collectstatic --no-input

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

(опционально) docker-compose exec backend python manage.py makemigrations
docker-compose exec backend python manage.py migrate --noinput

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

docker-compose exec backend python manage.py createsuperuser

При необходимости наполните базу тестовыми данными из backend/data/:

docker-compose exec backend python manage.py load_ingredients

и

docker-compose exec backend python manage.py load_tags

Тестовые пользователи

Логин: admin (суперюзер)
Email: admin@admin.zz
Пароль: 123456

Логин: user1
Email: user1@user.zz
Пароль: user1123456

Логин: user2
Email: user2@user.zz
Пароль: user2123456

Пользовательские роли в проекте

  1. Анонимный пользователь
  2. Аутентифицированный пользователь
  3. Администратор

Анонимные пользователи могут:

  1. Просматривать список рецептов;
  2. Просматривать отдельные рецепты;
  3. Фильтровать рецепты по тегам;
  4. Создавать аккаунт.

Аутентифицированные пользователи могут:

  1. Получать данные о своей учетной записи;
  2. Изменять свой пароль;
  3. Просматривать, публиковать, удалять и редактировать свои рецепты;
  4. Добавлять понравившиеся рецепты в избранное и удалять из избранного;
  5. Добавлять рецепты в список покупок и удалять из списка;
  6. Подписываться и отписываться на авторов;
  7. Скачать список покупок

Набор доступных эндпоинтов:

  • api/docs/redoc - Подробная документация по работе API.
  • api/tags/ - Получение, списка тегов (GET).
  • api/ingredients/ - Получение, списка ингредиентов (GET).
  • api/ingredients/ - Получение ингредиента с соответствующим id (GET).
  • api/tags/{id} - Получение, тега с соответствующим id (GET).
  • api/recipes/ - Получение списка с рецептами и публикация рецептов (GET, POST).
  • api/recipes/{id} - Получение, изменение, удаление рецепта с соответствующим id (GET, PUT, PATCH, DELETE).
  • api/recipes/{id}/shopping_cart/ - Добавление рецепта с соответствующим id в список покупок и удаление из списка (GET, DELETE).
  • api/recipes/download_shopping_cart/ - Скачать файл со списком покупок TXT (в дальнейшем появиться поддержка PDF) (GET).
  • api/recipes/{id}/favorite/ - Добавление рецепта с соответствующим id в список избранного и его удаление (GET, DELETE).

Операции с пользователями:

  • api/users/ - получение информации о пользователе и регистрация новых пользователей. (GET, POST).
  • api/users/{id}/ - Получение информации о пользователе. (GET).
  • api/users/me/ - получение и изменение данных своей учётной записи. Доступна любым авторизованными пользователям (GET).
  • api/users/set_password/ - изменение собственного пароля (PATCH).
  • api/users/{id}/subscribe/ - Подписаться на пользователя с соответствующим id или отписаться от него. (GET, DELETE).
  • api/users/subscribe/subscriptions/ - Просмотр пользователей на которых подписан текущий пользователь. (GET).

Аутентификация и создание новых пользователей 👇:

  • api/auth/token/login/ - Получение токена (POST).
  • api/auth/token/logout/ - Удаление токена (POST).

Алгоритм регистрации пользователей

  1. Пользователь отправляет POST-запрос для регистрации нового пользователя с параметрами email username first_name last_name password на эндпойнт /api/users/
  2. Пользователь отправляет POST-запрос со своими регистрационными данными email password на эндпоинт /api/token/login/ , в ответе на запрос ему приходит auth-token. Примечание: При взаимодействии с фронтэндом приложения операция два происходит под капотом при переходе по эндпоинту /api/token/login/.

Ссылки

Документация API Foodgram:

http://51.250.103.156/api/docs/redoc.html

Развёрнутый проект:

http://51.250.103.156 http://51.250.103.156/admin/

Об авторе

needred

About

Проект «Продуктовый помощник» - Foodgram

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages