Nowy serwis services/narty27 — nginx:alpine serwujacy jeden self-contained plik viz.html z named volume narty27_content (:ro). Port 8240 to nastepny wolny w bloku 82x0 na PIHA (8210 paperless, 8220 nextcloud, 8230 kb-query). Content jest personal: zyje wylacznie w volume narty27_narty27_content i w zrodle na SOLARII (~/narty-2027/saalbach-kb/viz.html). Nigdy w repo, bez backup joba, bez bindu pod /opt/homelab/data. Procedura aktualizacji w README uzywa kontenera-pomocnika (alpine z volume rw), NIE `docker cp` — przy mount :ro docker cp zwraca "mounted volume is marked read-only", zarowno dla dzialajacego jak i zatrzymanego kontenera (zweryfikowane empirycznie 2026-07-31). Zapisywane sa dwie kopie tego samego pliku: viz.html (nazwa kanoniczna) + index.html (zeby golny root dzialal). Walidacja: docker compose config OK (volume rozwija sie do narty27_narty27_content), YAML parse OK, bash -n healthcheck.sh OK. Bez zywego deployu. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
26 lines
905 B
YAML
26 lines
905 B
YAML
services:
|
|
narty27:
|
|
image: nginx:alpine
|
|
container_name: narty27
|
|
restart: unless-stopped
|
|
ports:
|
|
# Next free port in the PIHA 82x0 static-HTTP block
|
|
# (8210 paperless, 8220 nextcloud, 8230 kb-query).
|
|
- "8240:80"
|
|
volumes:
|
|
# Content is personal and lives ONLY in this volume — never in the repo.
|
|
# Read-only: nginx just serves it; writes go through the helper-container
|
|
# procedure in README.md (docker cp cannot write into a :ro mount).
|
|
- narty27_content:/usr/share/nginx/html:ro
|
|
# busybox wget — nginx:alpine ships no curl. Serves the personal viz.html;
|
|
# index.html is a second copy of the same file so the bare root works.
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/viz.html"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 5s
|
|
|
|
volumes:
|
|
narty27_content:
|