add deploy
This commit is contained in:
@@ -4,61 +4,52 @@ Telegram-бот поддержки: пересылает сообщения кл
|
|||||||
оператора реплаем на сообщение клиента копируется обратно клиенту. Маппинг
|
оператора реплаем на сообщение клиента копируется обратно клиенту. Маппинг
|
||||||
"сообщение в чате поддержки → чат клиента" хранится в SQLite.
|
"сообщение в чате поддержки → чат клиента" хранится в SQLite.
|
||||||
|
|
||||||
## Деплой (systemd, Linux)
|
## Быстрый деплой (screen)
|
||||||
|
|
||||||
|
Один скрипт: качает репозиторий прямо в `/opt/support-bot` (без вложенных
|
||||||
|
папок), ставит зависимости в venv, поднимает бота в screen-сессии.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Системный пользователь без shell/home
|
curl -fsSL https://git.twitchmagic.pro/AdministratorEbaka1337/streamhelp-bot/raw/main/deploy.sh | bash
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Проверка
|
Первый запуск остановится на заполнении `/etc/support-bot.env` — впиши туда
|
||||||
|
`BOT_TOKEN` и `SUPPORT_CHAT_ID` (см. ниже, как достать) и прогони скрипт ещё
|
||||||
|
раз. Каждый следующий запуск сам подтягивает свежий код и перезапускает
|
||||||
|
screen-сессию — этим же скриптом обновляешь бота при новом деплое.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl status support-bot
|
screen -r support-bot # посмотреть логи/вывод бота
|
||||||
sudo journalctl -u support-bot -f
|
# Ctrl+A, D — выйти из сессии, не убивая бота
|
||||||
```
|
```
|
||||||
|
|
||||||
Отправь `/start` боту в личку — должен прийти шаблонный текст. Затем отправь
|
|
||||||
любое сообщение — оно должно появиться в чате поддержки (`SUPPORT_CHAT_ID`).
|
|
||||||
Ответь на него реплаем из чата поддержки — ответ должен прийти клиенту.
|
|
||||||
|
|
||||||
## Как получить SUPPORT_CHAT_ID
|
## Как получить SUPPORT_CHAT_ID
|
||||||
|
|
||||||
Добавь бота в чат поддержки, напиши туда любое сообщение и открой:
|
Добавь бота в чат поддержки, напиши туда любое сообщение и открой:
|
||||||
`https://api.telegram.org/bot<TOKEN>/getUpdates` — `chat.id` в ответе и есть
|
`https://api.telegram.org/bot<TOKEN>/getUpdates` — `chat.id` в ответе и есть
|
||||||
нужное значение (для групп обычно отрицательное число).
|
нужное значение (для групп обычно отрицательное число).
|
||||||
|
|
||||||
## Обновление кода
|
## Проверка
|
||||||
|
|
||||||
|
Отправь `/start` боту в личку — должен прийти шаблонный текст. Затем отправь
|
||||||
|
любое сообщение — оно должно появиться в чате поддержки (`SUPPORT_CHAT_ID`).
|
||||||
|
Ответь на него реплаем из чата поддержки — ответ должен прийти клиенту.
|
||||||
|
|
||||||
|
## Альтернатива: systemd
|
||||||
|
|
||||||
|
Для постоянной эксплуатации (автозапуск при перезагрузке, автоперезапуск при
|
||||||
|
падении, отдельный системный пользователь) в репозитории есть готовый unit —
|
||||||
|
`support-bot.service`. Тот же `deploy.sh` кладёт код и venv в `/opt/support-bot`,
|
||||||
|
дальше:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/support-bot
|
sudo useradd --system --no-create-home --shell /usr/sbin/nologin support-bot
|
||||||
sudo -u support-bot ./.venv/bin/pip install -r requirements.txt # если менялись зависимости
|
sudo chown -R support-bot:support-bot /opt/support-bot /var/lib/support-bot
|
||||||
sudo systemctl restart support-bot
|
sudo chown support-bot:support-bot /etc/support-bot.env
|
||||||
|
sudo cp /opt/support-bot/support-bot.service /etc/systemd/system/
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable --now support-bot
|
||||||
|
sudo journalctl -u support-bot -f
|
||||||
```
|
```
|
||||||
|
|
||||||
## Файлы
|
## Файлы
|
||||||
@@ -66,6 +57,7 @@ sudo systemctl restart support-bot
|
|||||||
- `support_bot.py` — сам бот.
|
- `support_bot.py` — сам бот.
|
||||||
- `support-bot.env` — **шаблон** конфига (в репозитории), реальный экземпляр
|
- `support-bot.env` — **шаблон** конфига (в репозитории), реальный экземпляр
|
||||||
живёт в `/etc/support-bot.env` на сервере и в git не попадает.
|
живёт в `/etc/support-bot.env` на сервере и в git не попадает.
|
||||||
- `support-bot.service` — systemd unit.
|
- `deploy.sh` — деплой в screen (клонирует/обновляет, venv, зависимости, запуск).
|
||||||
|
- `support-bot.service` — systemd unit, для постоянной эксплуатации.
|
||||||
- `requirements.txt` — зависимости (`python-telegram-bot` — используется
|
- `requirements.txt` — зависимости (`python-telegram-bot` — используется
|
||||||
async API v20+, более старые версии несовместимы с кодом).
|
async API v20+, более старые версии несовместимы с кодом).
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Мобильный деплой support-бота: скачивает репозиторий прямо в целевую папку
|
||||||
|
# (без вложенной "streamhelp-support-bot/streamhelp-support-bot"), ставит
|
||||||
|
# зависимости и поднимает бота в screen-сессии. Повторный запуск обновляет код
|
||||||
|
# и перезапускает сессию — можно гонять этот скрипт при каждом деплое.
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# curl -fsSL https://.../deploy.sh | bash
|
||||||
|
# или руками на сервере:
|
||||||
|
# ./deploy.sh
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_URL="https://git.twitchmagic.pro/AdministratorEbaka1337/streamhelp-bot.git"
|
||||||
|
APP_DIR="/opt/support-bot"
|
||||||
|
ENV_FILE="/etc/support-bot.env"
|
||||||
|
DB_DIR="/var/lib/support-bot"
|
||||||
|
SESSION="support-bot"
|
||||||
|
|
||||||
|
command -v screen >/dev/null || { echo "Нужен screen: apt install -y screen (или yum/dnf)"; exit 1; }
|
||||||
|
command -v python3 >/dev/null || { echo "Нужен python3"; exit 1; }
|
||||||
|
command -v git >/dev/null || { echo "Нужен git"; exit 1; }
|
||||||
|
|
||||||
|
# Клонируем прямо в APP_DIR — без "git clone REPO APP_DIR/streamhelp-bot".
|
||||||
|
if [ -d "$APP_DIR/.git" ]; then
|
||||||
|
git -C "$APP_DIR" pull --ff-only
|
||||||
|
else
|
||||||
|
mkdir -p "$APP_DIR"
|
||||||
|
git clone "$REPO_URL" "$APP_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$APP_DIR"
|
||||||
|
|
||||||
|
python3 -m venv .venv --upgrade-deps >/dev/null 2>&1 || python3 -m venv .venv
|
||||||
|
./.venv/bin/pip install -q -r requirements.txt
|
||||||
|
|
||||||
|
mkdir -p "$DB_DIR"
|
||||||
|
|
||||||
|
if [ ! -f "$ENV_FILE" ]; then
|
||||||
|
cp support-bot.env "$ENV_FILE"
|
||||||
|
chmod 600 "$ENV_FILE"
|
||||||
|
echo "!!! Заполни $ENV_FILE (BOT_TOKEN, SUPPORT_CHAT_ID) и запусти скрипт снова."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -q "ВСТАВЬ_СЮДА_ТОКЕН_БОТА" "$ENV_FILE" || grep -q "SUPPORT_CHAT_ID=0" "$ENV_FILE"; then
|
||||||
|
echo "!!! $ENV_FILE ещё не заполнен реальными значениями — заполни и перезапусти."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Пересоздаём screen-сессию: убиваем старую (если есть) и поднимаем свежую.
|
||||||
|
screen -S "$SESSION" -X quit >/dev/null 2>&1 || true
|
||||||
|
screen -dmS "$SESSION" "$APP_DIR/.venv/bin/python" "$APP_DIR/support_bot.py"
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
if screen -list | grep -q "\.$SESSION"; then
|
||||||
|
echo "Бот запущен в screen-сессии '$SESSION'. Смотреть: screen -r $SESSION (выход из сессии — Ctrl+A, D)."
|
||||||
|
else
|
||||||
|
echo "!!! Сессия не поднялась — смотри вывод вручную: cd $APP_DIR && ./.venv/bin/python support_bot.py"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user