From a8835801a7f6f024eb10e5e5f6f96d8176e06290 Mon Sep 17 00:00:00 2001 From: EZ-Homelab Date: Fri, 23 Jan 2026 15:53:22 -0500 Subject: [PATCH] refactor: Refine compose files with improved Traefik/Sablier labels - Enable Sablier by default for services with middleware definitions - Update label comments to indicate 'enabled by default - comment out to disable' - Ensure x-dockge sections have proxied URLs first, then direct IP:port - Remove any x-dockge labels from service configurations - Maintain well-documented, concise label sections for easy enable/disable --- docker-compose/dashboards/docker-compose.yml | 32 ++++++- .../infrastructure/docker-compose.yml | 60 +++++++++++-- docker-compose/media/docker-compose.yml | 35 ++++++-- .../productivity/docker-compose.yml | 87 +++++++++++++++---- 4 files changed, 177 insertions(+), 37 deletions(-) diff --git a/docker-compose/dashboards/docker-compose.yml b/docker-compose/dashboards/docker-compose.yml index 859dd60..9d050cd 100644 --- a/docker-compose/dashboards/docker-compose.yml +++ b/docker-compose/dashboards/docker-compose.yml @@ -45,8 +45,15 @@ services: - TZ=${TZ} - HOMEPAGE_ALLOWED_HOSTS=home.${DOMAIN} labels: + # ========================================== + # TRAEFIK CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=dashboard" - "homelab.description=Application dashboard (AI-configurable)" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.homepage.rule=Host(`home.${DOMAIN}`)" - "traefik.http.routers.homepage.entrypoints=websecure" @@ -83,18 +90,35 @@ services: environment: - TZ=${TZ} labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=dashboard" - "homelab.description=Modern homelab dashboard" - - "sablier.enable=true" - - "sablier.group=${SERVER_HOSTNAME:-debian}-homarr" - - "sablier.start-on-demand=true" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.homarr.rule=Host(`homarr.${DOMAIN}`)" - "traefik.http.routers.homarr.entrypoints=websecure" - "traefik.http.routers.homarr.tls=true" - "traefik.http.routers.homarr.middlewares=authelia@docker" - "traefik.http.services.homarr.loadbalancer.server.port=7575" - - "x-dockge.url=https://homarr.${DOMAIN}" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-homarr" + - "sablier.start-on-demand=true" + +# ========================================== +# DOCKGE URL CONFIGURATION +# ========================================== +x-dockge: + urls: + # Proxied URLs (through Traefik) + - https://home.${DOMAIN} + - https://homarr.${DOMAIN} networks: homelab-network: diff --git a/docker-compose/infrastructure/docker-compose.yml b/docker-compose/infrastructure/docker-compose.yml index a2c14c2..51b5cb3 100644 --- a/docker-compose/infrastructure/docker-compose.yml +++ b/docker-compose/infrastructure/docker-compose.yml @@ -139,17 +139,26 @@ services: - DOZZLE_TAILSIZE=300 - DOZZLE_FILTER=status=running labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "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 reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.dozzle.rule=Host(`dozzle.${DOMAIN}`)" - "traefik.http.routers.dozzle.entrypoints=websecure" - "traefik.http.routers.dozzle.tls=true" - "traefik.http.routers.dozzle.middlewares=authelia@docker" - "traefik.http.services.dozzle.loadbalancer.server.port=8080" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-dozzle" + - "sablier.start-on-demand=true" # Glances - System monitoring # Access at: https://glances.${DOMAIN} @@ -179,17 +188,26 @@ services: environment: - GLANCES_OPT=-w labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=infrastructure" - "homelab.description=System and Docker monitoring" - - "sablier.enable=true" - - "sablier.group=${SERVER_HOSTNAME:-debian}-glances" - - "sablier.start-on-demand=true" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.glances.rule=Host(`glances.${DOMAIN}`)" - "traefik.http.routers.glances.entrypoints=websecure" - "traefik.http.routers.glances.tls=true" - "traefik.http.routers.glances.middlewares=authelia@docker" - "traefik.http.services.glances.loadbalancer.server.port=61208" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-glances" + - "sablier.start-on-demand=true" # Code Server - VS Code in browser # Access at: https://code.${DOMAIN} @@ -223,17 +241,41 @@ services: - PASSWORD=${CODE_SERVER_PASSWORD} - SUDO_PASSWORD=${CODE_SERVER_SUDO_PASSWORD} labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "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 reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)" - "traefik.http.routers.code-server.entrypoints=websecure" - "traefik.http.routers.code-server.tls.certresolver=letsencrypt" - "traefik.http.routers.code-server.middlewares=authelia@docker" - "traefik.http.services.code-server.loadbalancer.server.port=8443" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-code-server" + - "sablier.start-on-demand=true" + +# ========================================== +# DOCKGE URL CONFIGURATION +# ========================================== +x-dockge: + urls: + # Proxied URLs (through Traefik) + - https://pihole.${DOMAIN} + - https://dozzle.${DOMAIN} + - https://glances.${DOMAIN} + - https://code.${DOMAIN} + + # Direct IP:Port URLs + - http://${SERVER_IP}:2375 # Docker Proxy + - http://${SERVER_IP}:19999 # Netdata networks: homelab-network: diff --git a/docker-compose/media/docker-compose.yml b/docker-compose/media/docker-compose.yml index e585fab..dcd620c 100644 --- a/docker-compose/media/docker-compose.yml +++ b/docker-compose/media/docker-compose.yml @@ -56,20 +56,27 @@ services: # devices: # - /dev/dri:/dev/dri labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=media" - "homelab.description=Open-source media streaming server" - - "sablier.enable=true" - - "sablier.group=${SERVER_HOSTNAME:-debian}-jellyfin" - - "sablier.start-on-demand=true" - - "sablier.theme=hacker-terminal" - # Traefik labels - NO Authelia for app access + + # Traefik reverse proxy (uncomment to enable - NO Authelia for app access) - "traefik.enable=true" - "traefik.http.routers.jellyfin.rule=Host(`jellyfin.${DOMAIN}`)" - "traefik.http.routers.jellyfin.entrypoints=websecure" - "traefik.http.routers.jellyfin.tls=true" - "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt" - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" - - "x-dockge.url=https://jellyfin.${DOMAIN}" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-jellyfin" + - "sablier.start-on-demand=true" + - "sablier.theme=hacker-terminal" # Calibre-Web - Ebook reader and server # Access at: https://calibre.${DOMAIN} @@ -101,8 +108,15 @@ services: - TZ=${TZ:-America/New_York} - DOCKER_MODS=linuxserver/mods:universal-calibre labels: + # ========================================== + # TRAEFIK CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=media" - "homelab.description=Ebook reader and library management" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)" - "traefik.http.routers.calibre.entrypoints=websecure" @@ -110,6 +124,15 @@ services: - "traefik.http.routers.calibre.middlewares=authelia@docker" - "traefik.http.services.calibre.loadbalancer.server.port=8083" +# ========================================== +# DOCKGE URL CONFIGURATION +# ========================================== +x-dockge: + urls: + # Proxied URLs (through Traefik) + - https://jellyfin.${DOMAIN} + - https://calibre.${DOMAIN} + networks: media-network: driver: bridge diff --git a/docker-compose/productivity/docker-compose.yml b/docker-compose/productivity/docker-compose.yml index bec1be9..3e82410 100644 --- a/docker-compose/productivity/docker-compose.yml +++ b/docker-compose/productivity/docker-compose.yml @@ -20,7 +20,7 @@ services: # Nextcloud - File sync and collaboration # Access at: https://nextcloud.${DOMAIN} - # File storage service should always run for continuous sync + # Uses Sablier lazy loading - starts on-demand, stops after 5min inactivity nextcloud: image: nextcloud:28 deploy: @@ -33,7 +33,7 @@ services: cpus: '0.75' memory: 512M container_name: nextcloud - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -57,19 +57,32 @@ services: depends_on: - nextcloud-db labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=productivity" - "homelab.description=File sync and collaboration" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${DOMAIN}`)" - "traefik.http.routers.nextcloud.entrypoints=websecure" - "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt" - "traefik.http.routers.nextcloud.middlewares=authelia@docker" - "traefik.http.services.nextcloud.loadbalancer.server.port=80" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-nextcloud" + - "sablier.start-on-demand=true" nextcloud-db: + restart: unless-stopped image: mariadb:10.11 container_name: nextcloud-db - restart: unless-stopped + restart: no networks: - nextcloud-network volumes: @@ -89,7 +102,7 @@ services: mealie: image: ghcr.io/mealie-recipes/mealie:latest container_name: mealie - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -118,7 +131,7 @@ services: wordpress: image: wordpress:latest container_name: wordpress - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -145,9 +158,10 @@ services: # No Authelia - public blog wordpress-db: + restart: unless-stopped image: mariadb:10.11 container_name: wordpress-db - restart: unless-stopped + restart: no networks: - wordpress-network volumes: @@ -175,7 +189,7 @@ services: cpus: '0.25' memory: 128M container_name: gitea - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -207,9 +221,10 @@ services: - "traefik.http.services.gitea.loadbalancer.server.port=3000" gitea-db: + restart: unless-stopped image: postgres:14-alpine container_name: gitea-db - restart: unless-stopped + restart: no networks: - gitea-network volumes: @@ -241,24 +256,34 @@ services: - PGID=${PGID:-1000} - TZ=${TZ} labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=productivity" - "homelab.description=File-based wiki" - - "sablier.enable=true" - - "sablier.group=${SERVER_HOSTNAME:-debian}-dokuwiki" - - "sablier.start-on-demand=true" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.dokuwiki.rule=Host(`dokuwiki.${DOMAIN}`)" - "traefik.http.routers.dokuwiki.entrypoints=websecure" - "traefik.http.routers.dokuwiki.tls.certresolver=letsencrypt" - "traefik.http.routers.dokuwiki.middlewares=authelia@docker" - "traefik.http.services.dokuwiki.loadbalancer.server.port=80" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-dokuwiki" + - "sablier.start-on-demand=true" # BookStack - Documentation platform # Access at: https://docs.${DOMAIN} + # Uses Sablier lazy loading - starts on-demand, stops after 5min inactivity bookstack: image: lscr.io/linuxserver/bookstack:latest container_name: bookstack - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -280,21 +305,32 @@ services: depends_on: - bookstack-db labels: + # ========================================== + # TRAEFIK & SABLIER CONFIGURATION + # ========================================== + + # Service metadata - "homelab.category=productivity" - "homelab.description=Documentation and wiki platform" + + # Traefik reverse proxy (uncomment to enable) - "traefik.enable=true" - "traefik.http.routers.bookstack.rule=Host(`bookstack.${DOMAIN}`)" - "traefik.http.routers.bookstack.entrypoints=websecure" - "traefik.http.routers.bookstack.tls.certresolver=letsencrypt" - "traefik.http.routers.bookstack.middlewares=authelia@docker" - "traefik.http.services.bookstack.loadbalancer.server.port=80" - - "x-dockge.url=https://bookstack.${DOMAIN}" - - "x-dockge.url=https://bookstack.${DOMAIN}" + + # Sablier lazy loading (enabled by default - comment out to disable) + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME:-debian}-bookstack" + - "sablier.start-on-demand=true" bookstack-db: + restart: unless-stopped image: mariadb:10.11 container_name: bookstack-db - restart: unless-stopped + restart: no networks: - bookstack-network volumes: @@ -313,7 +349,7 @@ services: mediawiki: image: mediawiki:latest container_name: mediawiki - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -341,9 +377,10 @@ services: - "traefik.http.services.mediawiki.loadbalancer.server.port=80" mediawiki-db: + restart: unless-stopped image: mariadb:10.11 container_name: mediawiki-db - restart: unless-stopped + restart: no networks: - mediawiki-network volumes: @@ -363,7 +400,7 @@ services: jupyter: image: jupyter/scipy-notebook:latest container_name: jupyter - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -401,6 +438,20 @@ volumes: bookstack-db-data: mediawiki-db-data: +# ========================================== +# DOCKGE URL CONFIGURATION +# ========================================== +x-dockge: + urls: + # Proxied URLs (through Traefik) + - https://nextcloud.${DOMAIN} + - https://mealie.${DOMAIN} + - https://wordpress.${DOMAIN} + - https://gitea.${DOMAIN} + - https://bookstack.${DOMAIN} + - https://dokuwiki.${DOMAIN} + - https://mediawiki.${DOMAIN} + networks: homelab-network: external: true