Foodgram - это веб-приложение «Продуктовый помощник», где пользователи могут публиковать рецепты, подписываться на других пользователей, добавлять рецепты в избранное и создавать список покупок ингредиентов для выбранных блюд.
- Регистрация и авторизация пользователей.
- Публикация рецептов с указанием ингредиентов, описанием и фотографией.
- Подписка на авторов и просмотр их рецептов в ленте.
- Добавление рецептов в избранное для быстрого доступа.
- Формирование списка покупок с возможностью скачивания в PDF.
- Backend: Python 3.9+, Django, Django REST Framework, PostgreSQL
- Frontend: React
- Управление проектом: Docker, Docker Compose
- Веб-сервер: Nginx
- Gunicorn для запуска приложения
- CI/CD: GitHub Actions
- Docker и Docker Compose
- Git
Убедитесь, что вы установили Docker и Docker Compose на свою систему.
-
Склонируйте репозиторий:
git clone https://github.com/vettspace/foodgram.git
-
Перейдите в директорию проекта:
cd foodgram/infra/
-
Создайте файл
.env
с переменными окружения:Создайте файл
.env
в директорииinfra/
и добавьте в него следующие переменные:DB_ENGINE=django.db.backends.postgresql POSTGRES_DB=foodgram POSTGRES_USER=foodgram_user POSTGRES_PASSWORD=foodgram_password DB_HOST=db DB_PORT=5432 SECRET_KEY=your_secret_key ALLOWED_HOSTS=127.0.0.1,localhost DEBUG=False
-
Запустите Docker Compose:
docker-compose up -d --build
-
Выполните миграции, соберите статику и создайте суперпользователя:
# Применение миграций docker-compose exec backend python manage.py migrate # Сбор статики docker-compose exec backend python manage.py collectstatic --no-input # Создание суперпользователя docker-compose exec backend python manage.py createsuperuser
-
(Опционально) Загрузите данные в базу данных:
# Создание тегов docker-compose exec backend python manage.py create_tags # Загрузка ингредиентов docker-compose exec backend python manage.py load_ingredients data/ingredients.json # Создание тестовых пользователей docker-compose exec backend python manage.py create_users # Создание тестовых рецептов docker-compose exec backend python manage.py create_recipes
-
Приложение будет доступно по адресу:
http://localhost/
Для развертывания проекта на удаленном сервере с использованием CI/CD выполните следующие шаги:
-
Настройте переменные окружения в GitHub Secrets:
В настройках вашего репозитория на GitHub добавьте следующие Secrets:
DOCKER_USERNAME
иDOCKER_PASSWORD
для Docker HubHOST
,SSH_USER
,SSH_KEY
,SSH_PASSPHRASE
для доступа к серверу по SSHPOSTGRES_USER
,POSTGRES_PASSWORD
,DB_NAME
для базы данныхSECRET_KEY
— секретный ключ DjangoALLOWED_HOSTS
— IP или домен вашего сервераTELEGRAM_TOKEN
,TELEGRAM_TO
для уведомлений в Telegram (опционально)
-
Настройте сервер:
Установите на сервере Docker и Docker Compose.
-
GitHub Actions выполнит автоматический деплой при пуше в ветку
main
.
-
create_tags.py
— создает предустановленные теги (например, "Завтрак", "Обед", "Ужин").docker-compose exec backend python manage.py create_tags
-
load_ingredients.py
— загружает список ингредиентов из файлаingredients.json
.docker-compose exec backend python manage.py load_ingredients data/ingredients.json
-
create_users.py
— создает тестовых пользователей.docker-compose exec backend python manage.py create_users
-
create_recipes.py
— создает тестовые рецепты с использованием данных изtest_recipes_data.py
и изображений изtest_pics
.docker-compose exec backend python manage.py create_recipes
foodgram/
├── backend/
│ ├── Dockerfile
│ ├── manage.py
│ ├── foodgram/ # Настройки Django проекта
│ ├── api/ # Приложение API
│ ├── recipes/ # Приложение рецептов
│ ├── users/ # Приложение пользователей
│ └── data/ # Данные (ингредиенты и т.д.)
├── frontend/
│ ├── Dockerfile
│ ├── package.json
│ ├── src/ # Исходный код React
│ └── public/
├── infra/
│ ├── docker-compose.yml
│ ├── docker-local-compose.yml
│ ├── default.conf
│ └── .env # Переменные окружения
├── docs/
│ ├── openapi-schema.yml
│ └── redoc.html
└── README.md
Настроен автоматический деплой с использованием GitHub Actions.
Файл foodgram_workflow.yml
включает в себя:
- Тестирование: запуск flake8.
- Сборка и публикация образов: сборка Docker-образов и отправка их на Docker Hub.
- Деплой на сервер: автоматическое развёртывание на сервере.
- Уведомление: отправка сообщений в Telegram о результате деплоя.
После запуска проекта документация доступна по адресу:
http://localhost/api/docs/
Посетите сайт проекта по адресу: fdgrm.space