DEPLOY_HOST, RELAY_HOST и TELEGRAM_BOT_ID обязательны и читаются из неотслеживаемого deploy/.env.local (образец — .env.local.example).
33 lines
2.2 KiB
Bash
Executable File
33 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Ставит ретранслятор Bot API на домашний сервер. Запускать локально из корня:
|
||
# deploy/tg-relay/deploy.sh (TELEGRAM_BOT_ID и RELAY_HOST — в deploy/.env.local)
|
||
# RELAY_HOST — ssh-адрес домашнего сервера, RELAY_BIND — адрес Tailscale хоста (по умолчанию его tailscale ip -4).
|
||
# Токен бота сюда не нужен: ретранслятор только пересылает запросы.
|
||
set -euo pipefail
|
||
|
||
# адреса серверов в репо не храним: deploy/.env.local (образец — deploy/.env.local.example)
|
||
# shellcheck source=/dev/null
|
||
[[ -f "$(dirname "$0")/../.env.local" ]] && source "$(dirname "$0")/../.env.local"
|
||
RELAY_HOST="${RELAY_HOST:?задайте RELAY_HOST в deploy/.env.local (см. deploy/.env.local.example)}"
|
||
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"
|