From 2303515cb7c2005c2f18ad77142ea966b5a87773 Mon Sep 17 00:00:00 2001 From: YuraBombitel1 Date: Wed, 12 Aug 2026 14:37:31 +0300 Subject: [PATCH] add infra --- .gitignore | 6 ++++ README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + support-bot.service | 24 +++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 requirements.txt create mode 100644 support-bot.service diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c26619a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +*.pyc +.venv/ +venv/ +*.db +support-bot.env.local diff --git a/README.md b/README.md new file mode 100644 index 0000000..212eb3b --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# StreamHelp support bot + +Telegram-бот поддержки: пересылает сообщения клиентов в чат поддержки, ответ +оператора реплаем на сообщение клиента копируется обратно клиенту. Маппинг +"сообщение в чате поддержки → чат клиента" хранится в SQLite. + +## Деплой (systemd, Linux) + +```bash +# 1. Системный пользователь без shell/home +sudo useradd --system --no-create-home --shell /usr/sbin/nologin support-bot + +# 2. Код +sudo mkdir -p /opt/support-bot +sudo cp support_bot.py requirements.txt /opt/support-bot/ +cd /opt/support-bot +sudo python3 -m venv .venv +sudo ./.venv/bin/pip install -r requirements.txt + +# 3. Конфиг — реальные значения, не то, что лежит в репозитории +sudo cp support-bot.env /etc/support-bot.env +sudo nano /etc/support-bot.env # BOT_TOKEN и SUPPORT_CHAT_ID +sudo chown support-bot:support-bot /etc/support-bot.env +sudo chmod 600 /etc/support-bot.env # там токен бота + +# 4. Каталог под БД +sudo mkdir -p /var/lib/support-bot +sudo chown support-bot:support-bot /var/lib/support-bot + +# 5. Владелец кода +sudo chown -R support-bot:support-bot /opt/support-bot + +# 6. systemd +sudo cp support-bot.service /etc/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl enable --now support-bot +``` + +## Проверка + +```bash +sudo systemctl status support-bot +sudo journalctl -u support-bot -f +``` + +Отправь `/start` боту в личку — должен прийти шаблонный текст. Затем отправь +любое сообщение — оно должно появиться в чате поддержки (`SUPPORT_CHAT_ID`). +Ответь на него реплаем из чата поддержки — ответ должен прийти клиенту. + +## Как получить SUPPORT_CHAT_ID + +Добавь бота в чат поддержки, напиши туда любое сообщение и открой: +`https://api.telegram.org/bot/getUpdates` — `chat.id` в ответе и есть +нужное значение (для групп обычно отрицательное число). + +## Обновление кода + +```bash +cd /opt/support-bot +sudo -u support-bot ./.venv/bin/pip install -r requirements.txt # если менялись зависимости +sudo systemctl restart support-bot +``` + +## Файлы + +- `support_bot.py` — сам бот. +- `support-bot.env` — **шаблон** конфига (в репозитории), реальный экземпляр + живёт в `/etc/support-bot.env` на сервере и в git не попадает. +- `support-bot.service` — systemd unit. +- `requirements.txt` — зависимости (`python-telegram-bot` — используется + async API v20+, более старые версии несовместимы с кодом). diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..acbc4c7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +python-telegram-bot==22.8 diff --git a/support-bot.service b/support-bot.service new file mode 100644 index 0000000..de5083b --- /dev/null +++ b/support-bot.service @@ -0,0 +1,24 @@ +[Unit] +Description=StreamHelp support Telegram bot +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=support-bot +Group=support-bot +WorkingDirectory=/opt/support-bot +ExecStart=/opt/support-bot/.venv/bin/python /opt/support-bot/support_bot.py +Restart=on-failure +RestartSec=5 + +# Файлы, которые сервису реально нужно трогать за пределами WorkingDirectory. +ReadWritePaths=/var/lib/support-bot + +NoNewPrivileges=true +ProtectSystem=strict +ProtectHome=true +PrivateTmp=true + +[Install] +WantedBy=multi-user.target