add infra
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
*.db
|
||||||
|
support-bot.env.local
|
||||||
@@ -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<TOKEN>/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+, более старые версии несовместимы с кодом).
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
python-telegram-bot==22.8
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user