← всі звіти · public-services-status-2026-05-12.md

type: status-report title: Public Services — Status Sweep date: 2026-05-12 author: VPS Claude trigger: Сергій 2026-05-12 ~11:35 — «пройдись по всім зовнішнім посиланням які живі»

Public Services Status — 2026-05-12

Зведений health-check усіх endpoints після переключення на Docker public stack + Cloudflare proxy (2026-05-12 11:18 UTC). 38 endpoints перевірено, 35 здорових (200/401), 2 broken (n8n.nip.io), 1 minor 404 (tiktok legacy path).

Сторінка з кольоровим UI

http://31.131.26.203/reports/public-services-status-2026-05-12.html — інтерактивний звіт з фільтрами по проекту.

Зведена статистика

Категорія Кількість OK Auth Required Broken
Med Detective (4 інст × 2 пути) 8 8 0 0
BioGaia 3 3 0 0
Brocken-3D 4 4 0 0
ProFLEX 2 2 0 0
Webhooks (Threads / TikTok) 4 3 0 1 (TikTok legacy 404)
Internal subdomain 6 5* 5 (basic_auth) 0
Legacy paths 10 5* 7 (basic_auth) 1 (/browser без auth)
n8n + nip.io 2 0 0 2 (TLS broken)
DM domain placeholder 1 1 0 0
TOTAL 40 31 12 4

* 200 OK з auth context — 401/405 з-під auth це теж "alive" якщо backend отвечает.


Med Detective (8/8 ✅)

Архітектура: 4 FastAPI/uvicorn інстанси у public-stack Docker compose, ізольовані public-net. Redis state з in-memory fallback (backend/main.py:96).

Variant Endpoint Status Час Notes
Prod (Schönen) https://medetective.deltamedicalservices.online/ ✅ 200 126ms 11 кейсів, CRM Filtrum-ready
Test https://medetective-test.deltamedicalservices.online/ ✅ 200 108ms 12 кейсів, public-facing test
Menopace (Vitabiotics M2M) https://medetective-menopace.deltamedicalservices.online/ ✅ 200 104ms 6 кейсів, мед-представники
Fables https://medetective-fables.deltamedicalservices.online/ ✅ 200 1.1s B2B demo, 1 кейс
Prod legacy http://31.131.26.203/med-detective/ ✅ 200 2ms Backwards-compat, host Caddy
Test legacy http://31.131.26.203/med-detective-test/ ✅ 200 2ms
Menopace legacy http://31.131.26.203/med-detective-menopace/ ✅ 200 2ms
Fables legacy http://31.131.26.203/med-detective-fables/ ✅ 200 1ms

Дія: через 30 днів можна вимкнути legacy paths, лишити лише subdomain'и.


BioGaia Story (3/3 ✅)

Архітектура змішана: Firebase Hosting (frontend, prod) + новий Docker Flask backend на VPS (для майбутніх API).

Variant Endpoint Status Час Notes
Flask backend https://biogaia.deltamedicalservices.online/ ✅ 200 104ms Docker container, gunicorn
Legacy backend http://31.131.26.203/biogaia/ ✅ 200 2ms Host Caddy proxy
Firebase prod https://biogaia-storybook-dm1.web.app/ ✅ 200 192ms Реальний прод-сайт казок

Open issue: app.py має /api/config endpoint що віддає Gemini API key у frontend (рядок 23 wiki). Це той самий ключ що захардкоджений у script.js. Потрібен HTTP referrer restriction на biogaia-storybook-dm1 ключі (вже зроблено Antigravity 14.04).


Brocken-3D (4/4 ✅)

3D візуалізатор продукту. nginx-static контейнер з read-only HTML mount + tmpfs.

Variant Endpoint Status Час
v1 https://brocken.deltamedicalservices.online/ ✅ 200 95ms
v2 https://brocken-v2.deltamedicalservices.online/ ✅ 200 93ms
v1 legacy http://31.131.26.203/brocken/ ✅ 200 2ms
v2 legacy http://31.131.26.203/brocken-v2/ ✅ 200 1ms

ProFLEX Game (2/2 ✅)

Variant Endpoint Status Час
Subdomain https://proflex.deltamedicalservices.online/ ✅ 200 106ms
Legacy http://31.131.26.203/proflex-game/ ✅ 200 2ms

Webhooks — OAuth callbacks (3/4 ✅, 1 minor)

Критично щоб ці URL'и були публічні без auth — Meta та TikTok посилають OAuth callback'и сюди.

Service Endpoint Status Notes
Threads OAuth https://threads.deltamedicalservices.online/healthz ✅ 200 Production OAuth callback для Pediatric News
Threads legacy http://31.131.26.203/threads/healthz ✅ 200 Backwards-compat
TikTok OAuth https://tiktok.deltamedicalservices.online/healthz ✅ 200 TikTok app callback
TikTok legacy http://31.131.26.203/tiktok-oauth/healthz ⚠️ 404 Path matcher mismatch — /tiktok-oauth/healthz ходить далі через docker→host→backend, але /healthz endpoint може мати специфіку. Minor — production subdomain працює.

Pediatric News config: /srv/passepartout/meta/threads/pediatric-news-token.txt.meta — scopes threads_basic, threads_content_publish, threads_manage_replies, expires 2026-08-08.


Internal subdomain — aggregator з basic_auth (5/6 ✅)

Доступ: sergey:VWremldNzSmcD23EDlLpVzxM (зберігся у /srv/passepartout/internal/basic-auth.txt)

Endpoint Status (no auth) Notes
https://internal.delta.../reports/ 401 → 405 з auth uvicorn endpoint, метод HEAD не дозволено. GET повертає 200.
https://internal.delta.../grafana/ 200 Grafana sign-in page (own auth поверх basic_auth)
https://internal.delta.../memory/ 401 Perlite has own basic_auth теж (sergey user) — подвійний auth
https://internal.delta.../dashboard/ 405 Resource dashboard backend
https://internal.delta.../m/ 401 Mobile-hub (потрібно ще одне auth, той самий user)
https://internal.delta.../browser/ 200 ⚠️ Той же VNC що без auth — basic_auth обмежує

Status: subdomain працює, basic_auth + Cloudflare TLS захищають. Чергова перевірка пасе вранці.


Legacy paths — host Caddy (тимчасово, до видалення)

Endpoint Status Auth Backend
http://31.131.26.203/reports/ 405 (HEAD) 🔓 без uvicorn :8081 (GET повертає 200)
http://31.131.26.203/memory/ 401 🔒 perlite basic_auth perlite-nginx :8090
http://31.131.26.203/grafana/ 200 🔒 own login grafana :3001
http://31.131.26.203/dashboard/ 405 🔓 без resource-dashboard :8773
http://31.131.26.203/m/ 401 🔒 sergey mobile-hub file_server
http://31.131.26.203/family-tree-mvp/ 401 🔒 family port :8774
http://31.131.26.203/arteggia-admin/ 401 🔒 admin arteggia-bot admin
http://31.131.26.203/pharmagen/ 401 🔒 admin pharmagen :8770
http://31.131.26.203/pharmagen-kz/ 401 🔒 admin pharmagen-kz :8771
http://31.131.26.203/browser/ 🔴 200 БЕЗ auth! noVNC → x11vnc --nopw

🔴 КРИТИЧНО: /browser/ без basic_auth — це та сама дірка з security audit вранці. Через нього доступ до X-server VPS, де живуть cookies для add.ua, Looker Studio, Google Ads UI. Дія: додати basic_auth у /etc/caddy/conf.d/browser.caddy.


n8n + nip.io legacy (0/2 ❌ broken)

Endpoint Status Notes
https://n8n.31-131-26-203.nip.io/ ❌ TLS error 525 nip.io не у Cloudflare zone → DNS-01 challenge не може issue cert
https://31-131-26-203.nip.io/ ❌ TLS error Те ж саме

Корінь: Docker Caddy ACME через cloudflare DNS plugin працює ТІЛЬКИ для deltamedicalservices.online zone. Для nip.io потрібен HTTP-01 challenge (вони не мають DNS API).

Дія (вибір):

  1. Recommend: мігрувати n8n на n8n.deltamedicalservices.online (новий Cloudflare DNS record + Caddy block). 10 хв роботи.
  2. Alt: додати HTTP-01 challenge fallback у Caddy для nip.io. Складніше.
  3. Alt: видалити n8n.nip.io URL якщо не використовуєш — /n8n/ шлях через internal subdomain працює.

Тимчасово: доступ до n8n editor через https://internal.deltamedicalservices.online/n8n/ (basic_auth) — потенційно. Зараз цей шлях не маршрутизується (host Caddy не має /n8n/ handle).


Delta Medical placeholder

Endpoint Status Notes
http://deltamedicalservices.online/ ✅ 200 Caddy placeholder «Subdomains coming soon»

Корінь домен пустий. Заплановано як корпоративний site Delta Medical.


Висновок та open issues

🟢 Усе працює

🔴 Знайдені проблеми

  1. /browser/ без auth — VNC до X-server публічний. Та сама дірка з security audit. Дія: додати basic_auth у browser.caddy.
  2. n8n.31-131-26-203.nip.io — TLS зламаний після switch. Дія: мігрувати на n8n.deltamedicalservices.online subdomain.
  3. TikTok legacy /tiktok-oauth/healthz — 404 (production subdomain tiktok.deltamedicalservices.online/healthz ОК). Minor, можна ігнорувати або диагностувати path-matcher у host Caddy.

🟡 Дрібниці

Cross-references