You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(server): expose watchtower metrics API + sidecar for Uptime Kuma monitoring
Watchtower is headless (no UI), so to track up/down like the other services it
gets a sidecar fronting only its token-gated HTTP metrics API:
WATCHTOWER_HTTP_API_METRICS=true + WATCHTOWER_HTTP_API_TOKEN, served at
https://watchtower.<tailnet>.ts.net/v1/metrics. Metrics-only — NOT the update API
— so periodic polls (the 3am WATCHTOWER_SCHEDULE) keep running.
Uptime Kuma monitors it with an HTTP check + 'Authorization: Bearer <token>'
header (recipe in HTTPS.md). No homepage href — the endpoint is an API, not a UI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: linux-server/HTTPS.md
+20Lines changed: 20 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -230,6 +230,7 @@ side of the `ports:` mapping (`host:container`), not the host side.
230
230
| homepage | 3000 | ✅ done | host-networked variant — keep `network_mode: host` (reaches localhost widgets), sidecar proxies via `host.docker.internal`; add the domain to `HOMEPAGE_ALLOWED_HOSTS` |
231
231
| cockpit | 9090 | ✅ done | host systemd service — **sidecar-only** stack proxies `https+insecure://host.docker.internal:9090`; `cockpit.conf.example`'s `Origins` line turned out to be unnecessary in practice — see Gotchas |
232
232
| tailscale-web | 8088 | ✅ done | not in the original rollout — added because the homepage Tailscale tile linked plain HTTP. `tailscale web` is a host **systemd user unit**, not a container; `ExecStart` needs `--listen 0.0.0.0:8088 --origin https://tailscale-web.<tailnet>.ts.net` so it's reachable via `host.docker.internal` and knows it's reverse-proxied. Don't use port `:5252` — see Gotchas |
233
+
| watchtower | 8080 | todo | **no UI** — the sidecar fronts only watchtower's token-gated `/v1/metrics` HTTP API (enable `WATCHTOWER_HTTP_API_METRICS=true` + `WATCHTOWER_HTTP_API_TOKEN`); no homepage `href`. Monitor it in Uptime Kuma — see below |
233
234
234
235
Services that also expose **non-HTTP** ports the LAN/tailnet needs (AdGuard DNS
235
236
`:53`, Syncthing sync `:22000`, Forgejo SSH `:22`) keep those as direct
@@ -244,6 +245,25 @@ non-empty. `ts-state/` is already gitignored for every service
244
245
(`linux-server/*/ts-state/`). Remember `docker compose up -d` (not `restart`)
245
246
for `homepage` afterward — see Homepage links below.
246
247
248
+
### Monitoring a UI-less service in Uptime Kuma (watchtower)
249
+
250
+
Watchtower is a headless daemon — no UI, nothing to click. To get the same
251
+
up/down tracking as the other services, enable its HTTP metrics API and point an
252
+
Uptime Kuma HTTP monitor at it (metrics-only, so the `WATCHTOWER_SCHEDULE` keeps
253
+
running — only the *update* API would disable periodic polls):
254
+
255
+
1. In `watchtower/.env`: set `WATCHTOWER_API_TOKEN` (e.g. `openssl rand -hex 32`)
0 commit comments