Foodgram является социальной сетью для любителей поесть. Вы можете как узнать для себя что-то новое в мире гастрономических удовольствий, так и поделиться с миром своими кулинарными изысканиями.
Сервис доступен по адресу: (https://foodgram.servegame.com/)
Инструменты и стек: #Python #Django #Docker-compose #PostgreSQL #API #Nginx #Djoser #Gunicorn #Python-dotenv #JSON #YAML #VsCode #GitHub
Этот проект настроен на автоматическую проверку тестами и деплой на удалённый Linux сервер, но для этого необходима некоторая подготовка.
-
Клонируйте репозиторий:
git clone git@github.com:gerich02/foodgram-project-react.git
-
Перейдите в папку с проектом:
cd foodgram-project-react
-
Создайте файл .env и заполните его своими данными:
POSTGRES_USER=user #Имя пользователя для подключения к базе данных PostgreSQL. POSTGRES_PASSWORD=password #Пароль пользователя для подключения к базе данных PostgreSQL. POSTGRES_DB=django #Название базы данных PostgreSQL. DB_HOST=db #Хост базы данных. DB_PORT=5432 #Порт для подключения к базе данных. SECRET_KEY='secret_key' #Секретный ключ приложения Django, используемый для шифрования данных и безопасности. DEBUG='true' #Параметр, определяющий, включен ли режим отладки. Установка значения 'true' включает режим отладки. ALLOWED_HOSTS='localhost,127.0.0.1' #писок доменных имен или IP-адресов, которым разрешено подключаться к приложению. TEST_DATABASE='sqlite' #Тип базы данных, используемой для тестирования. В данном случае используется 'sqlite'.
-
Замените username на ваш логин на DockerHub:
cd frontend docker build -t username/foodgram_frontend . cd ../backend docker build -t username/foodgram_backend . cd ../nginx docker build -t username/foodgram_gateway .
-
Проверьте, что на вашем компьютере созданы необходимые образы, выполните команду:
docker image ls
-
Загрузите образы на DockerHub:
docker push username/foodgram_frontend docker push username/foodgram_backend docker push username/foodgram_gateway
-
Подключитесь к удалённому серверу:
ssh -i путь_до_файла_с_SSH_ключом/название_файла_с_SSH_ключом имя_пользователя@ip_адрес_сервера
-
Создайте на сервере директорию foodgram через терминал:
mkdir foodgram
-
В директорию foodgram/ скопируйте файлы docker-compose.production.yml и .env:
scp -i path_to_SSH/SSH_name docker-compose.production.yml username@server_ip:/home/username/foodgram/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/:
docker compose -f docker-compose.yml exec backend python manage.py migrate docker compose -f docker-compose.yml exec backend python manage.py import_ingredient_csv docker compose -f docker-compose.yml exec backend python manage.py import_tags_csv docker compose -f docker-compose.yml exec backend python manage.py collectstatic docker compose -f docker-compose.yml exec backend cp -r /app/collected_static/. /backend_static/static
-
На сервере в редакторе nano откройте конфиг Nginx:
sudo nano /etc/nginx/sites-enabled/default
-
Измените настройки location в секции server:
location / { proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:6000; }
-
Проверьте работоспособность конфига Nginx:
sudo nginx -t
-
Перезапустите Nginx
sudo service nginx reload
-
Файл workflow уже написан. Он находится в директории
foodgram-project-react/.github/workflows/main.yml
-
Для адаптации его на сервере добавьте секреты в GitHub Actions:
DOCKER_USERNAME # логин пользователя в DockerHub DOCKER_PASSWORD # пароль пользователя в DockerHub DOCKER_NICKNAME # имя пользователя в DockerHub HOST # ip_address сервера USER # имя пользователя SSH_KEY # приватный ssh-ключ (cat ~/.ssh/id_rsa) SSH_PASSPHRASE # кодовая фраза (пароль) для ssh-ключа TELEGRAM_TO # id телеграм-аккаунта (можно узнать у @userinfobot, команда /start) TELEGRAM_TOKEN # токен бота (получить токен можно у @BotFather, /token, имя бота)