Эта установка нужна для запуска бэкенда локально и запуска форматеров, линтеров и тайп чекеров перед каждым коммитом. Для корректной работы требуется Python 3.11
pip install poetry==1.4.1
poetry install
pre-commit install
Сначала нужно запустить зависимости (нужен настроенный docker):
docker compose up -d
Запуск бэкенда локально:
uvicorn app.main:app --port 5100 --reload
Остановить зависимости:
docker compose down
После запуска приложения становятся доступны следующие порты и ссылки:
5432
: порт для подключения к базе данных PostgreSQL5672
: порт для подключения к брокеру сообщений RabbitMQhttp://localhost:15672
: management-консоль для RabbitMQ (логин и пароль: guest)http://localhost:5100
: автоматическая OpenAPI-документация основного приложения
Этот раздел для тех, кто хочет запустить supbot-а локально. В целом можно использовать стейджинг для тестирования бота, но тогда тестирование станет последним этапом, после миграций и тестов. API можно запускать и без бота, тесты (в том числе тесты бота) будут работать локально даже без настроек ниже
Итак, настроить себе тестовое окружение локально не слишком сложно:
- Создать себе бота для локального тестирования через @BotFather
- Создать приватный канал в телеграмме также для тестирования, добавить туда своего бота администратором
- В настройках каналов найти "Добавить Обсуждение" / "Add Discussion" и создать там новую приватную группу
- Разрешить добавлять бота в группы, если не разрешено (BotFather > /mybots > BOT > Bot Settings > Allow Groups? > Turn on)
- Выключить у бота "Group Privacy", если включена (BotFather > /mybots > BOT > Bot Settings > Group Privacy > Turn off)
- Добавить бота в группу (важно сделать это именно после шагов 4-5, иначе нужно выгнать бота и добавить заново)
- Если хочется, можно теперь запретить добавлять бота в группы, т.е. отменить шаг 4 (шаг 5 отменять нельзя)
- Дальше настраиваем переменные окружения в файле
.env
(не заливать в git!):SUPBOT_POLLING
включить polling (поставить значение"1"
), чтобы не тыкаться с webhook-омSUPBOT_TOKEN
это токен бота, созданного на первом этапеSUPBOT_GROUP_ID
это id группы, в которую добавлен бот (id можно получить переслав сообщение из группы боту (начинается с -100))SUPBOT_CHANNEL_ID
это id канала, в который добавлен бот (id можно получить переслав сообщение из канала боту (начинается с -100))
Пример .env
-файла:
SUPBOT_POLLING=1
SUPBOT_TOKEN=0000000000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SUPBOT_GROUP_ID=-100123456
SUPBOT_CHANNEL_ID=-100123456
После всех настроек можно запускать приложение, как сказано в инструкции выше. Важно использовать --port 5100
, а если хочется использовать иной порт, то его нужно указать в переменной SUPBOT_WEBHOOK_URL
в .env
, например, так:
SUPBOT_WEBHOOK_URL=http://localhost:8000
- Python
- FastAPI
- SQLAlchemy 2.0
- RabbitMQ (soon)
- Poetry
- Linters (flake8, wemake-style-guide, mypy)
- Formatters (black, autoflake)
- Pre-commit
- Pytest
Версии можно найти в pyproject.toml
mq
: локальный брокер RabbitMQ, сбрасывается при рестартеdb
: локальная база данных PostgreSQL для тестов и проверок, сбрасывается при рестартеalembic
: специальный контейнер для работы с миграциями, работает только с--profile migration
app
: докеризированное приложение основного API сервиса, сделано для полных проверок и работает только с--profile app
# запустить все вспомогательные сервисы для локальной разработки
docker compose up -d
# выключить обратно
docker compose down
# тоже самое, но вместе с докеризированным приложением
docker compose --profile app up -d
docker compose --profile app down
# смотреть логи в реальном времени
docker compose logs --follow <сервис>
docker compose logs --follow mq # пример
# проверить статусы сервисов
docker compose ps -a
# зайти в какой-то контейнер
docker compose exec -ti <сервис> <shell-команда>
docker compose exec -ti db psql -U test -d test # пример
Используется для автосоздания миграций БД. Запуск вспомогательного контейнера для миграций:
docker compose run --build --rm -ti alembic
Команды для самих миграций:
alembic upgrade head
alembic revision --autogenerate -m "<message>" --rev-id "<issue>"
Сбросить базу или просто завершить работу с миграциями:
docker compose --profile migration down