Skip to content

hawkxdev/foodgram

Repository files navigation

Foodgram — сайт для публикации рецептов

Веб-приложение для публикации и управления кулинарными рецептами. Пользователи могут создавать собственные рецепты, добавлять понравившиеся в избранное, подписываться на публикации других авторов и формировать список покупок с автоматическим суммированием ингредиентов для выбранных блюд.

Ссылка на работающий сайт

http://84.252.138.183

Автор

Сергей Соколкин

GitHub: hawkxdev Email: hawkxdev@gmail.com

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

CI/CD

Проект использует автоматический CI/CD pipeline через GitHub Actions. При push в ветку main выполняется:

  1. Проверка кода через flake8
  2. Сборка Docker образов
  3. Публикация в Docker Hub
  4. Деплой на сервер через SSH
  5. Применение миграций
  6. Сборка статики
  7. Отправка уведомления в Telegram

Локальное развертывание с Docker

Важно: Docker образы собраны для платформы linux/amd64 (Intel/AMD процессоры). На компьютерах с Apple Silicon или других ARM64 архитектурах используйте вариант развертывания без Docker (см. ниже).

Шаг 1. Клонирование репозитория

git clone https://github.com/hawkxdev/foodgram.git
cd foodgram

Примечание: Файл docker-compose.production.yml находится в корневой директории проекта и содержит полную конфигурацию (backend, frontend, PostgreSQL, nginx).

Шаг 2. Настройка переменных окружения

Скопируйте файл .env.example в .env и заполните переменные:

cp backend/.env.example backend/.env
nano backend/.env

Укажите свои значения для SECRET_KEY, POSTGRES_PASSWORD и других параметров.

Шаг 3. Подъем контейнеров в Docker

docker compose -f docker-compose.production.yml up -d

Шаг 4. Подготовка базы данных

Выполните миграции:

docker compose -f docker-compose.production.yml exec backend python manage.py migrate

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

docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser

Импортируйте фикстуры (ингредиенты):

docker compose -f docker-compose.production.yml exec backend python manage.py load_ingredients

Шаг 5. Сборка статики

docker compose -f docker-compose.production.yml exec backend python manage.py collectstatic --noinput

Шаг 6. Запуск сервера

Сервер запускается автоматически после подъема контейнеров. Проект доступен по адресу http://localhost

Локальное развертывание без Docker

Шаг 1. Клонирование репозитория

git clone https://github.com/hawkxdev/foodgram.git
cd foodgram

Шаг 2. Смена папки

cd backend

Шаг 3. Настройка виртуального окружения

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

python -m venv .venv

Активируйте виртуальное окружение:

Linux/macOS:

source .venv/bin/activate

Windows:

.venv\Scripts\activate

Установите зависимости:

pip install --upgrade pip
pip install -r requirements.txt

Шаг 4. Настройка переменных окружения

Вариант А: С PostgreSQL

Скопируйте файл .env.example в .env и отредактируйте:

cp .env.example .env
nano .env

Укажите:

  • SECRET_KEY — ваш секретный ключ Django
  • DEBUG=True — для локальной разработки
  • POSTGRES_* — параметры вашей локальной PostgreSQL базы
  • DB_HOST=localhost — для подключения к локальной БД

Вариант Б: С SQLite (проще для локальной разработки)

Отредактируйте backend/foodgram/settings.py и замените блок DATABASES:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Файл .env создавать не нужно. SQLite не требует установки дополнительного ПО и подходит для локальной разработки.

Шаг 5. Миграция базы и создание суперпользователя

python manage.py migrate
python manage.py createsuperuser

Шаг 6. Импорт продуктов

Загрузка из CSV:

python manage.py load_ingredients --path ../data/ingredients.csv

Шаг 7. Запуск backend сервера

python manage.py runserver

Шаг 8. Запуск frontend и nginx (через Docker)

Откройте новый терминал и перейдите в директорию infra:

cd ../infra

Временно отредактируйте nginx.conf для локальной разработки:

  1. Замените http://backend:8000 на http://host.docker.internal:8000:
sed -i '' 's|http://backend:8000|http://host.docker.internal:8000|g' nginx.conf
  1. Добавьте location для API документации перед location /api/:
sed -i '' '/location \/api\/ {/i\
    location /api/docs/ {\
        alias /usr/share/nginx/html/api/docs/;\
        index redoc.html;\
        try_files $uri $uri/ =404;\
    }\
\
' nginx.conf
  1. Исправьте пути для статических файлов фронтенда:
sed -i '' 's|alias /static/;|alias /usr/share/nginx/html/static/;|' nginx.conf
sed -i '' 's|alias /static/;|alias /usr/share/nginx/html/;|' nginx.conf

Запустите контейнеры:

docker compose up

Это запустит frontend и nginx, которые будут проксировать запросы на ваш локальный backend сервер.

Ссылка на API документацию

Полная техническая документация к API доступна по адресу: http://localhost/api/docs/