Foodgram это веб сервис, с помощью которого, пользователи смогут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список(в формате .txt) продуктов, необходимых для приготовления одного или нескольких выбранных блюд.
Вот, что было сделано в ходе работы над проектом:
- настроено взаимодействие Python-приложения с внешними API-сервисами;
- создан собственный API-сервис на базе проекта Django;
- создан Telegram-бот;
- подключено SPA к бэкенду на Django через API;
- созданы образы и запущены контейнеры Docker;
- созданы, развёрнуты и запущены на сервере мультиконтейнерные приложения;
- закреплены на практике основы DevOps, включая CI&CD.
- Установите на ваш ПК Docker
- Клонируйте репозиторий:
git clone [email protected]:evgenii-erokhin/foodgram-project-react.git
- Создайте и активируйте вирутальное окружение:
- Если у вас Windows:
python -m venv venv
source venv/Scripts/activate
- Если у вас Linux или macOS:
python3 -m venv venv
source venv/bib/activate
- Установоить зависимости:
pip install -r requirements.txt
- В корне папки
foodgram-project-react
создайте файл .env и заполните его по шаблону.
POSTGRES_USER=<Логин для подключения к БД>
POSTGRES_PASSWORD=<Ваш пароль>
POSTGRES_DB=<Имя БД>
DB_HOST=<Имя контейнера БД>
DB_PORT=5432
SECRET_KEY=<50ти символьный ключ>
DEBUG=False
ALLOWED_HOSTS=<IP вашего сервера и домен сайта>
- В терминале, находясь в корневой директории проекта, выполните комаду по запуску сети контейнеров:
docker compose up
- Выполните миграции "внутри" контейнера
beckend
используя команду:
docker compose exec backend python manage.py migrate
- Собирите статику Django:
docker compose exec backend python manage.py collectstatic
- Скопируйте статику в
/backend_static/static/
docker compose exec backend cp -r /app/collected_static/. /backend_static/static/
- Создайте суперпользователя:
docker compose exec backend python manage.py createsuperuser
- Наполните базу данных ингредиентами:
docker compose exec backend python manage.py import_ingredients_from_csv
- В домашней директории сервера поочередно выполните команды для установки Docker и Docker Compose для Linux.
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
- Установить Nginx и настроить конфигурационный файл default так чтобы все запросы проксировались в контейнеры на порт 8000
sudo apt install nginx -y
sudo nano /etc/nginx/sites-enabled/default
Создайте примерно такую структуру:
server {
server_name xxx.xxx.xx.xxx yyyyyyy.com;
server_tokens off;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8000;
}
}
Где ххх.ххх.хх.ххх
- это IP вашего сервера.
А yyyyyyy.com
- домен вашего сайта.
- В домашней директории сервера создайте папку
foodgram
. - В корне папки
foodgram
создайте файл .env и заполните его по шаблону.
POSTGRES_USER=<Логин для подключения к БД>
POSTGRES_PASSWORD=<Ваш пароль>
POSTGRES_DB=<Имя БД>
DB_HOST=<Имя контейнера БД>
DB_PORT=5432
SECRET_KEY=<50ти символьный ключ>
DEBUG=False
ALLOWED_HOSTS=<IP вашего сервера и домен сайта>
- В репозиторие в разделе Settings > Secrets and variables > Action Добавить следующие "секреты" по шаблону:
DOCKER_USERNAME <никнейм DockerHub>
DOCKER_PASSWORD <пароль от DockerHub>
HOST <IP вашего сервера>
SSH_KEY <Ваш приватный SSH-ключ>
SSH_PASSPHRASE <Ваш пароль от сервера>
USER <имя пользователя для подключения к серверу>
TELEGRAM_TO <id вашего телеграм аккаунта>
TELEGRAM_TOKEN <токен вашего телеграм бота>
- Запустите workflow выполнив следующие команды:
git add .
git commit -m '<текст коммита>'
git push
Выполнив эти команды будет запущен тест, далее сбилдятся образы для бекенда, фронтенда, базы данных, и nginx и опубликуются в вашем аккаунте DockerHub. После этого будет выполнен автоматический деплой на ваш сервер. В конце в бот в месседжере Телеграм придёт уведомление об успешном деплое.
Евгений Ерохин