Skip to content

Продуктовый помощник с базой кулинарных рецептов

Notifications You must be signed in to change notification settings

dmsnback/cooking_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cooking Project

Cooking workflow

Описание

Foodgram - продуктовый помощник с базой кулинарных рецептов. Позволяет публиковать рецепты, сохранять избранные, а также формировать список покупок для выбранных рецептов. Можно подписываться на любимых авторов.

Проект адаптирован для использования PostgreSQL и развёртывания в контейнерах Docker.
Также используютя инструменты CI/CD.

Вернуться в начало

Технологии

Python JavaScript React Django DjangoREST Docker Postgres GitHub Actions Nginx Gunicorn

Вернуться в начало

Шаблон заполнения .env-файла, расположен по пути infra/.env

(в settings.py указаны дефолтные значения для переменных из env-файла)
SECRET_KEY = 'Ваш секретный ключ'

DB_ENGINE=django.db.backends.postgresql # указываем, что работаем с postgresql
DB_NAME=postgres # имя базы данных
POSTGRES_USER=postgres # логин для подключения к базе данных
POSTGRES_PASSWORD=postgres # пароль для подключения к БД
DB_HOST=db # название сервиса (контейнера)
DB_PORT=5432 # порт для подключения к БД 

Вернуться в начало

Запуск проекта на локальной машине:

  • Склонируйте репозиторий
git clone git@github.com:dmsnback/foodgram-project-react.git
  • Переходим в папку с файлом docker-compose.yaml
cd infra
  • Запускаем Docker контейнеры
docker-compose up -d --build
  • Выполняем миграции
docker-compose exec backend python manage.py migrate 
  • Создаём суперюзера
docker-compose exec backend python manage.py createsuperuser
  • Собираем статику
docker-compose exec backend python manage.py collectstatic --no-input
  • Наполняем базу данных содержимым из файла ingredients.csv:
docker-compose exec backend python manage.py load_ingredients

Проект станет доступен по адресу

http://localhost/recipes

Документация к API будет доступна по адресу

http://localhost/api/docs/

В документации описано, как должен работать ваш API. Документация представлена в формате Redoc.

Вернуться в начало

Запуск проекта на боевом сервере:

При пуше в ветку main код автоматически проверяется, тестируется и деплоится на сервер

  • Склонируйте репозиторий
git clone git@github.com:dmsnback/foodgram-project-react.git
  • Зайдите на удалённый сервер

  • Обновите существующий список пакетов:

sudo apt update
  • Установите Docker на сервер:
sudo apt install docker.io 
  • Установите docker-compose на сервер:
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • Затем необходимо задать правильные разрешения, чтобы сделать команду docker-compose исполняемой:
sudo chmod +x /usr/local/bin/docker-compose
  • Чтобы проверить успешность установки, запустите следующую команду:
sudo docker-compose --version

Вывод будет выглядеть следующим образом:

docker-compose version 1.29.2, build unknown
  • Локально отредактируйте файл infra/nginx.conf, в строке server_name вписать IP-адрес или доменное имя сервера.

  • Скопируйте файлы docker-compose.yaml и nginx/nginx.conf из вашего проекта на сервер в home/<ваш_username>/docker-compose.yaml и home/<ваш_username>/nginx.conf соответственно.

scp docker-compose.yml <username>@<host>:/home/<username>/docker-compose.yml
scp default.conf <username>@<host>:/home/<username>/nginx.conf
  • Для работы с Workflow добавить в Secrets GitHub переменные окружения для работы:
DB_ENGINE=django.db.backends.postgresql # указываем, что работаем с postgresql
DB_NAME=postgres # имя базы данных
POSTGRES_USER=postgres # логин для подключения к базе данных
POSTGRES_PASSWORD=postgres # пароль для подключения к БД
DB_HOST=db # название сервиса (контейнера)
DB_PORT=5432 # порт для подключения к БД

DOCKER_USERNAME= #имя пользователя
DOCKER_PASSWORD= #пароль от DockerHub

USER= #username для подключения к серверу
HOST= #IP сервера
PASSPHRASE= #пароль для сервера, если он установлен
SSH_KEY= #ваш SSH ключ (для получения команда: cat ~/.ssh/id_rsa)

TELEGRAM_TO= #ID чата, в который придет сообщение
TELEGRAM_TOKEN= #токен вашего бота

По команде git push запускается скрипт GitHub actions который выполняет автоматический deploy на сервер

  • Workflow состоит из пяти шагов:

    • Проверка кода на соответствие стандарту PEP8.

    • Сборка и доставка докер-образа для контейнера backend на Docker Hub.

    • Сборка и доставка докер-образа для контейнера frontend на Docker Hub.

    • Автоматический деплой проекта на боевой сервер.

    • Отправка уведомления в Telegram о том, что процесс деплоя успешно завершился.

  • После сборки контейнера зайдите на сервер и выполните следующие команды:

# Выполняем миграции
sudo docker-compose exec backend python manage.py migrate

# Создаем суперппользователя
sudo docker-compose exec backend python manage.py createsuperuser

# Собираем статику со всего проекта
sudo docker-compose exec backend python manage.py collectstatic --no-input

# Наполняем базу данных содержимым из файла ingredients.csv
sudo docker-compose exec backend python manage.py load_ingredients

Проект станет доступен по адресу:

<ваш_ip-адрес_или_домен>/recipes

Документация к API:

<ваш_ip-адрес_или_домен>/api/docs/

В документации описано, как должен работать ваш API. Документация представлена в формате Redoc.

Вернуться в начало

Автор backend части:

Вернуться в начало

About

Продуктовый помощник с базой кулинарных рецептов

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published