Round 4 improvements: automated config, relative paths, simplified deployment

- Automate Traefik email substitution in deploy script
- Auto-generate Authelia admin password (saved to ADMIN_PASSWORD.txt)
- Standardize all volume paths to use relative paths (./service/config)
- Switch Traefik to HTTP challenge by default (DNS challenge optional)
- Update documentation with improved setup instructions
- Enhance troubleshooting guide
- Update AGENT_INSTRUCTIONS with new conventions
- Simplify .env.example with clearer guidance

These changes reduce manual configuration steps and improve deployment reliability.
This commit is contained in:
2026-01-13 18:30:06 -05:00
parent f92424ed6d
commit f0a3907002
14 changed files with 316 additions and 80 deletions

View File

@@ -18,7 +18,7 @@ services:
- TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token
- UPDATE_IP=ipv4 # or ipv6, or both
volumes:
- /opt/stacks/core/duckdns:/config
- ./duckdns:/config
labels:
- "homelab.category=infrastructure"
- "homelab.description=Dynamic DNS updater"
@@ -40,9 +40,9 @@ services:
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /opt/stacks/core/traefik/traefik.yml:/traefik.yml:ro
- /opt/stacks/core/traefik/dynamic:/dynamic:ro
- /opt/stacks/core/traefik/acme.json:/acme.json
- ./traefik/traefik.yml:/traefik.yml:ro
- ./traefik/dynamic:/dynamic:ro
- ./traefik/acme.json:/acme.json
environment:
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} # If using Cloudflare DNS challenge
- DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # If using DuckDNS
@@ -73,8 +73,8 @@ services:
networks:
- traefik-network
volumes:
- /opt/stacks/core/authelia/configuration.yml:/config/configuration.yml:ro
- /opt/stacks/core/authelia/users_database.yml:/config/users_database.yml
- ./authelia/configuration.yml:/config/configuration.yml:ro
- ./authelia/users_database.yml:/config/users_database.yml
- authelia-data:/data
environment:
- TZ=${TZ}
@@ -115,7 +115,7 @@ services:
- "6881:6881" # qBittorrent
- "6881:6881/udp" # qBittorrent
volumes:
- /opt/stacks/core/gluetun:/gluetun
- ./gluetun:/gluetun
environment:
- VPN_SERVICE_PROVIDER=surfshark
- VPN_TYPE=openvpn

View File

@@ -14,7 +14,7 @@ services:
- traefik-network
- dockerproxy-network
volumes:
- /opt/stacks/homepage/config:/app/config
- ./homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro # For Docker integration
- /opt/stacks:/opt/stacks:ro # To discover other stacks
environment:
@@ -42,9 +42,9 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/homarr/configs:/app/data/configs
- /opt/stacks/homarr/data:/data
- /opt/stacks/homarr/icons:/app/public/icons
- ./homarr/config:/app/config/configs
- ./homarr/data:/data
- ./homarr/icons:/app/public/icons
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=${TZ}

View File

@@ -12,7 +12,7 @@ services:
restart: unless-stopped
network_mode: host # Required for device discovery
volumes:
- /opt/stacks/homeassistant/config:/config
- ./$(basename $file .yml)/config:/config
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=${TZ}
@@ -33,7 +33,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/esphome/config:/config
- ./$(basename $file .yml)/config:/config
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=${TZ}
@@ -84,7 +84,7 @@ services:
ports:
- "8765:8765" # Optional: direct access
volumes:
- /opt/stacks/motioneye/config:/etc/motioneye
- ./$(basename $file .yml)/config:/etc/motioneye
- /mnt/surveillance:/var/lib/motioneye # Large video files on separate drive
environment:
- TZ=${TZ}
@@ -133,7 +133,7 @@ services:
- "1883:1883" # MQTT
- "9001:9001" # Websockets
volumes:
- /opt/stacks/mosquitto/config:/mosquitto/config
- ./$(basename $file .yml)/config:/mosquitto/config
- /opt/stacks/mosquitto/data:/mosquitto/data
- /opt/stacks/mosquitto/log:/mosquitto/log
labels:

View File

@@ -45,8 +45,8 @@ services:
- "53:53/tcp" # DNS TCP
- "53:53/udp" # DNS UDP
volumes:
- /opt/stacks/pihole/etc-pihole:/etc/pihole
- /opt/stacks/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
- ./pihole/etc-pihole:/etc/pihole
- ./pihole/etc-dnsmasq.d:/etc/dnsmasq.d
environment:
- TZ=${TZ:-America/New_York}
- WEBPASSWORD=${PIHOLE_PASSWORD:-changeme}
@@ -145,7 +145,7 @@ services:
pid: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /opt/stacks/glances/config:/glances/conf
- ./glances/config:/glances/conf
environment:
- GLANCES_OPT=-w
labels:

View File

@@ -14,7 +14,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/readarr/config:/config
- ./$(basename $file .yml)/config:/config
- /mnt/media/books:/books
- /mnt/downloads:/downloads
environment:
@@ -42,7 +42,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/lidarr/config:/config
- ./$(basename $file .yml)/config:/config
- /mnt/media/music:/music
- /mnt/downloads:/downloads
environment:
@@ -70,7 +70,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/lazylibrarian/config:/config
- ./$(basename $file .yml)/config:/config
- /mnt/media/books:/books
- /mnt/downloads:/downloads
environment:
@@ -127,7 +127,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/calibre-web/config:/config
- ./$(basename $file .yml)/config:/config
- /mnt/media/books:/books
environment:
- PUID=${PUID:-1000}
@@ -155,7 +155,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/jellyseerr/config:/app/config
- ./$(basename $file .yml)/config:/app/config
environment:
- LOG_LEVEL=info
- TZ=${TZ}
@@ -198,7 +198,7 @@ services:
- "8266:8266" # Server port
volumes:
- /opt/stacks/tdarr/server:/app/server
- /opt/stacks/tdarr/configs:/app/configs
- ./$(basename $file .yml)/configs:/app/configs
- /opt/stacks/tdarr/logs:/app/logs
- /mnt/media:/media
- /mnt/tdarr-transcode:/temp # Transcode cache on separate drive
@@ -228,7 +228,7 @@ services:
networks:
- media-network
volumes:
- /opt/stacks/tdarr/configs:/app/configs
- ./$(basename $file .yml)/configs:/app/configs
- /opt/stacks/tdarr/logs:/app/logs
- /mnt/media:/media
- /mnt/tdarr-transcode:/temp
@@ -256,7 +256,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/unmanic/config:/config
- ./$(basename $file .yml)/config:/config
- /mnt/media:/library
- /mnt/unmanic-cache:/tmp/unmanic # Transcode cache on separate drive
environment:

View File

@@ -16,7 +16,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/plex/config:/config
- ./plex/config:/config
- /mnt/media:/media:ro # Large media files on separate drive
- plex-transcode:/transcode
environment:
@@ -64,8 +64,8 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/jellyfin/config:/config
- /opt/stacks/jellyfin/cache:/cache
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /mnt/media:/media:ro # Large media files on separate drive
environment:
- PUID=${PUID:-1000}
@@ -95,7 +95,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/sonarr/config:/config
- ./sonarr/config:/config
- /mnt/media:/media
- /mnt/downloads:/downloads # Large downloads on separate drive
environment:
@@ -124,7 +124,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/radarr/config:/config
- ./radarr/config:/config
- /mnt/media:/media
- /mnt/downloads:/downloads # Large downloads on separate drive
environment:
@@ -153,7 +153,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/prowlarr/config:/config
- ./prowlarr/config:/config
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}

View File

@@ -188,7 +188,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/dokuwiki/config:/config
- ./$(basename $file .yml)/config:/config
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
@@ -214,7 +214,7 @@ services:
- traefik-network
- bookstack-network
volumes:
- /opt/stacks/bookstack/config:/config
- ./$(basename $file .yml)/config:/config
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}

View File

@@ -13,7 +13,7 @@ services:
- traefik-network
volumes:
- /opt/stacks/backrest/data:/data
- /opt/stacks/backrest/config:/config
- ./$(basename $file .yml)/config:/config
- /opt/stacks:/opt/stacks:ro # Backup source
- /mnt:/mnt:ro # Backup additional drives
- backrest-cache:/cache
@@ -41,7 +41,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/duplicati/config:/config
- ./$(basename $file .yml)/config:/config
- /opt/stacks:/source/stacks:ro
- /mnt:/source/mnt:ro
- /mnt/backups:/backups
@@ -69,7 +69,7 @@ services:
- homelab-network
- traefik-network
volumes:
- /opt/stacks/code-server/config:/config
- ./$(basename $file .yml)/config:/config
- /opt/stacks:/opt/stacks # Access to all stacks
- /mnt:/mnt:ro # Read-only access to data
environment: