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} {
@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
}
+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,
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.
+7 -4
View File
@@ -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 и не требует входа в какую-либо панель.
Остановить быструю установку, не удаляя секрет и сертификат:
+1
View File
@@ -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"
+15 -5
View File
@@ -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" <<ENV
TPROXY_HOSTNAME=$domain_value
MTPROXY_PUBLIC_IP=$public_ip
NPM_NETWORK_NAME=$edge_network
DOMAIN_CHECK_TOKEN=$domain_check_token
MTPROXY_WORKERS=1
MTPROXY_MAX_CONNECTIONS=4096
ENV
@@ -250,13 +254,19 @@ fi
client_secret="$(docker exec tg-web-proxy sh -c 'tr -d "\\r\\n" < /data/client-secret')"
[[ "$client_secret" =~ ^[0-9a-f]{32}$ ]] || fail "не удалось прочитать клиентский секрет"
printf '\n[6/6] Жду выпуска HTTPS-сертификата'
printf '\n[6/6] Проверяю домен и жду выпуска HTTPS-сертификата'
https_ready=false
domain_check_url="https://$domain_value/.well-known/telegram-web-proxy-check"
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 \
"https://$domain_value/" >/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 <<ERROR
Ошибка: HTTPS не стал доступен.
Ошибка: домен не подтвердил подключение к этому прокси по HTTPS.
Проверьте, что DNS-запись A указывает на этот VPS и что у провайдера сервера
разрешены входящие TCP-порты 80 и 443. После исправления снова запустите:
@@ -279,7 +289,7 @@ fi
cat <<RESULT
Готово: Telegram WEB proxy работает через HTTPS.
Готово: домен ведёт на этот VPS, HTTPS и Telegram WEB proxy работают.
Параметры для Telegram:
Тип: WEB