Skip to content

Foodgram - это сайт, на котором пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов

Notifications You must be signed in to change notification settings

JRushFobos/foodgram-project-react

Repository files navigation

Foodgram

Адрес сайта: https://jrushfoodgram.sytes.net

Логин администратора(эл.почта):

admin@admin.ru

Пароль администратора:

admin

Описание

Foodgram - это сайт, на котором пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Пользователям сайта доступен сервис «Список покупок», который позволяет создавать список продуктов, которые нужно купить для приготовления выбранных блюд.

Используемые технологии

Как запустить проект локально

  1. Клонируйте репозиторий и перейдите в него в командной строке:
git clone git@github.com:JRushFobos/foodgram-project-react.git

cd foodgram-project-react
  1. Перейдите в директорию backend, создайте и активируйте виртуальное окружение, установите зависимости из файла requirements.txt и выполните миграции:
cd backend
python -m venv venv
source venv/Scripts/activate
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
  1. В корне приложения создайте файл .env и заполните его своими данными. Все необходимые переменные перечислены в файле .env.example.
  2. Соберите и запустите докер-контейнеры через Docker Compose:
docker compose up --build

Как развернуть проект на сервере

  1. Подключитесь к удаленному серверу и создайте на сервере директорию foodgram:
ssh -i путь_до_файла_с_SSH_ключом/название_файла_с_SSH_ключом_без_расширения login@ip
mkdir foodgram
  1. Установите Docker Compose на сервер:
sudo apt update
sudo apt install curl
curl -fSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
sudo apt-get install docker-compose-plugin
  1. Скопируйте файлы docker-compose.production.yml и .env в директорию foodgram/ на сервере:
scp -i path_to_SSH/SSH_name docker-compose.production.yml \
    username@server_ip:/home/username/foodram/docker-compose.production.yml

где:

  • path_to_SSH - путь к файлу с SSH-ключом;
  • SSH_name - имя файла с SSH-ключом (без расширения);
  • username - ваше имя пользователя на сервере;
  • server_ip - IP вашего сервера.
  1. Запустите Docker Compose в режиме демона:
sudo docker compose -f docker-compose.production.yml up -d
  1. Выполните миграции, соберите статические файлы бэкенда и скопируйте их в /backend_static/static/:
sudo docker compose -f docker-compose.production.yml exec backend python manage.py migrate
sudo docker compose -f docker-compose.production.yml exec backend python manage.py collectstatic
sudo docker compose -f docker-compose.production.yml exec backend cp -r /app/collected_static/. /backend_static/static/
  1. Откройте конфигурационный файл Nginx в редакторе nano:
nano /etc/nginx/sites-enabled/default
  1. Измените настройки в nginx с перенаправлением запросов на порт 10000:
server {
    server_name <...>;
    server_tokens off;

    location / {
        proxy_pass http://127.0.0.1:10000;
    }
}
  1. Проверьте правильность конфигурации Nginx:
sudo nginx -t

Если вы получаете следующий ответ, значит, ошибок нет:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. Перезапустите Nginx:
sudo service nginx reload

Настройка CI/CD

  1. Файл workflow уже написан и находится в директории:
foodgram-project-react/.github/workflows/main.yml
  1. Для адаптации его к вашему серверу добавьте секреты в GitHub Actions:
DOCKER_USERNAME   - имя пользователя в DockerHub
DOCKER_PASSWORD   - пароль пользователя в DockerHub
HOST              - IP-адрес сервера
USER              - имя пользователя
SSH_KEY           - содержимое приватного SSH-ключа
SSH_PASSPHRASE    - пароль для SSH-ключа

TELEGRAM_TO       - ID вашего телеграм-аккаунта (можно узнать у @userinfobot, команда /start)
TELEGRAM_TOKEN    - токен вашего бота (получить токен можно у @BotFather, команда /token, имя бота)
  1. При первом push'е в master будет выполнен полный деплой проекта.

Примеры тестовых запросов и ответов (в формате json)

  1. Получение списка всех рецептов по GET-запросу:
https://jrushfoodgram.sytes.net/api/recipes/

Ответ:

{
    "id": 1,
    "author": {
        "id": 2,
        "email": "pupkovanton@user.ru",
        "username": "anton",
        "first_name": "anton",
        "last_name": "pupkov",
        "is_subscribed": false
    },
    "name": "мясо по-татарски",
    "image": "/media/recipes/temp_HdFdv.jpeg",
    "text": "мясо по-татарски",
    "ingredients": [
        {
            "id": 1,
            "name": "мясо по-татарски",
            "measurement_unit": "г",
            "amount": 500
        }
    ],
    "tags": [
        {
            "id": 3,
            "name": "Обед",
            "color": "#3DCS2",
            "slug": "dinner"
        }
    ],
    "cooking_time": 45,
    "is_favorited": false,
    "is_in_shopping_cart": false
}
  1. Получение рецепта по id GET-запрос:
https://jrushfoodgram.sytes.net/api/recipes/1/

Ответ:

{
    "id": 1,
    "author": {
        "id": 2,
        "email": "pupkovanton@user.ru",
        "username": "anton",
        "first_name": "anton",
        "last_name": "pupkov",
        "is_subscribed": false
    },
    "name": "мясо по-татарски",
    "image": "/media/recipes/temp_HdFdv.jpeg",
    "text": "мясо по-татарски",
    "ingredients": [
        {
            "id": 1,
            "name": "мясо по-татарски",
            "measurement_unit": "г",
            "amount": 500
        }
    ],
    "tags": [
        {
            "id": 3,
            "name": "Обед",
            "color": "#3DCS2",
            "slug": "dinner"
        }
    ],
    "cooking_time": 45,
    "is_favorited": false,
    "is_in_shopping_cart": false
}

Об авторе

Мокрушин Евгений

About

Foodgram - это сайт, на котором пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published