Files
esh-pfi-infrastructure/stacks/uptimekuma/README.md
T
vh 9d92c4bd21 fix(homepage): pin UltraSeedbox to one tab, dedupe Uptime Kuma, size columns to members
UltraSeedbox had no layout: entry, and Homepage renders an untabbed group on
every tab — eight full-width bookmark bars repeated four times. Pinned to Main
with a row layout.

Uptime Kuma rendered twice: a manual services.yaml block under Monitoring plus
homepage.group=Apps on the container. Dropped the manual block, moved the
label to Monitoring, added homepage.siteMonitor. Adopted the previously
unmanaged uptimekuma stack into stacks/ so the label is version-controlled.

Column counts declared more columns than groups had members, leaving the last
row of several groups mostly empty. Columns now track member counts.

Also records an UNRESOLVED regression: since the container was recreated the
client render has lost its tab bar, wallpaper and i18n. Ruled out the config
changes (committed pre-cleanup config reproduces it) and v2.0.0 (v1.13.2
reproduces it). Server HTML still carries the tab markup, so the loss is
client-side. Details in the stack README.
2026-08-18 19:12:02 -07:00

2.3 KiB

uptimekuma — service uptime monitor (esh-docker-vm)

louislam/uptime-kuma:latest on esh-docker-vm (10.0.50.45:3001). Widget slug nethealth feeds the Uptime Kuma card on the fleet dashboard.

Why it is in this repo

Adopted 2026-08-18 while cleaning up Homepage. It had run unmanaged on the host for ~12 months, and its homepage.group=Apps label put it in the wrong dashboard group — where it collided with a manual entry for the same service in the homepage stack's services.yaml under Monitoring. Result: two Uptime Kuma cards on the Main tab, one with the widget and one without.

That is precisely the "never list a labelled container manually" failure the homepage README warns about, and it survived the 2026-08-17 audit because a duplicate looks like two plausible cards rather than like an error. The fix was to keep the label as the single source of truth, move it to Monitoring, and delete the manual block.

Deviations from house convention (deliberate, not oversights)

The compose was adopted as-run rather than normalised — this was a dashboard fix, not a rewrite of a service that has been stable for a year:

  • restart: always, not unless-stopped. It revives on Docker daemon start even if it was stopped on purpose.
  • No healthcheck: block. The image ships its own, which is why docker ps reports healthy anyway.

Worth normalising on the next deliberate touch, not worth a restart today.

The container name

Live container was 45d2522a8cb6_uptime-kuma — Docker's collision rename from some past recreate where the old container could not be removed. Recreating under this compose restores the plain uptime-kuma name. Harmless either way.

Data

All monitor definitions and history live in the named volume uptimekuma_uptime-kuma. Recreating the container is safe. Deleting that volume loses every monitor and all history — there is no config file to restore from, the state is entirely in the volume's SQLite DB.

Deploy

scripts/deploy-stack.sh esh-docker-vm uptimekuma --compose
ssh lkraven@10.0.50.45 'cd /opt/docker/compose/uptimekuma && docker compose up -d'

Label changes need a recreate, not a restart — Docker only applies labels when the container is created. After recreating, the Homepage container also needs a recreate before it re-reads the discovered set.