services/kb-site/ — nginx:alpine serwujacy wolumen kb-site_content (:ro, /usr/share/nginx/html), pelny layout z CLAUDE.md: docker-compose.yml, service.yaml, README-wskaznik, env.example (swiadomie pusty — brak sekretow), healthcheck.sh. Wpis w hosts/piha/services.yaml. Port hosta 8250, NIE 8240 z opisu zadania: 8240 jest juz zajete przez narty27 (services/narty27/docker-compose.yml). Blok statyczny PIHA to 8210 paperless, 8220 nextcloud, 8230 kb-query, 8240 narty27 -> 8250 to nastepny wolny. Uzgodnione z operatorem. exposure: public — w odroznieniu od narty27 ta wystawka ma byc dostepna z internetu przez vhost npm@PIHA kb.okit.pl; bind :8250 jest upstreamem proxy, nie punktem wejscia. Tresc jest czystym artefaktem repo (wyjscie scripts/kb/gen_pages.py), zyje wylacznie w wolumenie kb-site_kb-site_content — bez binda pod /opt/homelab/data i bez zadania backupu: odtworzeniem jest regeneracja z kb/. Sprawdzone lokalnie: docker compose config -q, bash -n healthcheck.sh, yaml.safe_load na obu manifestach.
22 lines
711 B
Bash
Executable file
22 lines
711 B
Bash
Executable file
#!/bin/bash
|
|
# Healthcheck for kb-site (nginx:alpine serving the generated public KB)
|
|
|
|
# Container must be running
|
|
if ! docker ps --filter "name=kb-site" --filter "status=running" | grep -qw "kb-site"; then
|
|
echo "[FAIL] kb-site container is not running"
|
|
exit 1
|
|
fi
|
|
|
|
# The index is generated on every run, so both the bare root and /index.html
|
|
# must answer. An empty volume means the content was never loaded — see
|
|
# kb/runbooks/kb-site-deploy.md.
|
|
for path in "" index.html; do
|
|
if ! curl -sf -o /dev/null "http://127.0.0.1:8250/${path}"; then
|
|
echo "[FAIL] kb-site is not serving /${path} on 127.0.0.1:8250 (content loaded?)"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "[OK] kb-site is healthy"
|
|
exit 0
|