authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-06-11 00:33:49-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-06-11 01:38:21-07:00
logdb792ebc5ec23d7de27231d6584eeb01a89a5f78
tree77f8c993265383797ede93dbfd77f5a3fddd5a0a
parent7724489e4f16f750a945aef25084e7b30bbde95b
signaturebadge-check Signed by SSH key SHA256:xbd+BjjhyBfwk7GVoURf9Yx0gzDerHbvYv7SddNWmAs

chore: healthchecks on everything

closes #19 probe commands verified by exec'ing them in the running containers: forgejo + evil-forgejo (/api/healthz), jellyfin (/health), copyparty, qbittorrent, jackett (/health), sonarr + radarr (/ping), syncthing (/rest/noauth/health), docker-in-docker (docker version over tcp). fixes caddy's healthcheck: 'caddy healthcheck' is not a real subcommand, so caddy reported unhealthy for 2 weeks — now probes the admin endpoint. skipped: navidrome (scratch image, no shell), pgadmin (/misc/ping 401s in this config), anubis + forward-auth (distroless), and the broken dawarich / technitium / openspeedtest (see follow-up). also tags knot, spindle, xmpp with net.paperclover.list.web=false so the app list page skips them.

1 files changed, 67 insertions(+), 4 deletions(-)

compose.yaml+67-4
......@@ -18,11 +18,11 @@ services:
1818 - path: ./config/Caddyfile
1919 action: restart
2020 healthcheck:
21 test: ["CMD", "caddy", "healthcheck", "--address", ":2019"]
22 interval: 10s
23 timeout: 5s
21 test: ["CMD-SHELL", "wget -qO /dev/null http://127.0.0.1:2019/config/"]
22 interval: 30s
23 timeout: 10s
2424 retries: 3
25 start_period: 5s
25 start_period: 10s
2626 # SSO
2727 keycloak: # port 80, 443
2828 container_name: keycloak
......@@ -111,6 +111,12 @@ services:
111111 - "${STORE_ROOT}:/w"
112112 - "${APP_ROOT}/copyparty:/cfg"
113113 - ./config/copyparty.conf:/cfg/copyparty.conf:ro
114 healthcheck:
115 test: ["CMD-SHELL", "wget -qO /dev/null http://127.0.0.1:80/?h"]
116 interval: 30s
117 timeout: 10s
118 retries: 3
119 start_period: 60s
114120 restart: unless-stopped
115121 labels:
116122 net.paperclover.list.name: Copyparty File Storage
......@@ -175,6 +181,12 @@ services:
175181 - "/etc/localtime:/etc/localtime:ro"
176182 - ./config/forgejo/public:/custom/public:ro
177183 - ./config/forgejo/init:/custom/init:ro
184 healthcheck:
185 test: ["CMD-SHELL", "curl -fsS http://localhost:3000/api/healthz >/dev/null"]
186 interval: 30s
187 timeout: 10s
188 retries: 3
189 start_period: 60s
178190 labels:
179191 net.paperclover.list.name: Clover Git Forge
180192 net.paperclover.list.domain: git
......@@ -247,6 +259,7 @@ services:
247259 net.paperclover.list.name: Tangled Knot
248260 net.paperclover.list.domain: knot
249261 net.paperclover.list.priority: 106
262 net.paperclover.list.web: "false"
250263 knot-init:
251264 container_name: knot-init
252265 image: alpine:3.22
......@@ -285,10 +298,17 @@ services:
285298 net.paperclover.list.name: Tangled Spindle
286299 net.paperclover.list.domain: spindle
287300 net.paperclover.list.priority: 107
301 net.paperclover.list.web: "false"
288302 docker-in-docker:
289303 container_name: docker-in-docker
290304 image: docker:dind
291305 privileged: "true"
306 healthcheck:
307 test: ["CMD-SHELL", "docker -H tcp://localhost:2375 version >/dev/null"]
308 interval: 30s
309 timeout: 10s
310 retries: 3
311 start_period: 60s
292312 command:
293313 - dockerd
294314 - -H
......@@ -311,6 +331,12 @@ services:
311331 - "${APP_ROOT}/jellyfin/cache:/cache:rw"
312332 - "./config/jellyfin:/config/custom:ro"
313333 - "./config/jellyfin/branding.xml:/config/config/branding.xml:ro"
334 healthcheck:
335 test: ["CMD-SHELL", "curl -fsS http://localhost:8096/health >/dev/null"]
336 interval: 30s
337 timeout: 10s
338 retries: 3
339 start_period: 60s
314340 labels:
315341 net.paperclover.list.name: Cloverfin
316342 net.paperclover.list.domain: jelly
......@@ -378,6 +404,12 @@ services:
378404 - "${APP_ROOT}/qbittorrent:/config"
379405 - "./config/openvpn:/config/openvpn:ro"
380406 - "/etc/localtime:/etc/localtime:ro"
407 healthcheck:
408 test: ["CMD-SHELL", "curl -fsS http://localhost:23938 >/dev/null"]
409 interval: 30s
410 timeout: 10s
411 retries: 3
412 start_period: 180s
381413 labels:
382414 net.paperclover.list.name: qBittorrent
383415 net.paperclover.list.domain: qbt
......@@ -393,6 +425,12 @@ services:
393425 restart: unless-stopped
394426 volumes:
395427 - "${APP_ROOT}/jackett:/config/Jackett"
428 healthcheck:
429 test: ["CMD-SHELL", "curl -fsS http://localhost:9117/health >/dev/null"]
430 interval: 30s
431 timeout: 10s
432 retries: 3
433 start_period: 60s
396434 labels:
397435 net.paperclover.list.name: Jackett API Adapter
398436 net.paperclover.list.domain: jkt
......@@ -412,6 +450,12 @@ services:
412450 - "PGID=$GROUP_ID"
413451 - "TZ=America/Los_Angelas"
414452 image: lscr.io/linuxserver/sonarr:latest
453 healthcheck:
454 test: ["CMD-SHELL", "curl -fsS http://localhost:8989/ping >/dev/null"]
455 interval: 30s
456 timeout: 10s
457 retries: 3
458 start_period: 60s
415459 volumes:
416460 - "${APP_ROOT}/sonarr:/config"
417461 - "${TORRENT_TEMP:-${APP_ROOT}/qbittorrent/tmp}:/data/tmp"
......@@ -429,6 +473,12 @@ services:
429473 - "PGID=$GROUP_ID"
430474 - "TZ=America/Los_Angelas"
431475 image: lscr.io/linuxserver/radarr:latest
476 healthcheck:
477 test: ["CMD-SHELL", "curl -fsS http://localhost:7878/ping >/dev/null"]
478 interval: 30s
479 timeout: 10s
480 retries: 3
481 start_period: 60s
432482 volumes:
433483 - "${APP_ROOT}/radarr:/config"
434484 - "${TORRENT_TEMP:-${APP_ROOT}/qbittorrent/tmp}:/data/tmp"
......@@ -660,6 +710,12 @@ services:
660710 - 22000:22000/tcp
661711 - 22000:22000/udp
662712 - 21027:21027/udp
713 healthcheck:
714 test: ["CMD-SHELL", "curl -fsS http://localhost:8384/rest/noauth/health >/dev/null"]
715 interval: 30s
716 timeout: 10s
717 retries: 3
718 start_period: 60s
663719 restart: unless-stopped
664720 labels:
665721 net.paperclover.list.name: Syncthing
......@@ -703,6 +759,7 @@ services:
703759 net.paperclover.list.name: Paper Clover XMPP
704760 net.paperclover.list.domain: xmpp
705761 net.paperclover.list.priority: 108
762 net.paperclover.list.web: "false"
706763 depends_on:
707764 caddy:
708765 condition: service_started
......@@ -792,6 +849,12 @@ services:
792849 - "/etc/localtime:/etc/localtime:ro"
793850 - ./config/evil-infra/forgejo/public:/custom/public:ro
794851 - ./config/evil-infra/forgejo/init:/custom/init:ro
852 healthcheck:
853 test: ["CMD-SHELL", "curl -fsS http://localhost:3000/api/healthz >/dev/null"]
854 interval: 30s
855 timeout: 10s
856 retries: 3
857 start_period: 60s
795858 depends_on:
796859 postgres:
797860 condition: service_healthy