Add /version.json build identity, deploy 16e7930 release markers,
DNS/Named Tunnel prep docs, portable browser benchmark, and replay
stability probe. Keep Quick Tunnel until permanent domain cutover.
Co-authored-by: Cursor <cursoragent@cursor.com>
5.9 KiB
5.9 KiB
PUBLIC_DOMAIN_DIAGNOSTIC
Дата: 2026-07-15
Окружение: coder container coder-arhipov-owlprime на хосте OwlPrime
Verdict
BLOCKED_EXTERNAL
Постоянный домен https://arhipovdan.ru/ не обслуживает owl-web-1.
Production на :3100 и Quick Tunnel обновлены до commit 16e7930 (/version.json).
Named Tunnel: не создан из этого окружения — нет Cloudflare origin cert / API token.
См. CLOUDFLARE_NAMED_TUNNEL_SETUP.md и DNS_MIGRATION_INVENTORY.md.
DNS
| Поле | Значение |
|---|---|
| Nameservers | ns1.reg.ru., ns2.reg.ru. (REG.RU, не Cloudflare) |
| A | 185.160.137.162 (TTL ~86400 у registrar) |
| AAAA | нет |
| CNAME | нет на apex; www тоже → 185.160.137.162 |
| Cloudflare Proxy | нет (NS не Cloudflare) |
Команды:
dig A arhipovdan.ru +short # 185.160.137.162
dig AAAA arhipovdan.ru +short # (empty)
dig NS arhipovdan.ru +short # ns1.reg.ru. ns2.reg.ru.
Сетевая топология (факт)
| Проверка | Результат |
|---|---|
| Egress IP хоста (ipify) | 185.160.137.162 (совпадает с A) |
127.0.0.1:80 / :443 на хосте |
closed |
185.160.137.162:80 / :443 |
open, отвечает openresty |
127.0.0.1:3100 |
open, owl-web-1 nginx → index-ncgt6PBL.js |
Вывод: порт-форвард / другой хост за тем же публичным IP принимает 80/443. Это не namespace текущего Docker host listener set (на host net видны лишь :3100 и :8082).
TLS / HTTP к домену
| Проверка | Результат |
|---|---|
curl -4 http://arhipovdan.ru/ |
404 Server: openresty |
curl -4 https://arhipovdan.ru/ |
TLS fail: tlsv1 unrecognized name (нет сертификата/vhost SNI для имени) |
curl -6 |
нет AAAA → resolve fail |
| Certificate / SAN | получить нельзя (handshake abort) |
| HTML / bundle | недоступны через постоянный домен |
Cloudflare Tunnel
| Поле | Значение |
|---|---|
| Type | Quick Tunnel only |
| Process | /usr/local/bin/cloudflared tunnel --url http://127.0.0.1:3100 (pid в coder) |
| Named Tunnel | не найден (нет systemd unit, нет config.yml credentials) |
| Permanent ingress for arhipovdan.ru | отсутствует |
| Working public URL | https://invitations-based-characters-accent.trycloudflare.com/ → bundle index-ncgt6PBL.js |
Quick Tunnel не является завершённым production DNS-решением.
Точная причина 404 / TLS fail
- DNS A указывает на
185.160.137.162. - На этом IP:80 отвечает чужой openresty без vhost
arhipovdan.ru→ HTTP 404. - На IP:443 нет SNI-сертификата для
arhipovdan.ru→unrecognized_name. - Актуальный sorter (
owl-web-1) слушает только127.0.0.1:3100и не связан с этим openresty.
Что было исправлено в коде/инфре приложения
- Production container уже отдаёт
index-ncgt6PBL.jsна:3100. - Добавлены диагностика, production smoke script, документация (этот файл).
- DNS/openresty не изменялись из этого окружения (нет доступа к REG.RU и к openresty vhost).
Действия пользователя (точные)
Вариант 1 — предпочтительно: Cloudflare Named Tunnel + смена NS/DNS
- Открыть Cloudflare → Add site
arhipovdan.ruили создать Named Tunnel в существующем CF-аккаунте. - В REG.RU → DNS управления доменом: либо делегировать NS на Cloudflare, либо оставить REG.RU и создать запись, которую выдаст
cloudflared tunnel route dns. - Ingress tunnel:
- hostname:
arhipovdan.ru(+www) - service:
http://127.0.0.1:3100(если cloudflared на том же host net, что и publish3100)
- hostname:
- Выключить/не использовать Quick Tunnel как постоянный URL.
- Проверить:
dig A arhipovdan.ru +short
curl -I https://arhipovdan.ru/
curl -s https://arhipovdan.ru/ | grep -Eo 'index-[A-Za-z0-9_-]+\.js'
# ожидается: index-ncgt6PBL.js
Вариант 2 — починить openresty на том, кто слушает 185.160.137.162:80/443
- На сервере с openresty добавить
server_name arhipovdan.ru www.arhipovdan.ru. proxy_pass http://<IP_этого_хоста_в_LAN>:3100;(нужен LAN-доступ к OwlPrime:3100; сейчас publish только127.0.0.1:3100— потребуется сменить publish на0.0.0.0:3100или LAN IP осознанно).- Выпустить TLS (certbot/acme) для SNI
arhipovdan.ru. - Проверить теми же curl-командами.
Вариант 3 — сменить A-запись в REG.RU
Тип: A
Имя: @ (и www)
Старое значение: 185.160.137.162
Новое значение: <IP, где реально слушает ваш reverse proxy / CF>
Proxy status: DNS only (если не Cloudflare) или Proxied (если Cloudflare)
Проверочные команды после фикса
curl -I https://arhipovdan.ru/
curl -I https://arhipovdan.ru/details
curl -I https://arhipovdan.ru/assets/index-ncgt6PBL.js
curl -s https://arhipovdan.ru/ | grep -Eo 'index-[A-Za-z0-9_-]+\.js'
PLAYWRIGHT_BASE_URL=https://arhipovdan.ru/ npm run test:e2e:production