feat: Add comprehensive restart policy documentation and Sablier lazy loading support

- Add SERVER_HOSTNAME env var for Sablier group naming
- Update default hostname from 'jarvis' to 'debian' for generic repo compatibility
- Add restart policy documentation to all docker-compose files
- Add Sablier labels to lazy-loaded services (jellyfin, dozzle, glances, code-server, homarr, dokuwiki)
- Update sablier.yml template to use debian- prefixes
- Enhance deploy script to auto-detect hostname and update configurations
- Ensure all YAML files remain syntactically valid
This commit is contained in:
EZ-Homelab
2026-01-22 19:49:24 -05:00
parent 30bf095fd3
commit 9cc0e93c79
14 changed files with 172 additions and 59 deletions

View File

@@ -4,6 +4,11 @@
# NOTE: Traefik, Authelia, DuckDNS, and Gluetun have their own separate stacks
# See /opt/stacks/traefik/, /opt/stacks/authelia/, etc.
# RESTART POLICY GUIDE:
# - unless-stopped: Core infrastructure services that should always run
# - no: Services with Sablier lazy loading (start on-demand)
# - See individual service comments for specific reasoning
# Service Access URLs:
# - Portainer: https://portainer.${DOMAIN}
# - Pi-hole: https://pihole.${DOMAIN}
@@ -13,6 +18,7 @@
services:
dockerproxy:
# Docker socket proxy for security - provides safe Docker API access, must always run
image: tecnativa/docker-socket-proxy:latest
container_name: dockerproxy
privileged: true
@@ -33,6 +39,7 @@ services:
# Pi-hole - Network-wide ad blocker and DNS server
# Access at: https://pihole.${DOMAIN}
# DNS service must always run for network-wide ad blocking
pihole:
image: pihole/pihole:2024.01.0
deploy:
@@ -76,14 +83,6 @@ services:
- "traefik.http.services.pihole.loadbalancer.server.port=80"
- "x-dockge.url=https://pihole.${DOMAIN}"
# Watchtower - Automatic container updates
# TEMPORARILY DISABLED: Docker API version incompatibility with Docker 29.x
# Watchtower versions have API compatibility issues:
# - v1.7.1: Uses API v1.25 (too old for Docker 29.x which requires min v1.44)
# - v1.7.2+/latest: Has issues with API negotiation
# Issue tracked for resolution in future release
# To enable: Uncomment service below and run: docker compose up -d watchtower
#
# Watchtower - Automatic container updates
# Monitors and updates Docker containers to latest versions
# Runs daily at 4 AM
@@ -108,6 +107,7 @@ services:
# Dozzle - Real-time Docker log viewer
# Access at: https://dozzle.${DOMAIN}
# Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity
dozzle:
image: amir20/dozzle:latest
deploy:
@@ -133,6 +133,9 @@ services:
labels:
- "homelab.category=infrastructure"
- "homelab.description=Real-time Docker log viewer"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-dozzle"
- "sablier.start-on-demand=true"
- "traefik.enable=true"
- "traefik.http.routers.dozzle.rule=Host(`dozzle.${DOMAIN}`)"
- "traefik.http.routers.dozzle.entrypoints=websecure"
@@ -142,6 +145,7 @@ services:
# Glances - System monitoring
# Access at: https://glances.${DOMAIN}
# Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity
glances:
image: nicolargo/glances:latest-full
deploy:
@@ -167,6 +171,9 @@ services:
labels:
- "homelab.category=infrastructure"
- "homelab.description=System and Docker monitoring"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-glances"
- "sablier.start-on-demand=true"
- "traefik.enable=true"
- "traefik.http.routers.glances.rule=Host(`glances.${DOMAIN}`)"
- "traefik.http.routers.glances.entrypoints=websecure"
@@ -176,6 +183,7 @@ services:
# Code Server - VS Code in browser
# Access at: https://code.${DOMAIN}
# Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity
code-server:
image: lscr.io/linuxserver/code-server:latest
deploy:
@@ -205,6 +213,9 @@ services:
labels:
- "homelab.category=infrastructure"
- "homelab.description=VS Code in browser"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-code-server"
- "sablier.start-on-demand=true"
- "traefik.enable=true"
- "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)"
- "traefik.http.routers.code-server.entrypoints=websecure"