feat: verify proxy domain after deployment

This commit is contained in:
Maintainer
2026-10-14 18:15:57 +07:00
parent 7ebde9cff4
commit c19de56558
5 changed files with 29 additions and 10 deletions
+4
View File
@@ -3,5 +3,9 @@
} }
{$TPROXY_HOSTNAME} { {$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 reverse_proxy proxy:8088
} }
+2 -1
View File
@@ -54,7 +54,8 @@ sudo ./quick-install.sh
The script asks only for the hostname. It resolves the public IPv4 from DNS, 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 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 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. separate deployment mode and does not require Nginx Proxy Manager.
+7 -4
View File
@@ -41,7 +41,8 @@ Gitea для публичного репозитория не требуются
1. установит системные компоненты и Docker из официального репозитория; 1. установит системные компоненты и Docker из официального репозитория;
2. соберёт Telegram WEB proxy; 2. соберёт Telegram WEB proxy;
3. запустит Caddy и выпустит HTTPS-сертификат; 3. запустит Caddy и выпустит HTTPS-сертификат;
4. покажет сервер, секрет и готовую ссылку подключения. 4. проверит уникальным ответом, что домен открывает именно этот прокси;
5. покажет сервер, секрет и готовую ссылку подключения.
Для автоматического запуска домен разрешается передать сразу: Для автоматического запуска домен разрешается передать сразу:
@@ -57,9 +58,11 @@ git pull --ff-only
sudo ./quick-install.sh sudo ./quick-install.sh
``` ```
Если выпуск сертификата не завершился, проверьте DNS и правила входящего Если проверка домена или выпуск сертификата не завершились, проверьте DNS и
трафика у провайдера VPS, затем запустите ту же команду ещё раз. Этот вариант правила входящего трафика у провайдера VPS, затем запустите ту же команду ещё
не использует Nginx Proxy Manager и не требует входа в какую-либо панель. раз. Успешная установка означает, что DNS, сертификат и ответ именно этого
экземпляра прокси проверены автоматически. Этот вариант не использует Nginx
Proxy Manager и не требует входа в какую-либо панель.
Остановить быструю установку, не удаляя секрет и сертификат: Остановить быструю установку, не удаляя секрет и сертификат:
+1
View File
@@ -8,6 +8,7 @@ services:
condition: service_healthy condition: service_healthy
environment: environment:
TPROXY_HOSTNAME: ${TPROXY_HOSTNAME:?set by quick-install.sh} TPROXY_HOSTNAME: ${TPROXY_HOSTNAME:?set by quick-install.sh}
DOMAIN_CHECK_TOKEN: ${DOMAIN_CHECK_TOKEN:?set by quick-install.sh}
ports: ports:
- "80:80" - "80:80"
- "443:443" - "443:443"
+14 -4
View File
@@ -202,6 +202,9 @@ if ! docker network inspect "$edge_network" >/dev/null 2>&1; then
docker network create "$edge_network" >/dev/null docker network create "$edge_network" >/dev/null
fi 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" environment_file="$repository/.env"
temporary_environment="$(mktemp "$repository/.env.new.XXXXXX")" temporary_environment="$(mktemp "$repository/.env.new.XXXXXX")"
trap 'rm -f "$temporary_environment"' EXIT trap 'rm -f "$temporary_environment"' EXIT
@@ -209,6 +212,7 @@ cat >"$temporary_environment" <<ENV
TPROXY_HOSTNAME=$domain_value TPROXY_HOSTNAME=$domain_value
MTPROXY_PUBLIC_IP=$public_ip MTPROXY_PUBLIC_IP=$public_ip
NPM_NETWORK_NAME=$edge_network NPM_NETWORK_NAME=$edge_network
DOMAIN_CHECK_TOKEN=$domain_check_token
MTPROXY_WORKERS=1 MTPROXY_WORKERS=1
MTPROXY_MAX_CONNECTIONS=4096 MTPROXY_MAX_CONNECTIONS=4096
ENV ENV
@@ -250,10 +254,16 @@ fi
client_secret="$(docker exec tg-web-proxy sh -c 'tr -d "\\r\\n" < /data/client-secret')" client_secret="$(docker exec tg-web-proxy sh -c 'tr -d "\\r\\n" < /data/client-secret')"
[[ "$client_secret" =~ ^[0-9a-f]{32}$ ]] || fail "не удалось прочитать клиентский секрет" [[ "$client_secret" =~ ^[0-9a-f]{32}$ ]] || fail "не удалось прочитать клиентский секрет"
printf '\n[6/6] Жду выпуска HTTPS-сертификата' printf '\n[6/6] Проверяю домен и жду выпуска HTTPS-сертификата'
https_ready=false https_ready=false
domain_check_url="https://$domain_value/.well-known/telegram-web-proxy-check"
for _ in $(seq 1 60); do for _ in $(seq 1 60); do
if curl --fail --silent --show-error \ domain_check_response="$(curl --fail --silent --show-error \
--connect-timeout 5 --max-time 15 \
--proto '=https' --tlsv1.2 \
"$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 \ --connect-timeout 5 --max-time 15 \
--proto '=https' --tlsv1.2 \ --proto '=https' --tlsv1.2 \
"https://$domain_value/" >/dev/null 2>&1; then "https://$domain_value/" >/dev/null 2>&1; then
@@ -268,7 +278,7 @@ printf '\n'
if [[ "$https_ready" != true ]]; then if [[ "$https_ready" != true ]]; then
docker logs --tail 100 tg-web-proxy-caddy >&2 || true docker logs --tail 100 tg-web-proxy-caddy >&2 || true
cat >&2 <<ERROR cat >&2 <<ERROR
Ошибка: HTTPS не стал доступен. Ошибка: домен не подтвердил подключение к этому прокси по HTTPS.
Проверьте, что DNS-запись A указывает на этот VPS и что у провайдера сервера Проверьте, что DNS-запись A указывает на этот VPS и что у провайдера сервера
разрешены входящие TCP-порты 80 и 443. После исправления снова запустите: разрешены входящие TCP-порты 80 и 443. После исправления снова запустите:
@@ -279,7 +289,7 @@ fi
cat <<RESULT cat <<RESULT
Готово: Telegram WEB proxy работает через HTTPS. Готово: домен ведёт на этот VPS, HTTPS и Telegram WEB proxy работают.
Параметры для Telegram: Параметры для Telegram:
Тип: WEB Тип: WEB