From e2a012d086067718957fa204eb0864b109d3f62d Mon Sep 17 00:00:00 2001 From: archipelago Date: Mon, 22 Jun 2026 03:39:26 -0400 Subject: [PATCH] fix(indeedhub): frontend health = tcp:7777 not http GET / (stops reconcile churn) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On the loaded .198 the frontend churned (created → "unhealthy" → reconciler recreates → loop). The http health check fetched / through nginx (SPA + sub_filter) and false-failed under node load; the reconciler then treated the frontend as wedged and recreated it. nginx binds 7777 at startup, so a tcp liveness check passes immediately and stays green under load while still catching a real "nginx not listening" failure. Generous retries/start_period. Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/indeedhub/manifest.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/indeedhub/manifest.yml b/apps/indeedhub/manifest.yml index f3f5b1cb..471678c4 100644 --- a/apps/indeedhub/manifest.yml +++ b/apps/indeedhub/manifest.yml @@ -67,14 +67,18 @@ app: - exec: ["sh", "-c", "grep -q nostr-provider /etc/nginx/conf.d/default.conf || sed -i 's###' /etc/nginx/conf.d/default.conf"] - exec: ["nginx", "-s", "reload"] + # TCP liveness on the nginx port, NOT an http GET of /. nginx binds 7777 at + # startup (before workers), so this passes immediately and stays green under + # load. An http check of / runs the SPA + sub_filter and false-fails when the + # node is busy → the reconciler then treats the frontend as wedged and + # recreates it in a loop (observed churning the frontend on the loaded .198). health_check: - type: http - endpoint: http://localhost:7777 - path: / + type: tcp + endpoint: localhost:7777 interval: 30s - timeout: 10s - retries: 3 - start_period: 40s + timeout: 5s + retries: 5 + start_period: 30s interfaces: main: