foodgramhelper.sytes.net
- Docker
- Django
- djangorestframework
- Python
- Nginx
- PostgreSQL
Локальная настройка и запуск проекта
Клонировать репозиторий к себе на компьютер и перейти в директорию с проектом:
git clone https://github.com/denis-shtanskiy/foodgram-project-react.git
cd foodgram-project-react
Для проекта создать и активировать виртуальное окружение, установить зависимости: для windows:
python -m venv venv
source venv/Scripts/activate
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
cd foodgram
для linux:
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
cd foodgram
Для корректной работы backend-части проекта, создайте в корне файл .env
и заполните его переменными по примеру из файла .env.example
или по примеру ниже:
POSTGRES_DB=foodgram
POSTGRES_USER=foodgram_user
POSTGRES_PASSWORD=foodgram_password
DB_NAME=foodgram
DB_HOST=db
DB_PORT=5432
SECRET_KEY=safq12432tdzxqxght_!erks # стандартный ключ, который создается при старте проекта
DEBUG=True
ALLOWED_HOSTS=IP_адрес_сервера,127.0.0.1,localhost,домен_сервера]
SUPERUSER_USERNAME=AdminFoodgram # переменные для автоматического создания суперюзера,
SUPERUSER_PASSWORD=foodgram12345 # если не указать, применятся стандартные из скрипта
[email protected] # вид стандартных переменных ('admin', '[email protected], 'admin12345')
Установите docker compose на свой компьютер. Для запуска проекта на локальной машине достаточно:
- Запустить проект, ключ
-d
запускает проект в фоновом режиме - выполнить миграции
- собрать статику и скопировать её
- запустить скрипт для создания суперюзера
- запустить менеджмент команду для загрузки базы ингредиентов
docker compose -f docker-compose.prodauction.yml up -d
docker compose -f docker-compose.prodauction.yml exec backend python manage.py migrate
docker compose -f docker-compose.prodauction.yml exec backend python manage.py collectstatic && \
docker compose -f docker-compose.prodauction.yml exec backend cp -r /app/static_backend/. /backend_static/static/
docker compose -f docker-compose.production.yml exec backend bash create_superuser_script.sh
docker compose -f docker-compose.production.yml exec backend python manage.py import_ingredients ./data/ingredients.csv
Для работы на удаленном сервере потребуется:
- Установить Nginx
- Отредактировать конфигурационный файл:
server { server_name IP_адрес_сервера домен_сервера; location / { proxy_pass http://127.0.0.1:9000; } }
- Настроить и установить Docker
- Перенести файл `docker-compose.production.yml с локальной машины на удаленную
- Запустить контейнеры
- Выполнить миграции собрать статику и скопировать её, так же как описано для локальной машины Необходимые команды
sudo apt install nginx -y # устанавливаем Nginx
sudo systemctl start nginx # запускаем Nginx
sudo nano /etc/nginx/sites-enabled/default # заходим редактировать файл конфигурации
sudo nginx -t # проверяем корректность настроек
sudo service nginx reload # перезапускаем Nginx
sudo service nginx status # проверяем что Nginx запущен и работает без ошибок
sudo apt install snapd && \ # Устанавливаем certbot для получения SSL-сертификата
sudo snap install core && \ # Устанавливаем certbot для получения SSL-сертификата
sudo snap refresh core && \ # Устанавливаем certbot для получения SSL-сертификата
sudo snap install --classic certbot && \ # Устанавливаем certbot для получения SSL-сертификата
sudo ln -s /snap/bin/certbot /usr/bin/certbot # Устанавливаем certbot для получения SSL-сертификата
sudo certbot --nginx # Запускаем certbot получаем SSL-сертификат
sudo service nginx reload # Сертификат автоматически сохранится в конфигурации Nginx
sudo apt update && sudo apt install curl # Устанавливаем Docker
curl -fSl https://get.docker.com -o get-docker.sh # Устанавливаем Docker
sudo sh ./get-docker.sh # Настраиваем Docker
sudo apt-get install docker-compose-plugin # Настраиваем Docker
sudo nano docker-compose.production.yml # В этот файл перенесем содержимое из файла на локальной машине
sudo docker compose -f docker-compose.production.yml up -d # Запускаем контейнеры на удаленном сервере в фоновом режиме
Workflow
Для постоянного использования CI/CD интеграции и деплоя в репозитории проекта на GitHub в разделе Actions
перейти Settings/Secret and variables/Actions
нужно прописать переменные окружения для доступа к сервисам - Secrets:
DOCKER_USERNAME # логин в DockerHub
DOCKER_PASSWORD # пароль пользователя в DockerHub
DOCKER_USER # имя пользователя для репозиториев
HOST # ip_address сервера
USER # имя пользователя
SSH_KEY # приватный ssh-ключ (cat ~/.ssh/id_rsa) по выбору: удаленный сервер или локальная машина
PASSPHRASE # кодовая фраза (пароль) для ssh-ключа по выбору: удаленный сервер или локальная машина
TELEGRAM_TO # id телеграм-аккаунта (можно узнать у @userinfobot, команда /start)
TELEGRAM_TOKEN # токен бота (получить токен можно у @BotFather, /token, имя бота)
По команде git push
в репозитории на github отрабатывают сценарии:
- tests - для всех веток проверка кода по стандартам PEP8.
- build_and_push_to_docker_hub - сборка и отправка образов в удаленный репозиторий на DockerHub
- deploy - автоматический деплой проекта
- send_message - отправка соообщения разработчику в Telegram
Denis Shtanskiy Telegram: @shtanskiy