2026-08-18 — Sepia Uptime Kuma monitoring
Summary
Added Uptime Kuma to sepia using the established shuttle pattern: a pinned Docker deployment with read-only Docker socket access, shared service networks, Docker health monitors for all relevant containers, and HTTP checks for the services where an application-level check provides better signal than container state alone.
Context
Shuttle already uses Uptime Kuma as its Docker-environment monitor. The sepia host had no Kuma deployment or monitor coverage. The implementation intentionally follows the shuttle layout while using only services that exist on sepia.
Changes
Uptime Kuma deployment
- Files:
/opt/compose.uptime.yaml,/opt/compose.yaml - What: Added
louislam/uptime-kuma:2.4.0asuptime, persisted at/opt/uptime, with read-only Docker socket access and membership of thefrontend,backend,storage, andmonitoringnetworks. - Compose: Included the service from
/opt/compose.yaml.
Monitor provisioning
- File:
/opt/scripts/provision-sepia-uptime.py - What: Added an idempotent SQLite provisioning script that creates the local Docker host,
DockerandApplicationgroups, and the monitor inventory. - Docker monitors: 18 containers:
homeassistant,docs,keepassxc,rclone-webdav,dsmr,dsmrdb,esphome,influxdb,grafana,seafile-mysql,timescaledb,seafile-redis,blocky,caddy,collectd,seafile-server,borgmatic, anduptime. - HTTP monitors:
uptime-http,docs-http,grafana-api,dsmr-http,influxdb-health, andseafile-http. - Not added: File Browser is not running on sepia. Blocky is on a network not shared with Kuma, so its application-level check was omitted; its Docker monitor remains active.
- Credentials: No credentials or
.envfiles are stored in Kuma configuration.
Decisions
- Use the same Kuma image version as shuttle (
2.4.0) rather than introducing a version difference. - Use Docker monitors as the baseline because they cover container health and restart state without duplicating credentials.
- Add HTTP checks only where they test an application endpoint or protocol that Docker health alone cannot validate.
- Treat running containers without a Docker healthcheck (
keepassxc,rclone-webdav, andborgmatic) as UP while they are running; the monitor message explicitly identifies this weaker signal. - Exclude host-network services from synthetic HTTP checks when no stable in-network target exists; they remain covered by Docker monitors.
Verification
docker compose -f /opt/compose.yaml configcompleted successfully before deployment.uptimeis runninglouislam/uptime-kuma:2.4.0and its Docker healthcheck ishealthy.- The Kuma database contains 24 monitors: 18 Docker monitors and 6 HTTP monitors, plus the two groups.
- All 24 monitor heartbeats are UP:
- Docker monitors report
healthy, or the explicit running-without-healthcheck UP message forkeepassxc,rclone-webdav, andborgmatic. - All HTTP monitors report
200 - OK. - The provisioning script was run after deployment and is idempotent; a second run did not create duplicates.
- Existing unrelated working-tree changes in
compose.homeassistant.yaml,homeassistant/mqtt.yaml,homeassistant/.cache/, andhomeassistant/www/were left untouched.
Access
The initial Kuma account is user. A bootstrap password was generated during setup and should be replaced through the Kuma UI after first login.
Generated: 2026-08-18
Subdomain
- Added the unprotected Caddy route
uptime.uitgeest.veenboer.xyzto the sepia Caddyfile. - The route proxies to the
uptime:3001Docker service and uses the same unprotected-route pattern as the other internally authenticated applications. - Caddy configuration validation and reload completed successfully.
- DNS resolves
uptime.uitgeest.veenboer.xyzthrough the existinguitgeest.veenboer.xyzDNS setup. - An external HTTPS request returns Uptime Kuma's
/dashboardredirect, confirming that Caddy no longer adds Basic Auth or Authentik authentication.