feat: verify proxy domain after deployment
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 и не требует входа в какую-либо панель.
|
||||
|
||||
Остановить быструю установку, не удаляя секрет и сертификат:
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user