Foodgram - Продуктовый помощник. Сервис позволяет публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список "Избранное", а перед походом в магазин - скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.
- build_and_push_to_docker_hub - Сборка и доставка докер-образов на Docker Hub
- deploy - Автоматический деплой проекта на боевой сервер. Выполняется копирование файлов из репозитория на сервер:
- send_message - Отправка уведомления в Telegram
В репозитории на Гитхабе добавьте данные в
Settings - Secrets - Actions secrets:
DOCKER_USERNAME- имя пользователя в DockerHubDOCKER_PASSWORD- пароль пользователя в DockerHubHOST- адрес сервераUSER- пользовательSSH_KEY- приватный ssh ключPASSPHRASE- кодовая фраза для ssh-ключаDB_ENGINE- django.db.backends.postgresqlDB_NAME- postgres (по умолчанию)POSTGRES_USER- postgres (по умолчанию)POSTGRES_PASSWORD- postgres (по умолчанию)DB_HOST- dbDB_PORT- 5432SECRET_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
- Анонимный пользователь
- Аутентифицированный пользователь
- Администратор
- Просматривать список рецептов;
- Просматривать отдельные рецепты;
- Фильтровать рецепты по тегам;
- Создавать аккаунт.
- Получать данные о своей учетной записи;
- Изменять свой пароль;
- Просматривать, публиковать, удалять и редактировать свои рецепты;
- Добавлять понравившиеся рецепты в избранное и удалять из избранного;
- Добавлять рецепты в список покупок и удалять из списка;
- Подписываться и отписываться на авторов;
- Скачать список покупок
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).
- Пользователь отправляет POST-запрос для регистрации нового пользователя с параметрами
email username first_name last_name password
на эндпойнт
/api/users/ - Пользователь отправляет POST-запрос со своими регистрационными данными email password на эндпоинт
/api/token/login/, в ответе на запрос ему приходит auth-token. Примечание: При взаимодействии с фронтэндом приложения операция два происходит под капотом при переходе по эндпоинту/api/token/login/.
http://51.250.103.156/api/docs/redoc.html