Сервис позволяет регистрироваться, создавать и публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список "Избранное", а перед походом в магазин - скачивать список продуктов, нужных для приготовления рецептов.
Клонируем репозиторий и переходим в директорию infra:
git clone https://github.com/Certelen/foodgram-project-react.git
cd ./foodgram-project-react/infra/
Требуется изменить ALLOWED_HOSTS в ./backend/frontend/frontend/settings.py и server_name в ./infra/nginx/default.conf
- Перейдите на боевой сервер:
ssh username@server_address
- Обновите индекс пакетов APT:
sudo apt update
и обновите установленные в системе пакеты и установите обновления безопасности:
sudo apt upgrade -y
Создайте папку nginx
и docs
:
mkdir nginx
mkdir docs
Скопируйте файлы docker-compose.yaml, nginx/default.conf, ../docs/redoc.html, ../docs/openapi-schema.yml из вашего проекта на сервер в home/<ваш_username>/docker-compose.yaml, home/<ваш_username>/nginx/default.conf, home/<ваш_username>/docs/redoc.html, home/<ваш_username>/docs/openapi-schema.yml соответственно:
scp docker-compose.yaml <username>@<host>/home/<username>/docker-compose.yaml
scp default.conf <username>@<host>/home/<username>/nginx/default.conf
scp redoc.html <username>@<host>/home/<username>/docs/redoc.html
scp openapi-schema.yml <username>@<host>/home/<username>/docs/openapi-schema.yml
Установите 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=xxxyyyzzz
DB_HOST=db
DB_PORT=5432
- tests - Проверка проекта на соответствие стандартам PEP8.
- build - Сборка и доставка докер-образов на Docker Hub
- deploy - Автоматический деплой проекта на боевой сервер. Выполняется копирование файлов из репозитория на сервер.
- send_message - Отправка уведомления в Telegram
В репозитории на Github.com добавьте данные в Settings - Secrets - Actions secrets
:
DOCKER_USERNAME
- имя пользователя в DockerHub (Только строчные буквы)DOCKER_PASSWORD
- пароль пользователя в DockerHubHOST
- адрес боевого сервераUSER
- пользовательSSH_KEY
- приватный ssh-ключ с компьютера, имеющего доступ к боевому серверуPASSPHRASE
- кодовая фраза для ssh-ключа (Если было указано при создании ssh-ключа)DB_ENGINE
- django.db.backends.postgresqlDB_NAME
- postgres (по умолчанию)POSTGRES_USER
- postgres (по умолчанию)POSTGRES_PASSWORD
- xxxyyyzzz (по умолчанию)DB_HOST
- dbDB_PORT
- 5432SECRET_KEY
- секретный ключ приложения django (необходимо чтобы были экранированы или отсутствовали скобки)TELEGRAM_TO
- id своего телеграм-аккаунта (можно узнать у @userinfobot, команда /start)TELEGRAM_TOKEN
- токен бота (получить токен можно у @BotFather, /token, имя бота) При внесении изменений в проект:
git add .
git commit -m "..."
git push
запускается набор блоков команд (см. файл foodgram_workflow.yml, т.к. команда git push
является триггером workflow проекта.
Разворачиваем контейнеры в фоновом режиме из папки infra:
sudo docker compose up -d
При первом запуске выполняем миграции:
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 createsuperuser
Загружаем данные ингредиентов в базу данных:
sudo docker compose exec backend python manage.py loaddata dump.json
- Анонимный пользователь
- Аутентифицированный пользователь
- Администратор
- Просматривать список рецептов;
- Просматривать отдельные рецепты;
- Просматривать страницы пользователей;
- Фильтровать рецепты по тегам;
- Создавать аккаунт.
- Входить в систему под своим логином и паролем;
- Выходить из системы (разлогиниваться);
- Получать данные о своей учетной записи;
- Изменять свой пароль;
- Просматривать, публиковать, удалять и редактировать свои рецепты;
- Добавлять понравившиеся рецепты в избранное и удалять из избранного;
- Добавлять рецепты в список покупок и удалять из списка;
- Подписываться и отписываться на авторов;
- Скачивать список покупок.
api/docs/redoc.html
- Подробная документация по работе API.api/tags/
- Получение, списка тегов (GET).api/ingredients/
- Получение, списка ингредиентов (GET).api/ingredients/<id>
- Получение ингредиента с соответствующим 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. Примечание: При взаимодействии с фронтэндом приложения данная операция происходит автоматически при авторизации.
http://158.160.12.180/api/docs/redoc.html
http://158.160.12.180 http://foodgramyp19.ddns.net
http://foodgramyp19.ddns.net/admin/ http://158.160.12.180/admin/