From c19de56558790c327e290a06684a062977a21716 Mon Sep 17 00:00:00 2001 From: Maintainer Date: Wed, 14 Oct 2026 18:15:57 +0700 Subject: [PATCH] feat: verify proxy domain after deployment --- Caddyfile | 4 ++++ README.md | 3 ++- README.ru.md | 11 +++++++---- compose.quick.yml | 1 + quick-install.sh | 20 +++++++++++++++----- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/Caddyfile b/Caddyfile index 665df9c..5aaaa68 100644 --- a/Caddyfile +++ b/Caddyfile @@ -3,5 +3,9 @@ } {$TPROXY_HOSTNAME} { + @domain_check path /.well-known/telegram-web-proxy-check + header @domain_check Cache-Control "no-store" + respond @domain_check {$DOMAIN_CHECK_TOKEN} 200 + reverse_proxy proxy:8088 } diff --git a/README.md b/README.md index 3e6432f..e00b66d 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,8 @@ sudo ./quick-install.sh The script asks only for the hostname. It resolves the public IPv4 from DNS, installs Docker from Docker's official package repository, deploys the proxy and -Caddy, obtains the TLS certificate, and prints the Telegram connection values. +Caddy, obtains the TLS certificate, verifies a unique response from this exact +proxy instance, and prints the Telegram connection values. Inbound TCP ports 80 and 443 must be allowed by the VPS provider. This is a separate deployment mode and does not require Nginx Proxy Manager. diff --git a/README.ru.md b/README.ru.md index 7d1f58a..8928646 100644 --- a/README.ru.md +++ b/README.ru.md @@ -41,7 +41,8 @@ Gitea для публичного репозитория не требуются 1. установит системные компоненты и Docker из официального репозитория; 2. соберёт Telegram WEB proxy; 3. запустит Caddy и выпустит HTTPS-сертификат; -4. покажет сервер, секрет и готовую ссылку подключения. +4. проверит уникальным ответом, что домен открывает именно этот прокси; +5. покажет сервер, секрет и готовую ссылку подключения. Для автоматического запуска домен разрешается передать сразу: @@ -57,9 +58,11 @@ git pull --ff-only sudo ./quick-install.sh ``` -Если выпуск сертификата не завершился, проверьте DNS и правила входящего -трафика у провайдера VPS, затем запустите ту же команду ещё раз. Этот вариант -не использует Nginx Proxy Manager и не требует входа в какую-либо панель. +Если проверка домена или выпуск сертификата не завершились, проверьте DNS и +правила входящего трафика у провайдера VPS, затем запустите ту же команду ещё +раз. Успешная установка означает, что DNS, сертификат и ответ именно этого +экземпляра прокси проверены автоматически. Этот вариант не использует Nginx +Proxy Manager и не требует входа в какую-либо панель. Остановить быструю установку, не удаляя секрет и сертификат: diff --git a/compose.quick.yml b/compose.quick.yml index d893f97..055afe4 100644 --- a/compose.quick.yml +++ b/compose.quick.yml @@ -8,6 +8,7 @@ services: condition: service_healthy environment: TPROXY_HOSTNAME: ${TPROXY_HOSTNAME:?set by quick-install.sh} + DOMAIN_CHECK_TOKEN: ${DOMAIN_CHECK_TOKEN:?set by quick-install.sh} ports: - "80:80" - "443:443" diff --git a/quick-install.sh b/quick-install.sh index ea8e219..75d18f8 100755 --- a/quick-install.sh +++ b/quick-install.sh @@ -202,6 +202,9 @@ if ! docker network inspect "$edge_network" >/dev/null 2>&1; then docker network create "$edge_network" >/dev/null fi +domain_check_token="$(od -An -N16 -tx1 /dev/urandom | tr -d '[:space:]')" +[[ "$domain_check_token" =~ ^[0-9a-f]{32}$ ]] || fail "не удалось создать маркер проверки домена" + environment_file="$repository/.env" temporary_environment="$(mktemp "$repository/.env.new.XXXXXX")" trap 'rm -f "$temporary_environment"' EXIT @@ -209,6 +212,7 @@ cat >"$temporary_environment" </dev/null 2>&1; then + "$domain_check_url" 2>/dev/null || true)" + if [[ "$domain_check_response" == "$domain_check_token" ]] && + curl --fail --silent --show-error \ + --connect-timeout 5 --max-time 15 \ + --proto '=https' --tlsv1.2 \ + "https://$domain_value/" >/dev/null 2>&1; then https_ready=true break fi @@ -268,7 +278,7 @@ printf '\n' if [[ "$https_ready" != true ]]; then docker logs --tail 100 tg-web-proxy-caddy >&2 || true cat >&2 <