Skip to content

Телеграм-бот для организации эко-субботников.

Notifications You must be signed in to change notification settings

margoloko/bot_delo_zhivet

 
 

Repository files navigation

Master Branch Checking with linters Deploy status
Develop Branch Checking with linters Deploy status

bot_delo_zhivet

Телеграм-бот для организации эко-субботников.

Оглавление:

  1. Установка Poetry и запуск виртуального окружения
    1. Установка Poetry
    2. Запуск виртуального окружения
    3. Потенциальные проблемы
  2. Установка pre-commit hooks
    1. Установка pre-commit
    2. Установка hooks
  3. Запуск бота на локальной машине
    1. Настройка env-файлов
    2. Запуск сервисов бота в Docker
    3. Отдельный запуск базы и применение миграций на локальной машине
  4. Подключение системы мониторинга Sentry
  5. Deprecated

Установка Poetry и запуск виртуального окружения

ℹ️ Документация Poetry

Установка Poetry

Для 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 hooks

Для того, чтобы при каждом коммите выполнялись pre-commit проверки, необходимо:

Установка 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

⬆️ Оглавление


Установка hooks

Установка хуков:

pre-commit install --all

В дальнейшем, при выполнении команды git commit будут выполняться проверки, перечисленные в файле .pre-commit-config.yaml.

Если не видно, какая именно ошибка мешает выполнить commit, можно запустить хуки вручную командой:

pre-commit run --all-files

⬆️ Оглавление


Запуск бота на локальной машине

1. Настройка env-файлов

  1. В папке infrastructure/ лежат файлы .env.X.example с константами, которые необходимо заполнить тестовыми значениями. Удалите из имени файлов .example после окончания их настройки. Инструкция и примеры значений: https://www.notion.so/env-8b7403f73b604daf90253041de4fec19

  2. Запускать бота можно в режимах polling и webhook. Для режима webhook в файле .env.telegram должны быть указаны параметры WEBHOOK_DOMAIN и WEBHOOK_PORT. Подробнее в официальном гайде Telegram.

2. Запуск сервисов бота в Docker

  1. Запустить Docker

  2. Если был запущен локальный контейнер с базой, остановить его:

docker compose -f postgres-local.yaml stop
# для остановки и удаления контейнера, тома и связей:
# docker compose -f postgres-local.yaml down
  1. Запуск сервисов бота (database, bot, flask admin, redis, celery, flower):
docker compose -f docker-compose-local.yaml up -d --build
  1. Установить миграции (и активировать Flask админ панель):
docker compose -f docker-compose-local.yaml exec bot poetry run alembic upgrade head

Смотреть заполненные заявки, прошедшие celery, можно во flower: http://localhost:5555/
Доступ к админ панели Flask: http://localhost/admin/

  1. Если Flask-admin загружается без статики - ее можно собрать. Из корневой директории проекта с активным виртуальным окружением запустите скрипт collectstatic:
python admin/manage.py collectstatic --static_folder static --overwrite

И пересоберите web-контейнер:

docker compose -f docker-compose-local.yaml up -d --build web
  1. Если 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

3. Отдельный запуск базы и применение миграций на локальной машине

  1. Запустить Docker

  2. Поднять контейнер с базой:

docker compose -f postgres-local.yaml up -d --build
  1. Применить миграции:
alembic upgrade head
  1. Если произошли изменения в моделях:

Каждую новую 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

⬆️ Оглавление


Подключение системы мониторинга Sentry

  1. Зарегистрируйтесь на платформе: https://sentry.io/signup/
  2. Подключите 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 полученное значение.
  3. Подключите Sentry к боту, выполнив для этого аналогичные шаги:
    • Создайте еще один проект, выбрав при этом платформу PYTHON.
    • В настройках проекта перейдите в раздел Client Keys, скопируйте ключ DSN.
    • Присвойте переменной SENTRY_DSN_BOT в файле .env.sentry полученное значение.

⬆️ Оглавление


Deprecated

Запуск Flask-admin

Если виртуальное окружение активно и все контейнеры из docker-compose-local.yaml запущены или запущен postgres-local.yaml:

  1. Проверить .env-файл, значение DB_HOST должно быть localhost
DB_HOST=localhost
  1. Выполнить в теринале
flask run
  1. Перейти по ссылке из терминала, ввести логин и пароль.

About

Телеграм-бот для организации эко-субботников.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 70.4%
  • HTML 26.9%
  • Shell 1.9%
  • Other 0.8%