feat: add Docker healthchecks, remove Uptime Kuma

- Add healthcheck configurations to 13 stacks for Portainer status monitoring
- Remove Uptime Kuma service (replaced by Docker healthchecks)
- Clean up stale Heimdall references
- Update documentation and service counts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-14 12:05:05 +01:00
co-authored by Claude Opus 4.5
parent 8793ff1779
commit 75c3950dd8
27 changed files with 142 additions and 169 deletions
+1 -5
View File
@@ -26,9 +26,7 @@ review the http://core-api/docs openapi documentation for infrastructure managem
| Stack | File | Ports | GPU | Description |
|-------|------|-------|-----|-------------|
| **Uptime Kuma** | `uptime-kuma.yml` | 3001 | No | Service availability monitoring |
| **Netdata** | `netdata.yml` | 19999 | No | Real-time system performance monitoring |
| **Heimdall** | `heimdall.yml` | 8888, 8889 | No | Application dashboard |
### Phase 4: Optimization
@@ -60,10 +58,8 @@ review the http://core-api/docs openapi documentation for infrastructure managem
- 2222: Gitea SSH
- 3002: Gitea HTTP
### Monitoring Services (3000-3999, 19000-19999)
- 3001: Uptime Kuma
### Monitoring Services (19000-19999)
- 8200: Duplicati
- 8888: Heimdall
- 19999: Netdata
### ML/API Services (11000+)
+2 -2
View File
@@ -2,7 +2,7 @@ version: '3.8'
# Authentik Identity Provider (SSO)
# Purpose: Centralized authentication for all homelab services
# Ports: 9000 (web UI), 9443 (standalone proxy outpost)
# Ports: 9000 (web UI), 9444 (standalone proxy outpost)
# GPU: No
# Storage: SSD (configs), PostgreSQL shared (user data)
# Note: Using standalone outpost - embedded outpost has issues in 2024.8.4
@@ -152,7 +152,7 @@ services:
TZ: Europe/Amsterdam
ports:
- "9443:9443" # Proxy outpost endpoint
- "9444:9443" # Proxy outpost endpoint (9443 used by Portainer)
networks:
- docker-dataplane
+2 -7
View File
@@ -5,11 +5,11 @@ version: '3.8'
# Port: 8083 (HTTP API)
# Network: docker-dataplane (shared infrastructure network)
#
# Container image built from: git.schweitz.net/jpmschweitzer/core-api
# Container image built from: tower-of-joy:3002/jpmschweitzer/core-api (internal registry)
services:
core-api:
image: git.schweitz.net/jpmschweitzer/core-api:latest
image: tower-of-joy:3002/jpmschweitzer/core-api:latest
container_name: core-api
restart: unless-stopped
@@ -56,11 +56,6 @@ services:
- WEB_SCRAPER_DEFAULT_MAX_LENGTH=10000
- WEB_SCRAPER_MAX_LINKS_TO_EXTRACT=50
# Uptime Kuma Configuration
- KUMA_URL=http://uptime-kuma:3001
- KUMA_USERNAME=${KUMA_USERNAME}
- KUMA_PASSWORD=${KUMA_PASSWORD}
# Python path
- PYTHONPATH=/app
+18
View File
@@ -19,6 +19,12 @@ services:
- POSTGRES_PASSWORD=gPdM7QV4gvotE9f9lGS4yj
- POSTGRES_DB=gitea
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "pg_isready -U gitea -d gitea"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- docker-dataplane
@@ -43,6 +49,12 @@ services:
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gPdM7QV4gvotE9f9lGS4yj
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://git.schweitz.internal/api/healthz || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
depends_on:
- gitea-db
networks:
@@ -61,6 +73,12 @@ services:
- GITEA_RUNNER_REGISTRATION_TOKEN=${GITEA_RUNNER_TOKEN}
- GITEA_RUNNER_NAME=docker-runner
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "pgrep -x act_runner || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
depends_on:
- gitea
networks:
+6
View File
@@ -20,6 +20,12 @@ services:
command: serve
environment:
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- docker-dataplane
+6
View File
@@ -25,6 +25,12 @@ services:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:8096/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
deploy:
resources:
reservations:
+2 -2
View File
@@ -4,11 +4,11 @@ version: '3.8'
# Application Layer
# Port: 8089 (HTTP)
# GPU: No
# Source: https://git.schweitz.net/jpmschweitzer/library-desk
# Source: tower-of-joy:3002/jpmschweitzer/library-desk (internal registry)
services:
library-desk:
image: git.schweitz.net/jpmschweitzer/library-desk:latest
image: tower-of-joy:3002/jpmschweitzer/library-desk:latest
container_name: library-desk
restart: unless-stopped
ports:
+6
View File
@@ -27,6 +27,12 @@ services:
# Optional: Claim to Netdata Cloud for remote access
# - NETDATA_CLAIM_TOKEN=your-claim-token
# - NETDATA_CLAIM_URL=https://app.netdata.cloud
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:19999/api/v1/info || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- docker-dataplane
+6
View File
@@ -22,6 +22,12 @@ services:
environment:
- DB_SQLITE_FILE=/data/database.sqlite
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:81/api/ || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
# Setup Instructions:
# 1. Deploy this stack
+6
View File
@@ -28,6 +28,12 @@ services:
- OLLAMA_KEEP_ALIVE=-1
# Load multiple models concurrently (mistral-nemo + nomic-embed-text)
- OLLAMA_MAX_LOADED_MODELS=2
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:11434/api/tags || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
deploy:
resources:
limits:
+7
View File
@@ -7,6 +7,13 @@ services:
ports:
- "82:8080"
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:8080/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
environment:
# Ollama connection (direct - fallback)
- OLLAMA_BASE_URL=http://192.168.86.149:11434
+6 -2
View File
@@ -28,6 +28,12 @@ services:
- DB_NAME=organizr
- DB_USER=organizr_user
- DB_PASS=${ORGANIZR_DB_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:80/ || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- docker-dataplane
@@ -43,9 +49,7 @@ networks:
# 4. Complete setup wizard
# 5. Add tabs using MESH IPs for VPN access:
# - Portainer: http://10.99.0.1:8001
# - Uptime Kuma: http://10.99.0.1:3001
# - Netdata: http://10.99.0.1:19999
# - Heimdall: http://10.99.0.1:8888
# - Jellyfin: http://10.99.0.1:8096 (when deployed)
# - Nextcloud: http://10.99.0.1:8082 (when deployed)
#
+6
View File
@@ -19,6 +19,12 @@ services:
- portainer_data:/data # Persistent data storage
environment:
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:9000/api/system/status || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
volumes:
portainer_data:
+6
View File
@@ -21,6 +21,12 @@ services:
- /home/jpmschweitzer/docker-data/qdrant/snapshots:/qdrant/snapshots
environment:
- TZ=Europe/Amsterdam
healthcheck:
test: ["CMD-SHELL", "curl -fSs http://localhost:6333/readyz || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
resources:
limits:
+6
View File
@@ -32,6 +32,12 @@ services:
-s "Backups;/share/backups;yes;no;yes;all"
-u "jpmschweitzer;IG3omTybtVW3pVmmBi1D5FjnQ0MnZLUG"
-p
healthcheck:
test: ["CMD-SHELL", "pgrep smbd || exit 1"]
interval: 10m
timeout: 10s
retries: 3
start_period: 30s
networks:
- docker-dataplane
+2 -2
View File
@@ -4,11 +4,11 @@ version: '3.8'
# Purpose: System-wide maintenance orchestration - backups, doc mirroring, cleanup, task automation
# Port: 8090 (API + UI)
# Network: docker-dataplane
# Image: git.schweitz.net/jpmschweitzer/scheduler (private registry)
# Image: tower-of-joy:3002/jpmschweitzer/scheduler (internal registry)
services:
scheduler:
image: git.schweitz.net/jpmschweitzer/scheduler:latest
image: tower-of-joy:3002/jpmschweitzer/scheduler:latest
container_name: scheduler
restart: unless-stopped
+2 -2
View File
@@ -4,11 +4,11 @@ version: '3.8'
# Purpose: OpenAI-compatible API server with LLM agent orchestration
# Port: 8000 (API)
# Network: docker-dataplane
# Image: git.schweitz.net/jpmschweitzer/tatlock (private registry)
# Image: tower-of-joy:3002/jpmschweitzer/tatlock (internal registry)
services:
tatlock:
image: git.schweitz.net/jpmschweitzer/tatlock:latest
image: tower-of-joy:3002/jpmschweitzer/tatlock:latest
container_name: tatlock
restart: unless-stopped
-39
View File
@@ -1,39 +0,0 @@
version: '3.8'
# Uptime Kuma - Service Availability Monitoring
# Phase 3: Monitoring & Management
# Ports: 3001
# GPU: No
# Storage: SSD (monitoring data)
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- /home/jpmschweitzer/docker-data/uptime-kuma:/app/data
environment:
- TZ=Europe/Amsterdam
networks:
- docker-dataplane
networks:
docker-dataplane:
external: true
name: docker-dataplane
# After Deployment:
# 1. Access http://localhost:3001
# 2. Create admin account on first visit
# 3. Add monitors for services:
# - Jellyfin: http://localhost:8096
# - Nextcloud: http://localhost:8082
# - Portainer: http://localhost:8080
# - NPM: http://localhost:8000
# - Headscale: http://localhost:8085/health
# - Ollama: http://localhost:11434/api/tags
# 4. Set check intervals (60 seconds recommended)
# 5. Configure notifications (optional: email, Discord, Slack)
+6
View File
@@ -23,6 +23,12 @@ services:
# Optional: Monitor only specific containers
# - WATCHTOWER_LABEL_ENABLE=true # Only update containers with label com.centurylinklabs.watchtower.enable=true
healthcheck:
test: ["CMD-SHELL", "pgrep watchtower || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- docker-dataplane