Files
esh-pfi-infrastructure/stacks/park
vh f6acb90d00 park(migration): promote the henge to permanent home on ana-docker
Operator-directed (Vuong 2026-08-13): migrated stonehenge-park off the nh3-docker
beta deployment to a permanent fixture on ana-docker (10.250.50.70) before the
v1.0.0 final cut. SQLite (park-data) migrated consistently (stop -> tar-copy ->
start; byte-identical). restic auto-covered by ana-docker's /var/lib/docker/volumes
source. Stable name park.phasefinal.com -> 10.250.50.70 (Cloudflare DNS-only) so
clients decouple from the host IP. Homepage tile 'The Henge' added. nh3-docker stack
left stopped as rollback pending park-dev cutover verification.
2026-08-13 14:28:42 -07:00
..

park (stonehenge-park — "the henge")

Self-contained needs-attention tracker: FastAPI + SQLite (FTS5) + an in-process scheduler, one container. Source: gitea.phasefinal.com/vh/stonehenge-park, deployed at tag v1.0.0-beta.1. Owned by park-dev.

  • Host: ana-docker (10.250.50.70), compose home /opt/docker/compose/park/. Permanent home since 2026-08-13 (migrated off nh3-docker before the v1.0.0 final cut).
  • Stable name: park.phasefinal.com10.250.50.70 (Cloudflare, DNS-only/internal) — clients and Homepage point at the name so future moves need no client edits.
  • Port: 8420 (host + container). LAN/WG-internal only — never internet-exposed.
  • Data: named volume park-data/data; SQLite single file /data/park.db (the sole source of truth). Covered by restic via the host's /var/lib/docker/volumes backup source — no per-volume add needed. (⚠ nh3-docker's restic repo was broken as of 2026-08-12 — see fleet infra notes.)
  • Secret: PARK_API_KEY from the vault (secret get nh3-dev/park-api-key), in the host .env (chmod 600). /healthz is unauthenticated; /park/* needs the bearer key.
  • Health: GET /healthz{"status":"ok"} (image HEALTHCHECK built in).

Image is built locally (no registry yet)

# on nh3-docker:
cd ~/deploy-src/stonehenge-park          # rsync'd from the tag
sudo docker build -t park:v1.0.0-beta.1 .
cd /opt/docker/compose/park && sudo docker compose up -d

Swap image: for a registry ref once one exists (park-dev left the door open).

althing wiring (TODO)

The scheduler posts needs-attention snapshots to althing handle henge-crow by shelling out to althing-cli post inside the container. althing-cli is not yet wired into the container, so PARK_ALTHING_CHANNEL is set empty in the host .env (push disabled; REST endpoints fully functional — graceful by design). To enable: get althing-cli reachable in-container (bind-mount + config / sidecar / host-run), set PARK_ALTHING_CHANNEL=henge-crow, recreate.

Verify

curl -s http://10.100.50.40:8420/healthz                      # {"status":"ok"}
curl -s http://10.100.50.40:8420/                             # UI shell
curl -s -H "Authorization: Bearer $KEY" \
  http://10.100.50.40:8420/park/due-count                     # {"count": N}