- docker
- docker compose
- python 3.8+ (опционально, для локального запуска pytest/flake8/mypy)
- poetry (опционально, для локального запуска pytest/flake8/mypy)
Перед запуском контейнеров, необходимо убедиться, что в корневой директории проекта присутствует файл .env, в котором заполнены все необходимые переменные окружения.
Названия этих переменных можно посмотреть в .env.example
Подробное описание переменных окружения
Название проекта
Режим отладки
0 - выключен
1 - включен
Если включен, то:
- 500 ошибки сервера не будут обработаны обработчиком исключений
- В логах будут отображаться запросы в БД, генерируемые в рамках запроса
Режим прод окружения
0 - выключен
1 - включен
Если выключен, то:
- Будет доступна документация swagger-ui/redoc
- Работа с платежными системами будет работать в боевом режиме
- Чувствительные данные будут исключены из логов
Путь к директории, в которой хранятся медиа-файлы
Префикс в ссылке для медиа-файлов
Путь к директории, в которой хранятся статические файлы
Префикс в ссылке для статических-файлов
Путь к директории, в которой хранятся лог-файлы
REDIS_HOST должен соответствовать названию сервиса Redis из compose конфигурации
REDIS_PORT - любой доступный на хосте порт
docker-compose -f docker-compose.local.yml upили
make localupПосле запуска проект будет доступен по адресу http://localhost:.../
docker-compose -f docker-compose.develop.yml upили
make developupПроект станет доступен по порту ...
В локальном окружении достаточно перейти по адресу http://localhost:.../
В другом окружении необходимо настроить домен, при обращении к которому веб-сервер (Nginx/Apache) будет проксировать все запросы на порт ...
Если на хосте установлена docker compose версии >2, то может возникнуть ошибка синтаксиса команды. В таком случае в командах выше нужно заменить
docker-composeна
docker compose- Используемый язык программирования —
Python ... - Используемый фреймворк —
FastAPI ... - Используемый инструмент для реализации PubSub —
Redis ...
uvicorn (...)— HTTP-сервер для FastAPIredis (...)— библиотека для работы с Redis в Pythonwebsockets (...)- библиотека для работы с websocket-соединениямиJSON-log-formatter (...)— библиотека для форматирования логов в JSON-форматеdependency-injector (...)— библиотека для внедрения зависимостей (DI)pytest (...)— библиотека для тестированияpytest-cov (...)— библиотека для оценки покрытия кода тестами через pytestpytest-mock (...)— библиотека для мока зависимостей через pytestpytest-timeout (...)— библиотека для ограничения времени выполнения тестов через pytestpytest-asyncio (...)— библиотека для тестирования асинхронного кодаconcurrent-log-handler (...)— библиотека для последовательной записи логов в файлы при запуске веб приложения через несколько воркеров (как в uvicorn)mypy (...)— статический анализатор типовflake8 (...)— инструмент линтинга для Pythonblack (...)— библиотека для форматирования кода на языке Pythonisort (...)- библиотека для сортировки импортов
-
Зайти в контейнер
asgiчерез командуdocker exec -it asgi bash -
Начать выполнение тестов через команду
pytest
или
make testПри таком запуске тесты, в которых тестируется работа с БД, выполнятся с ошибкой
При ошибке выполнения команды запустите тесты внутри Docker-контейнера
-
Перейти в директорию с конфигурационным файлом
-
Начать выполнение тестов через команду
poetry run pytest
-
Зайти в контейнер
asgiчерез командуdocker exec -it asgi bash -
Начать выполнение flake8 через команду
flake8 .
или
make flake8-
Перейти в директорию с конфигурационным файлом
-
Начать выполнение flake8 через команду
poetry run flake8 .
-
Зайти в контейнер
asgiчерез командуdocker exec -it asgi bash -
Начать выполнение mypy через команду
mypy .
или
make mypyПри возникновении ошибок запуск возможен только внутри Docker-контейнера
-
Перейти в директорию с конфигурационным файлом
-
Начать выполнение mypy через команду
poetry run mypy .
docker exec -it asgi alembic revision -m "Message"или
make makemigrations MESSAGE="Message"docker exec -it asgi alembic upgrade headили
make migrateПри разработке рекомендуется использовать black, чтобы поддерживать чистоту кода и избегать лишних изменений при работе с гитом.
Пример конфигурационного файла для Visual Studio Code .vscode/settings.json:
{
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
}
}При разработке рекомендуется использовать pre-commit, чтобы перед формированием МР код был уже подготовленным и поверхностно проверенным (например, через flake8)
Для использования должны быть установлены dev-зависимости
Установка
poetry run pre-commit installУдаление
poetry run pre-commit uninstallПосле установки, при каждом коммите будут отрабатывать хуки из конфигурационного файла, предназначенные для коммитов (stages: [commit])
Установка
poetry run pre-commit install --hook-type pre-pushУдаление
poetry run pre-commit uninstall -t pre-pushПосле установки, при каждом пуше будут отрабатывать хуки из конфигурационного файла, предназначенные для пушей (stages: [push])