feat: ретранслятор Bot API на домашнем сервере и TELEGRAM_API_BASE

С VPS api.telegram.org недоступен. deploy/tg-relay: nginx на адресе
Tailscale домашнего сервера, пропускает только запросы нашего бота из
tailnet, без логов доступа (токен в URL). api: базовый URL Bot API из
TELEGRAM_API_BASE; сетевые сбои polling пишутся в лог раз в 10 минут.
This commit is contained in:
2026-10-17 16:56:52 +03:00
parent 55ecf7c9d8
commit 66d69c1245
9 changed files with 99 additions and 4 deletions
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Ставит ретранслятор Bot API на домашний сервер. Запускать локально из корня:
# TELEGRAM_BOT_ID=8959389487 deploy/tg-relay/deploy.sh
# RELAY_HOST (по умолчанию nick@192.168.100.50), RELAY_BIND — адрес Tailscale хоста (по умолчанию его tailscale ip -4).
# Токен бота сюда не нужен: ретранслятор только пересылает запросы.
set -euo pipefail
RELAY_HOST="${RELAY_HOST:-nick@192.168.100.50}"
RELAY_PATH="${RELAY_PATH:-/home/nick/home_server/kvarta_tg_relay}"
: "${TELEGRAM_BOT_ID:?задайте TELEGRAM_BOT_ID — числовая часть токена до двоеточия}"
[[ $TELEGRAM_BOT_ID =~ ^[0-9]+$ ]] || { echo "TELEGRAM_BOT_ID — только цифры" >&2; exit 1; }
cd "$(dirname "$0")"
SSH=(ssh -o BatchMode=yes -o ConnectTimeout=10 "$RELAY_HOST")
RELAY_BIND="${RELAY_BIND:-$("${SSH[@]}" 'tailscale ip -4 2>/dev/null | head -1')}"
[[ -n $RELAY_BIND ]] || { echo "у $RELAY_HOST нет адреса Tailscale: выполните там «sudo tailscale up» или задайте RELAY_BIND" >&2; exit 1; }
echo "[1] файлы → $RELAY_HOST:$RELAY_PATH"
"${SSH[@]}" "mkdir -p $RELAY_PATH"
scp -q -o BatchMode=yes docker-compose.yml default.conf.template "$RELAY_HOST:$RELAY_PATH/"
"${SSH[@]}" "printf 'TELEGRAM_BOT_ID=%s\nRELAY_BIND=%s\nALLOW_FROM=%s\n' '$TELEGRAM_BOT_ID' '$RELAY_BIND' '${ALLOW_FROM:-100.64.0.0/10}' > $RELAY_PATH/.env"
echo "[2] запуск на $RELAY_BIND:8788"
"${SSH[@]}" "cd $RELAY_PATH && docker compose up -d --force-recreate"
echo "[3] проверка: чужой путь → 404"
"${SSH[@]}" "curl -s -o /dev/null -w '%{http_code}\n' http://$RELAY_BIND:8788/"
echo "Готово. В api.env на VPS: TELEGRAM_API_BASE=http://$RELAY_BIND:8788"