Адрес сайта: https://jrushfoodgram.sytes.net
Логин администратора(эл.почта):
admin@admin.ru
Пароль администратора:
admin
Foodgram - это сайт, на котором пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Пользователям сайта доступен сервис «Список покупок», который позволяет создавать список продуктов, которые нужно купить для приготовления выбранных блюд.
- Python,
- Django,
- Django REST Framework 3.14.,
- Djoser,
- PostgreSQL,
- React,
- Gunicorn,
- Nginx,
- Docker,
- GitHub Actions
- Клонируйте репозиторий и перейдите в него в командной строке:
git clone git@github.com:JRushFobos/foodgram-project-react.git
cd foodgram-project-react- Перейдите в директорию
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- В корне приложения создайте файл
.envи заполните его своими данными. Все необходимые переменные перечислены в файле.env.example. - Соберите и запустите докер-контейнеры через Docker Compose:
docker compose up --build- Подключитесь к удаленному серверу и создайте на сервере директорию
foodgram:
ssh -i путь_до_файла_с_SSH_ключом/название_файла_с_SSH_ключом_без_расширения login@ip
mkdir foodgram- Установите 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- Скопируйте файлы
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 вашего сервера.
- Запустите Docker Compose в режиме демона:
sudo docker compose -f docker-compose.production.yml up -d- Выполните миграции, соберите статические файлы бэкенда и скопируйте их в
/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/- Откройте конфигурационный файл
Nginxв редактореnano:
nano /etc/nginx/sites-enabled/default- Измените настройки в nginx с перенаправлением запросов на порт 10000:
server {
server_name <...>;
server_tokens off;
location / {
proxy_pass http://127.0.0.1:10000;
}
}- Проверьте правильность конфигурации
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- Перезапустите
Nginx:
sudo service nginx reload- Файл
workflowуже написан и находится в директории:
foodgram-project-react/.github/workflows/main.yml- Для адаптации его к вашему серверу добавьте секреты в
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, имя бота)- При первом push'е в
masterбудет выполнен полный деплой проекта.
- Получение списка всех рецептов по
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
}- Получение рецепта по
idGET-запрос:
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
}