# ========= NETWORKS ========= # networks: proxy: driver: bridge ipam: config: - subnet: redacted # top-level declaration of all named volumes # volumes: filebrowser_data: filebrowser_database: homarr_data: mealie_data: n8n_data: n8n_files: npm_data: npm_letsencrypt: rustdesk_data: trilium_data: uptime_kuma_data: services: # ===== File Browser ===== # filebrowser: image: filebrowser/filebrowser:latest container_name: filebrowser restart: unless-stopped environment: - TZ=America/Chicago volumes: # Volume for your browsable files - filebrowser_data:/srv # Volume for the application database (users, settings) - filebrowser_database:/database networks: - proxy # ===== Homarr ===== # homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago - SECRET_ENCRYPTION_KEY=redacted - REDIS_HOST=redis - REDIS_PORT=6379 volumes: - homarr_data:/appdata - /var/run/docker.sock:/var/run/docker.sock # This must remain a bind mount networks: - proxy redis: image: redis:alpine container_name: redis restart: unless-stopped networks: - proxy # ===== Mealie ===== # mealie: image: ghcr.io/mealie-recipes/mealie:latest container_name: mealie restart: unless-stopped volumes: - mealie_data:/app/data/ environment: - ALLOW_SIGNUP=false - PUID=1000 - PGID=1000 - TZ=America/Chicago - BASE_URL=redacted networks: - proxy # ===== n8n ===== # n8n: container_name: n8n image: n8nio/n8n:latest restart: unless-stopped environment: - PUID=1000 - PGID=1000 - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - N8N_HOST=redacted - N8N_PORT=5678 - N8N_PROTOCOL=https - WEBHOOK_URL=redacted - GENERIC_TIMEZONE=America/Chicago - TZ=America/Chicago volumes: - n8n_data:/home/node/.n8n - n8n_files:/files networks: - proxy # ===== Nginx Reverse Proxy ===== # nginx-proxy-manager: container_name: npm image: jc21/nginx-proxy-manager:latest restart: unless-stopped ports: - "80:80" # HTTP - "443:443" # HTTPS - "81:81" # NPM admin UI volumes: - npm_data:/data - npm_letsencrypt:/etc/letsencrypt networks: - proxy # ===== RustDesk Server (HBBS + HBBR) ===== # hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs volumes: - rustdesk_data:/root network_mode: "host" restart: unless-stopped hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr volumes: - rustdesk_data:/root network_mode: "host" restart: unless-stopped # ===== Trilium Notes ===== # trilium: container_name: trilium image: triliumnext/notes:latest restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago volumes: - trilium_data:/home/node/trilium-data networks: - proxy # ===== Uptime Kuma ===== # uptime-kuma: container_name: uptime-kuma image: louislam/uptime-kuma:latest restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago - UMASK=0022 volumes: - uptime_kuma_data:/app/data - /var/run/docker.sock:/var/run/docker.sock # This must remain a bind mount networks: - proxy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001"] interval: 30s retries: 3 start_period: 10s timeout: 5s logging: driver: "json-file" options: max-size: "10m" max-file: "3" # ===== Watchtower ===== # watchtower: container_name: watchtower image: containrrr/watchtower:latest restart: unless-stopped environment: - TZ=America/Chicago - WATCHTOWER_CLEANUP=true - WATCHTOWER_ROLLING_RESTART=true volumes: - /var/run/docker.sock:/var/run/docker.sock # This must remain a bind mount