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
This commit is contained in:
EZ-Homelab
2026-01-23 15:53:22 -05:00
parent 3701b11a73
commit a8835801a7
4 changed files with 177 additions and 37 deletions

View File

@@ -45,8 +45,15 @@ services:
- TZ=${TZ} - TZ=${TZ}
- HOMEPAGE_ALLOWED_HOSTS=home.${DOMAIN} - HOMEPAGE_ALLOWED_HOSTS=home.${DOMAIN}
labels: labels:
# ==========================================
# TRAEFIK CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=dashboard" - "homelab.category=dashboard"
- "homelab.description=Application dashboard (AI-configurable)" - "homelab.description=Application dashboard (AI-configurable)"
# Traefik reverse proxy (uncomment to enable)
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.homepage.rule=Host(`home.${DOMAIN}`)" - "traefik.http.routers.homepage.rule=Host(`home.${DOMAIN}`)"
- "traefik.http.routers.homepage.entrypoints=websecure" - "traefik.http.routers.homepage.entrypoints=websecure"
@@ -83,18 +90,35 @@ services:
environment: environment:
- TZ=${TZ} - TZ=${TZ}
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=dashboard" - "homelab.category=dashboard"
- "homelab.description=Modern homelab dashboard" - "homelab.description=Modern homelab dashboard"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-homarr" # Traefik reverse proxy (uncomment to enable)
- "sablier.start-on-demand=true"
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.homarr.rule=Host(`homarr.${DOMAIN}`)" - "traefik.http.routers.homarr.rule=Host(`homarr.${DOMAIN}`)"
- "traefik.http.routers.homarr.entrypoints=websecure" - "traefik.http.routers.homarr.entrypoints=websecure"
- "traefik.http.routers.homarr.tls=true" - "traefik.http.routers.homarr.tls=true"
- "traefik.http.routers.homarr.middlewares=authelia@docker" - "traefik.http.routers.homarr.middlewares=authelia@docker"
- "traefik.http.services.homarr.loadbalancer.server.port=7575" - "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: networks:
homelab-network: homelab-network:

View File

@@ -139,11 +139,15 @@ services:
- DOZZLE_TAILSIZE=300 - DOZZLE_TAILSIZE=300
- DOZZLE_FILTER=status=running - DOZZLE_FILTER=status=running
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=infrastructure" - "homelab.category=infrastructure"
- "homelab.description=Real-time Docker log viewer" - "homelab.description=Real-time Docker log viewer"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-dozzle" # Traefik reverse proxy (uncomment to enable)
- "sablier.start-on-demand=true"
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.dozzle.rule=Host(`dozzle.${DOMAIN}`)" - "traefik.http.routers.dozzle.rule=Host(`dozzle.${DOMAIN}`)"
- "traefik.http.routers.dozzle.entrypoints=websecure" - "traefik.http.routers.dozzle.entrypoints=websecure"
@@ -151,6 +155,11 @@ services:
- "traefik.http.routers.dozzle.middlewares=authelia@docker" - "traefik.http.routers.dozzle.middlewares=authelia@docker"
- "traefik.http.services.dozzle.loadbalancer.server.port=8080" - "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 # Glances - System monitoring
# Access at: https://glances.${DOMAIN} # Access at: https://glances.${DOMAIN}
# Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity # Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity
@@ -179,11 +188,15 @@ services:
environment: environment:
- GLANCES_OPT=-w - GLANCES_OPT=-w
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=infrastructure" - "homelab.category=infrastructure"
- "homelab.description=System and Docker monitoring" - "homelab.description=System and Docker monitoring"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-glances" # Traefik reverse proxy (uncomment to enable)
- "sablier.start-on-demand=true"
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.glances.rule=Host(`glances.${DOMAIN}`)" - "traefik.http.routers.glances.rule=Host(`glances.${DOMAIN}`)"
- "traefik.http.routers.glances.entrypoints=websecure" - "traefik.http.routers.glances.entrypoints=websecure"
@@ -191,6 +204,11 @@ services:
- "traefik.http.routers.glances.middlewares=authelia@docker" - "traefik.http.routers.glances.middlewares=authelia@docker"
- "traefik.http.services.glances.loadbalancer.server.port=61208" - "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 # Code Server - VS Code in browser
# Access at: https://code.${DOMAIN} # Access at: https://code.${DOMAIN}
# Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity # Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity
@@ -223,11 +241,15 @@ services:
- PASSWORD=${CODE_SERVER_PASSWORD} - PASSWORD=${CODE_SERVER_PASSWORD}
- SUDO_PASSWORD=${CODE_SERVER_SUDO_PASSWORD} - SUDO_PASSWORD=${CODE_SERVER_SUDO_PASSWORD}
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=infrastructure" - "homelab.category=infrastructure"
- "homelab.description=VS Code in browser" - "homelab.description=VS Code in browser"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-code-server" # Traefik reverse proxy (uncomment to enable)
- "sablier.start-on-demand=true"
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)" - "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)"
- "traefik.http.routers.code-server.entrypoints=websecure" - "traefik.http.routers.code-server.entrypoints=websecure"
@@ -235,6 +257,26 @@ services:
- "traefik.http.routers.code-server.middlewares=authelia@docker" - "traefik.http.routers.code-server.middlewares=authelia@docker"
- "traefik.http.services.code-server.loadbalancer.server.port=8443" - "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: networks:
homelab-network: homelab-network:
external: true external: true

View File

@@ -56,20 +56,27 @@ services:
# devices: # devices:
# - /dev/dri:/dev/dri # - /dev/dri:/dev/dri
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=media" - "homelab.category=media"
- "homelab.description=Open-source media streaming server" - "homelab.description=Open-source media streaming server"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-jellyfin" # Traefik reverse proxy (uncomment to enable - NO Authelia for app access)
- "sablier.start-on-demand=true"
- "sablier.theme=hacker-terminal"
# Traefik labels - NO Authelia for app access
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.jellyfin.rule=Host(`jellyfin.${DOMAIN}`)" - "traefik.http.routers.jellyfin.rule=Host(`jellyfin.${DOMAIN}`)"
- "traefik.http.routers.jellyfin.entrypoints=websecure" - "traefik.http.routers.jellyfin.entrypoints=websecure"
- "traefik.http.routers.jellyfin.tls=true" - "traefik.http.routers.jellyfin.tls=true"
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt" - "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096" - "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 # Calibre-Web - Ebook reader and server
# Access at: https://calibre.${DOMAIN} # Access at: https://calibre.${DOMAIN}
@@ -101,8 +108,15 @@ services:
- TZ=${TZ:-America/New_York} - TZ=${TZ:-America/New_York}
- DOCKER_MODS=linuxserver/mods:universal-calibre - DOCKER_MODS=linuxserver/mods:universal-calibre
labels: labels:
# ==========================================
# TRAEFIK CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=media" - "homelab.category=media"
- "homelab.description=Ebook reader and library management" - "homelab.description=Ebook reader and library management"
# Traefik reverse proxy (uncomment to enable)
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)" - "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)"
- "traefik.http.routers.calibre.entrypoints=websecure" - "traefik.http.routers.calibre.entrypoints=websecure"
@@ -110,6 +124,15 @@ services:
- "traefik.http.routers.calibre.middlewares=authelia@docker" - "traefik.http.routers.calibre.middlewares=authelia@docker"
- "traefik.http.services.calibre.loadbalancer.server.port=8083" - "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: networks:
media-network: media-network:
driver: bridge driver: bridge

View File

@@ -20,7 +20,7 @@
services: services:
# Nextcloud - File sync and collaboration # Nextcloud - File sync and collaboration
# Access at: https://nextcloud.${DOMAIN} # 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: nextcloud:
image: nextcloud:28 image: nextcloud:28
deploy: deploy:
@@ -33,7 +33,7 @@ services:
cpus: '0.75' cpus: '0.75'
memory: 512M memory: 512M
container_name: nextcloud container_name: nextcloud
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -57,8 +57,15 @@ services:
depends_on: depends_on:
- nextcloud-db - nextcloud-db
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=productivity" - "homelab.category=productivity"
- "homelab.description=File sync and collaboration" - "homelab.description=File sync and collaboration"
# Traefik reverse proxy (uncomment to enable)
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${DOMAIN}`)" - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${DOMAIN}`)"
- "traefik.http.routers.nextcloud.entrypoints=websecure" - "traefik.http.routers.nextcloud.entrypoints=websecure"
@@ -66,10 +73,16 @@ services:
- "traefik.http.routers.nextcloud.middlewares=authelia@docker" - "traefik.http.routers.nextcloud.middlewares=authelia@docker"
- "traefik.http.services.nextcloud.loadbalancer.server.port=80" - "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: nextcloud-db:
restart: unless-stopped
image: mariadb:10.11 image: mariadb:10.11
container_name: nextcloud-db container_name: nextcloud-db
restart: unless-stopped restart: no
networks: networks:
- nextcloud-network - nextcloud-network
volumes: volumes:
@@ -89,7 +102,7 @@ services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:latest image: ghcr.io/mealie-recipes/mealie:latest
container_name: mealie container_name: mealie
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -118,7 +131,7 @@ services:
wordpress: wordpress:
image: wordpress:latest image: wordpress:latest
container_name: wordpress container_name: wordpress
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -145,9 +158,10 @@ services:
# No Authelia - public blog # No Authelia - public blog
wordpress-db: wordpress-db:
restart: unless-stopped
image: mariadb:10.11 image: mariadb:10.11
container_name: wordpress-db container_name: wordpress-db
restart: unless-stopped restart: no
networks: networks:
- wordpress-network - wordpress-network
volumes: volumes:
@@ -175,7 +189,7 @@ services:
cpus: '0.25' cpus: '0.25'
memory: 128M memory: 128M
container_name: gitea container_name: gitea
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -207,9 +221,10 @@ services:
- "traefik.http.services.gitea.loadbalancer.server.port=3000" - "traefik.http.services.gitea.loadbalancer.server.port=3000"
gitea-db: gitea-db:
restart: unless-stopped
image: postgres:14-alpine image: postgres:14-alpine
container_name: gitea-db container_name: gitea-db
restart: unless-stopped restart: no
networks: networks:
- gitea-network - gitea-network
volumes: volumes:
@@ -241,11 +256,15 @@ services:
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
- TZ=${TZ} - TZ=${TZ}
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=productivity" - "homelab.category=productivity"
- "homelab.description=File-based wiki" - "homelab.description=File-based wiki"
- "sablier.enable=true"
- "sablier.group=${SERVER_HOSTNAME:-debian}-dokuwiki" # Traefik reverse proxy (uncomment to enable)
- "sablier.start-on-demand=true"
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.dokuwiki.rule=Host(`dokuwiki.${DOMAIN}`)" - "traefik.http.routers.dokuwiki.rule=Host(`dokuwiki.${DOMAIN}`)"
- "traefik.http.routers.dokuwiki.entrypoints=websecure" - "traefik.http.routers.dokuwiki.entrypoints=websecure"
@@ -253,12 +272,18 @@ services:
- "traefik.http.routers.dokuwiki.middlewares=authelia@docker" - "traefik.http.routers.dokuwiki.middlewares=authelia@docker"
- "traefik.http.services.dokuwiki.loadbalancer.server.port=80" - "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 # BookStack - Documentation platform
# Access at: https://docs.${DOMAIN} # Access at: https://docs.${DOMAIN}
# Uses Sablier lazy loading - starts on-demand, stops after 5min inactivity
bookstack: bookstack:
image: lscr.io/linuxserver/bookstack:latest image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack container_name: bookstack
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -280,21 +305,32 @@ services:
depends_on: depends_on:
- bookstack-db - bookstack-db
labels: labels:
# ==========================================
# TRAEFIK & SABLIER CONFIGURATION
# ==========================================
# Service metadata
- "homelab.category=productivity" - "homelab.category=productivity"
- "homelab.description=Documentation and wiki platform" - "homelab.description=Documentation and wiki platform"
# Traefik reverse proxy (uncomment to enable)
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.bookstack.rule=Host(`bookstack.${DOMAIN}`)" - "traefik.http.routers.bookstack.rule=Host(`bookstack.${DOMAIN}`)"
- "traefik.http.routers.bookstack.entrypoints=websecure" - "traefik.http.routers.bookstack.entrypoints=websecure"
- "traefik.http.routers.bookstack.tls.certresolver=letsencrypt" - "traefik.http.routers.bookstack.tls.certresolver=letsencrypt"
- "traefik.http.routers.bookstack.middlewares=authelia@docker" - "traefik.http.routers.bookstack.middlewares=authelia@docker"
- "traefik.http.services.bookstack.loadbalancer.server.port=80" - "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: bookstack-db:
restart: unless-stopped
image: mariadb:10.11 image: mariadb:10.11
container_name: bookstack-db container_name: bookstack-db
restart: unless-stopped restart: no
networks: networks:
- bookstack-network - bookstack-network
volumes: volumes:
@@ -313,7 +349,7 @@ services:
mediawiki: mediawiki:
image: mediawiki:latest image: mediawiki:latest
container_name: mediawiki container_name: mediawiki
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -341,9 +377,10 @@ services:
- "traefik.http.services.mediawiki.loadbalancer.server.port=80" - "traefik.http.services.mediawiki.loadbalancer.server.port=80"
mediawiki-db: mediawiki-db:
restart: unless-stopped
image: mariadb:10.11 image: mariadb:10.11
container_name: mediawiki-db container_name: mediawiki-db
restart: unless-stopped restart: no
networks: networks:
- mediawiki-network - mediawiki-network
volumes: volumes:
@@ -363,7 +400,7 @@ services:
jupyter: jupyter:
image: jupyter/scipy-notebook:latest image: jupyter/scipy-notebook:latest
container_name: jupyter container_name: jupyter
restart: unless-stopped restart: no
networks: networks:
- homelab-network - homelab-network
- traefik-network - traefik-network
@@ -401,6 +438,20 @@ volumes:
bookstack-db-data: bookstack-db-data:
mediawiki-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: networks:
homelab-network: homelab-network:
external: true external: true