Онлайн-сервис и API для продуктового помощника. На этом сервисе пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.
Сервис размещен по адресу: https://recipeshare.hopto.org/. Полная документация к API находится в файле docs/openapi-schema.yml и доступна по эндпоинту /api/docs/
.
- Python 3.11
- Django
- Django REST Framework
- PostgreSQL
- Node.js
- React
- Gunicorn
- Nginx
- Docker
- GitHub Actions
- Pytest
- Клонировать репозиторий:
git clone git@github.com:monk-time/foodgram-project-react.git cd foodgram-project-react/infra/
- Включить режим отладки и использование базы данных SQLite:
export DJANGO_DEBUG=True export DJANGO_USE_SQLITE=True
- Запустить сервер Django. По желанию БД можно заполнить тестовыми данными:
python manage.py runserver python manage.py load
- Создать в папке infra/ файл
.env
с переменными окружения, заполненный по образцу .env.example. - Собрать и запустить докер-контейнеры через Docker Compose:
docker compose up --build
- Создать папку recipeshare/ с файлом
.env
в домашней директории сервера, заполненный по образцу .env.example.cd ~ mkdir recipeshare nano recipeshare/.env
- Настроить в nginx перенаправление запросов на порт 10000:
server { server_name <...>; server_tokens off; location / { proxy_pass http://127.0.0.1:10000; } }
- Получить HTTPS-сертификат для доменного имени:
sudo certbot --nginx
- Добавить в GitHub Actions следующие секреты:
- DOCKER_USERNAME - логин от Docker Hub
- DOCKER_PASSWORD - пароль от Docker Hub
- SSH_KEY - закрытый ssh-ключ для подключения к серверу
- SSH_PASSPHRASE - passphrase от этого ключа
- USER - имя пользователя на сервере
- HOST - IP-адрес сервера
- TELEGRAM_TO - ID телеграм-аккаунта для оповещения об успешном деплое
- TELEGRAM_TOKEN - токен телеграм-бота
- При первом коммите в ветку master будет выполнен полный деплой проекта. Подробнее см. main.yml.
Дмитрий Богорад @monk-time