«Фудграм» — сайт, на котором зарегистрированные пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Пользователям сайта также доступен сервис «Список покупок». Он позволяет создавать список продуктов, которые нужно купить для приготовления выбранных блюд. Незарегистрированным пользователям доступен просмотр списка рецептов или отдельного рецепта.
- Python
- Django
- Django rest framework
- Djoser
- Gunicorn
- Docker
К проекту подключена база PostgreSQL. Для тестирования подключена база SQLite. Предусмотрена автоматическая упаковка частей проекта(backend, frontend, gateway, db) в образы с помощью Docker и размещение их в удаленном репозитории на DockerHub, а также автоматизация деплоя на удаленный сервер с помощью GitHub actions. На удаленном сервере установлена операционная система Ubuntu. Доступна документация API.
git clone git@github.com:Svetlana-Zimina/foodgram-project-react.git
Команда для установки виртуального окружения на Mac или Linux:
python3 -m venv env
source env/bin/activate
Команда для установки виртуального окружения на Windows:
python -m venv venv
source venv/Scripts/activate
cd backend
pip install -r requirements.txt
python manage.py migrate
python manage.py import_ingredients
python manage.py createsuperuser
python manage.py runserver
-
Установите docker согласно инструкции
Пользователям Windows нужно будет подготовить систему, установить для неё ядро Linux — и после этого установить Docker.
docker-compose up
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py import_ingredients
docker compose exec backend python manage.py createsuperuser
docker compose exec backend python manage.py collectstatic
cd infra/
docker-compose up
Документация будет доступна по адресу: http://localhost/api/docs/
Important
При выпуске проекта в продакшн необходимо, чтобы DEBUG = False и переменная DATABASE_ENV=prod (чтобы подключилась база Postgre)
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
sudo mkdir foodgram
cd foodgram
sudo touch docker-compose.production.yml
sudo nano docker-compose.production.yml
sudo nano /etc/nginx/sites-enabled/default
sudo nginx -t
sudo service nginx reload
sudo docker compose -f docker-compose.production.yml pull
sudo docker compose -f docker-compose.production.yml down
sudo docker compose -f docker-compose.production.yml up -d
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 import_ingredients
sudo docker compose -f docker-compose.production.yml exec backend python manage.py collectstatic --noinput
sudo docker system prune -a
Если необходимо создать суперпользователя:
sudo docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser
Предусмотрен автоматический деплой проекта на сервер с помощью GitHub actions. Для этого описан workflow файл: .github/workflows/main.yml После деплоя в проекте предусмотрена отправка смс в телеграм чат. Код чат-бота находится в репозитории homework_bot
git add .
git commit -m 'комментарий'
git push
GitHub actions выполнит необходимые команды из workflow файла - контейнеры на удаленном сервере перезапустятся.
sudo docker compose -f docker-compose.production.yml exec backend python manage.py import_ingredients
DOCKER_PASSWORD=<пароль от DockerHub>
DOCKER_USERNAME=<имя пользователя DockerHub>
HOST=<ip сервера>
POSTGRES_DB=<название базы данных>
POSTGRES_PASSWORD=<пароль к базе данных>
POSTGRES_USER=<пользователь базы данных>
SSH_KEY=<ваш приватный SSH-ключ (для получения команда: cat ~/.ssh/id_rsa)>
SSH_PASSPHRASE=<пароль для сервера, если есть>
USER=<username для подключения к удаленному серверу>
TELEGRAM_TO=<id вашего Телеграм-аккаунта>
TELEGRAM_TOKEN=<токен вашего бота>
ДоменВашегоСайта/api/docs/
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
Important
Эта команда запускает процесс оформления сертификата именно для Nginx, отсюда и аргумент --nginx. Если вы работаете с другим веб-сервером, то аргумент должен быть другим.
В процессе оформления сертификата вам нужно будет указать свою электронную почту и ответить на несколько вопросов. Далее система оповестит вас о том, что учётная запись зарегистрирована и попросит указать имена, для которых вы хотели бы активировать HTTPS.
sudo systemctl reload nginx
Светлана Зимина https://github.com/Svetlana-Zimina