Телеграм-бот для организации эко-субботников.
- Установка Poetry и запуск виртуального окружения
- Установка pre-commit hooks
- Запуск бота на локальной машине
- Подключение системы мониторинга Sentry
- Deprecated
Для Linux, macOS, Windows (WSL):
curl -sSL https://install.python-poetry.org | python3 -
Для Windows (Powershell):
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
В macOS и Windows сценарий установки предложит добавить папку с исполняемым файлом Poetry в переменную PATH. Сделайте это, выполнив следующую команду (не забудьте поменять {USERNAME} на имя вашего пользователя):
macOS
export PATH="/Users/{USERNAME}/.local/bin:$PATH"
Windows
$Env:Path += ";C:\Users\{USERNAME}\AppData\Roaming\Python\Scripts"; setx PATH "$Env:Path"
Проверить установку:
poetry --version
Установка автодополнений bash (опционально):
poetry completions bash >> ~/.bash_completion
🔖 Настройка окружения Poetry для PyCharm
Создание виртуального окружения:
poetry env use python3.10
Установка зависимостей (для разработки):
poetry install --with dev
Запуск оболочки и активация виртуального окружения (из папки проекта):
poetry shell
Проверка активации виртуального окружения:
poetry env list
(проверено на macOS + VSCode)
a. виртуальное окружение Poetry недоступно при выборе интерпретатора
С высокой вероятностью виртуальное окружение создалось вне папки проекта. Командой ниже можно удостовериться, что окружение будет создано внутри пути проекта:
poetry config virtualenvs.in-project true
Если проект уже был создан, придется пересоздать окружение:
poetry env list # вывести имя текущего окружения
poetry env remove <current environment> # удалить текущее окружение
poetry install --with dev # создаст новое окружение с уже с учетом нового конфига virtualenvs.in-project true
b. путь к Poetry не прописан / приходится указывать заново при переоткрытии проекта в редакторе
В зависимости от типа используемой оболочки, найдите и откройте bashrc / zshrc файл:
nano ~/.zshrc
Если в файле нет этой строки, добавьте ее и сохраните изменения (не забудьте указать свой {USERNAME}):
export PATH="/Users/{USERNAME}/.local/bin:$PATH"
Для того, чтобы при каждом коммите выполнялись pre-commit проверки, необходимо:
Модуль pre-commit уже добавлен в requirements и должен установиться вместе с виртуальным окружением автоматически.
Проверить наличие pre-commit можно командой (при активированном виртуальном окружении):
pre-commit --version
# >> pre-commit 2.21.0
Если этого не произошло, то необходимо установить pre-commit по официальной инструкции:
- установка через менеджер пакетов brew:
brew install pre-commit
- установка через poetry:
poetry add pre-commit
- установка через pip:
pip install pre-commit
Установка хуков:
pre-commit install --all
В дальнейшем, при выполнении команды git commit
будут выполняться проверки, перечисленные в файле .pre-commit-config.yaml
.
Если не видно, какая именно ошибка мешает выполнить commit, можно запустить хуки вручную командой:
pre-commit run --all-files
-
В папке infrastructure/ лежат файлы
.env.X.example
с константами, которые необходимо заполнить тестовыми значениями. Удалите из имени файлов.example
после окончания их настройки. Инструкция и примеры значений: https://www.notion.so/env-8b7403f73b604daf90253041de4fec19 -
Запускать бота можно в режимах polling и webhook. Для режима webhook в файле
.env.telegram
должны быть указаны параметры WEBHOOK_DOMAIN и WEBHOOK_PORT. Подробнее в официальном гайде Telegram.
-
Запустить Docker
-
Если был запущен локальный контейнер с базой, остановить его:
docker compose -f postgres-local.yaml stop
# для остановки и удаления контейнера, тома и связей:
# docker compose -f postgres-local.yaml down
- Запуск сервисов бота (database, bot, flask admin, redis, celery, flower):
docker compose -f docker-compose-local.yaml up -d --build
- Установить миграции (и активировать Flask админ панель):
docker compose -f docker-compose-local.yaml exec bot poetry run alembic upgrade head
Смотреть заполненные заявки, прошедшие celery, можно во flower: http://localhost:5555/
Доступ к админ панели Flask: http://localhost/admin/
- Если Flask-admin загружается без статики - ее можно собрать. Из корневой директории проекта с активным виртуальным окружением запустите скрипт collectstatic:
python admin/manage.py collectstatic --static_folder static --overwrite
И пересоберите web-контейнер:
docker compose -f docker-compose-local.yaml up -d --build web
- Если docker compose выбрасывает ошибку на стадии установки Poetry в runtime, попробуйте добавить в Dockerfile дополнительные пакеты для второй стадии сборки:
FROM python:3.11.2-alpine3.17
RUN apk update && apk add --no-cache \
gcc \
libc-dev \
libffi-dev \
libpq-dev
-
Запустить Docker
-
Поднять контейнер с базой:
docker compose -f postgres-local.yaml up -d --build
- Применить миграции:
alembic upgrade head
- Если произошли изменения в моделях:
Каждую новую autogenerate-миграцию необходимо проверить перед применением по документации, в том числе проверить выполнение следующих правил:
a) remove the create_index
statement in the upgrade()
function
b) remove the drop_index
statement in the downgrade()
function
Выставить указатель на последнюю актуальную версию базы данных:
alembic stamp head
Сформировать новую миграцию:
alembic revision --autogenerate -m "you_migration_name"
Проверить сформированную миграцию по пунктам a-b выше, если все условия учтены - применить ее:
alembic upgrade head
- Зарегистрируйтесь на платформе: https://sentry.io/signup/
- Подключите Sentry к админке, для этого:
- Создайте новый проект, выбрав при этом платформу FLASK:
https://<your-organization>-ac.sentry.io/projects/new/
- В настройках проекта перейдите в раздел Client Keys, скопируйте ключ DSN (Data Source Name):
https://<your-organization>-ac.sentry.io/settings/projects/<your-project>/keys/
- Присвойте переменной
SENTRY_DSN_ADMIN
в файле.env.sentry
полученное значение.
- Создайте новый проект, выбрав при этом платформу FLASK:
- Подключите Sentry к боту, выполнив для этого аналогичные шаги:
- Создайте еще один проект, выбрав при этом платформу PYTHON.
- В настройках проекта перейдите в раздел Client Keys, скопируйте ключ DSN.
- Присвойте переменной
SENTRY_DSN_BOT
в файле.env.sentry
полученное значение.
Если виртуальное окружение активно и все контейнеры из docker-compose-local.yaml
запущены или запущен postgres-local.yaml
:
- Проверить .env-файл, значение
DB_HOST
должно бытьlocalhost
DB_HOST=localhost
- Выполнить в теринале
flask run
- Перейти по ссылке из терминала, ввести логин и пароль.