andy-takker / yandex-backend-school-2022

The test task of the second stage to the Yandex Backend Development School

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Задание на школу Бэкенд Разработки Яндекс

Бэкенд сервис на Python: FastAPI + PyDantic + SqlAlchemy + Alembic + Docker

Запуск проекта

Зависимости (python-пакеты) лежат в файле products/requiremets.txt

pip install -r app/requirements.txt

Переменные окружения

При развертывании создайте в корне проекта файл с переменными окружения. По умолчанию его название .env, но можно переопределить при запуске приложения

ENV_FILE=your_File.env python main.py

В этом файле объявите следующие переменные

POSTGRES_USER=user
POSTGRES_PASSWORD=passwd
POSTGRES_DB=backend
POSTGRES_HOST=database_host
POSTGRES_PORT=database_port

DEBUG=False
SERVER_NAME=Your Server Name
PROJECT_NAME="Backend School"

Команды запуска

Uvicorn Way

Для запуска с помощью wsgi Uvicorn внутри папки products выполните

python main.py

или

ENV_FILE=.env python main.py

Gunicorn Way

Для обработки большего числа запросов на одном сервере можно использовать связку Gunicorn + Uvicorn для запуска через Gunicorn воркеров из Uvicorn'а.

gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8080

Docker Compose Way

Перед запуском через Docker Compose также необходимо создать файл с переменными окружения .env или экспортировать их в среду.

ВАЖНО: Для правильной работы в docker-compose без внешнего порта для БД, назначьте POSTGRES_HOST=database.

Для запуска проекта со всеми сервисами одновременно необходимо выполнить

docker-compose  up --build -d

Миграции

Управление версиями БД осуществляется с помощью пакета alembic.

Создание миграции

Для автоматического создания миграции при изменении схемы нужно выполнить

alembic revision --autogenerate -m "Name of migration"

Применение миграций

Для обновления/инициализации таблиц через миграции выполните внутри папки products команду

alembic upgrade head

About

The test task of the second stage to the Yandex Backend Development School


Languages

Language:Python 95.7%Language:Dockerfile 1.8%Language:Mako 1.7%Language:Shell 0.9%