Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python Django Django REST Framework PostgreSQL Nginx gunicorn docker GitHub%20Actions

Foodie

https://foodie.hopto.org/ - это продуктовый помощник или блог для любителей готовить и вкусно поесть. Здесь любой желающий может посмотреть рецепты интересных блюд, а зарегистрированные пользователи могут размещать свои рецепты и пользоваться полным функционалом платформы.

В репозитории представлен полностью рабочий код проекта, который загружен на удаленный сервер. Подключено автоматическое обновление проекта на сервере при внесении изменений.

! UPD: проект больше не доступен на сервере !

Если вы хотите расширить функционал проекта, можете загрузить репозиторий к себе.

Для запуска локально:

  1. Cклонируйте репозиторий на свой компьютер, в командной строке введите:
git clone git@github.com:terrazavr/foodgram-project-react.git
  1. Создайте виртуальное окружение:
python3 -m venv venv 

И активируйте его:

если у вас Linux/macOS:

source venv/bin/activate

если у вас windows:

source venv/scripts/activate
  1. Для работы с контейнерами вам понадобится Docker, если он у вас еще не установлен: необходимо скачать его официального сайта https://www.docker.com для вашей операционной системы. После установки рекомендую сразу создать учетную запись DockerHub, чтобы иметь возможность собирать образы и хранить их удаленно.

  2. Разверните контейнеры Docker:

# Перейдите в папку проекта
cd ~/infra
# Соберите орекстр контейнеров командой
sudo docker compose -f docker-compose.yml up -d
# Если вы видите контейнеры со статусом  "Started"  - проект запушен локально 
# Далее необходимо сделать миграции. Посмотрите имя backend контейнера
docker ps | grep backend
# Выполните команду:
docker exec -it infra-backend-1 bash - infra-backend-1  # имя контейнера, может отличаться
# Выполните миграции: 
./manage.py migrate
# Создайте суперюзера: 
./manage.py createsuperuser
# Соберите статику: 
./manage.py collectstatic

Теперь можете заходить на сайт: http://127.0.0.1:7000/

Панель админитсратора находится здесь: http://127.0.0.1:7000/admin/

С документацией проекта можете ознакомиться по адресу: http://127.0.0.1:7000/api/docs/redoc.html


Чтобы вы могли поноценно пользоваться проектом необхимо выполнить следующие операций:

  1. Загрузите базу ингридентов:
  • в админ панели зайдите в раздел "Ингридиенты"
  • нажмите кнопку "import"
  • загрузите файл ingredients.json из папки проекта "/data"
  • подтвердите загрузку
  1. Создайте несколько тегов:
  • в админ панели зайдите в раздел "Теги"
  • нажмите кнопку "add"
  • заполните все поля и сохраните

Проект готов, теперь, зайдя на сайт, вы можете создавать рецепты.


Эндроинты сервиса

POST /api/users/ - регистрация
POST /api/auth/token/login - создание токена
POST /api/auth/token/logout/ - удаление токена
GET /api/users/ - просмотр информации о пользователях

POST /api/users/set_password/ - изменение пароля
GET /api/users/{id}/subscribe/ - подписаться на пользователя
DEL /api/users/{id}/subscribe/ - отписаться от пользователя

POST /api/recipes/ - создать рецепт
GET /api/recipes/ - получить рецепты
GET /api/recipes/{id}/ - получить рецепт по id
DEL /api/recipes/{id}/ - удалить рецепт по id

GET /api/recipes/{id}/favorite/ - добавить рецепт в избранное
DEL /api/recipes/{id}/favorite/ - удалить рецепт из избранного

GET /api/users/{id}/subscribe/ - подписаться на пользователя
DEL /api/users/{id}/subscribe/ - отписаться от пользователя

GET /api/ingredients/ - получить список всех ингредиентов

GET /api/tags/ - получить список всех тегов

GET /api/recipes/{id}/shopping_cart/ - добавить рецепт в корзину
DEL /api/recipes/{id}/shopping_cart/ - удалить рецепт из корзины

Загрузка проекта на удаленный сервер

Перед загрузкой на удаленный сервер нужно внести некоторые изменения:

  1. Создайте файл .env
DEBUG=True
POSTGRES_USER=foodgram_user
POSTGRES_PASSWORD=foodgram
POSTGRES_DB=foodgram
DB_HOST=db
DB_PORT=5432

В файле backend/foodgram/settings.py внесте изменения в поле ALLOWED_HOSTS = ["158.160.74.8", "127.0.0.1", "localhost", "foodie.hopto.org"], укажите IP адрес своего сервера и доменнное имя.

  1. Соберите свои собственные docker - образы backend, frontend, nginx:
cd frontend  # В директории frontend...
docker build -t username/foodgram_frontend .  # ...сбилдите образ, назвите его foodgram_frontend
cd ../backend  # То же в директории backend...
docker build -t username/foodgram_backend .
cd ../gateway  # ...то же и в gateway
docker build -t username/foodgram_gateway . 
# и отправьте каждый из их на DockerHub:
docker push username/<image_name> # foodgram_frontend 
  1. Внестите изменения в файле infra/docker-compose.production в разделы backend, frontend, nginx: вместо команды: build: ./backend укажите откуда загрузить образы: image: username/foodgram_backend:latest

  2. На удаленном сервере создайте папку проекта, в которой поместите 2 файла:

  • .env
  • docker-compose.production.yml
  1. Настройте "внешний" nginx тут: sudo nano /etc/nginx/sites-enabled/default Внеситет данные своего домена, а так же укажите свой порт, куда будете перенаправлять запросы:
server {
    server_name my_domain.org;
    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:7000;
    }
}
  1. Теперь можете запустить сборку оркестра:
sudo docker compose -f docker-compose.production.yml up -d
# провести миграции:
docker exec -it infra-backend-1 bash - infra-backend-1  # имя контейнера, может отличаться
./manage.py migrate
# создать суперюзера 
./manage.py createsuperuser
#собрать статику: 
./manage.py collectstatic

Если все контейнеры запустились и nginx настроен правильно ваш сайт успешно запустится! Повторите шаги с загрузкой ингридиентов и созданием тегов для полноценной работы проекта.


Автор проекта:

About

Foodie - сайт рецептов и продуктовый помощник. Проект на контейнерах Docker, Автоматизирован теплой

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages