feat: verify proxy domain after deployment
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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 и не требует входа в какую-либо панель.
|
||||||
|
|
||||||
Остановить быструю установку, не удаляя секрет и сертификат:
|
Остановить быструю установку, не удаляя секрет и сертификат:
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
+15
-5
@@ -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,13 +254,19 @@ 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 \
|
--connect-timeout 5 --max-time 15 \
|
||||||
--proto '=https' --tlsv1.2 \
|
--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
|
https_ready=true
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user