Веб-приложение для публикации и управления кулинарными рецептами. Пользователи могут создавать собственные рецепты, добавлять понравившиеся в избранное, подписываться на публикации других авторов и формировать список покупок с автоматическим суммированием ингредиентов для выбранных блюд.
Сергей Соколкин
GitHub: hawkxdev Email: hawkxdev@gmail.com
- Python 3.12
- Django 5.2.7
- Django REST Framework 3.16.1
- Djoser 2.3.3
- PostgreSQL 15
- Gunicorn 23.0.0
- Docker
- Docker Compose
- Nginx
- GitHub Actions
Проект использует автоматический CI/CD pipeline через GitHub Actions. При push в ветку main выполняется:
- Проверка кода через flake8
- Сборка Docker образов
- Публикация в Docker Hub
- Деплой на сервер через SSH
- Применение миграций
- Сборка статики
- Отправка уведомления в Telegram
Важно: Docker образы собраны для платформы linux/amd64 (Intel/AMD процессоры). На компьютерах с Apple Silicon или других ARM64 архитектурах используйте вариант развертывания без Docker (см. ниже).
git clone https://github.com/hawkxdev/foodgram.git
cd foodgramПримечание: Файл docker-compose.production.yml находится в корневой директории проекта и содержит полную конфигурацию (backend, frontend, PostgreSQL, nginx).
Скопируйте файл .env.example в .env и заполните переменные:
cp backend/.env.example backend/.env
nano backend/.envУкажите свои значения для SECRET_KEY, POSTGRES_PASSWORD и других параметров.
docker compose -f docker-compose.production.yml up -dВыполните миграции:
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_ingredientsdocker compose -f docker-compose.production.yml exec backend python manage.py collectstatic --noinputСервер запускается автоматически после подъема контейнеров. Проект доступен по адресу http://localhost
git clone https://github.com/hawkxdev/foodgram.git
cd foodgramcd backendСоздайте виртуальное окружение:
python -m venv .venvАктивируйте виртуальное окружение:
Linux/macOS:
source .venv/bin/activateWindows:
.venv\Scripts\activateУстановите зависимости:
pip install --upgrade pip
pip install -r requirements.txtВариант А: С PostgreSQL
Скопируйте файл .env.example в .env и отредактируйте:
cp .env.example .env
nano .envУкажите:
SECRET_KEY— ваш секретный ключ DjangoDEBUG=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 не требует установки дополнительного ПО и подходит для локальной разработки.
python manage.py migrate
python manage.py createsuperuserЗагрузка из CSV:
python manage.py load_ingredients --path ../data/ingredients.csvpython manage.py runserverОткройте новый терминал и перейдите в директорию infra:
cd ../infraВременно отредактируйте nginx.conf для локальной разработки:
- Замените
http://backend:8000наhttp://host.docker.internal:8000:
sed -i '' 's|http://backend:8000|http://host.docker.internal:8000|g' nginx.conf- Добавьте 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- Исправьте пути для статических файлов фронтенда:
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 доступна по адресу: http://localhost/api/docs/