С VPS api.telegram.org недоступен. deploy/tg-relay: nginx на адресе Tailscale домашнего сервера, пропускает только запросы нашего бота из tailnet, без логов доступа (токен в URL). api: базовый URL Bot API из TELEGRAM_API_BASE; сетевые сбои polling пишутся в лог раз в 10 минут.
30 lines
1.8 KiB
Bash
Executable File
30 lines
1.8 KiB
Bash
Executable File
#!/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"
|