Refactor docker-compose configurations and add new services
- Reorganize Authelia configuration files - Add new dynamic routing files for Traefik - Update various service docker-compose files - Remove outdated templates and scripts
This commit is contained in:
@@ -1,28 +0,0 @@
|
||||
# Environment Variables Template for Core Services
|
||||
# Copy this file to .env and fill in your values
|
||||
|
||||
# User and Group IDs for file permissions (get with: id -u and id -g)
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
TZ=America/New_York
|
||||
|
||||
SERVER_IP=192.168.1.100
|
||||
SERVER_HOSTNAME=your-server-name
|
||||
|
||||
# Domain & DuckDNS Configuration
|
||||
DUCKDNS_SUBDOMAINS=your-subdomain # Without .duckdns.org
|
||||
DOMAIN=your-subdomain.duckdns.org
|
||||
DUCKDNS_TOKEN=your-duckdns-token-here
|
||||
|
||||
# Default credentials (used by multiple services for easier setup)
|
||||
DEFAULT_USER=admin
|
||||
DEFAULT_PASSWORD=change-this-password
|
||||
|
||||
# Authelia Configuration
|
||||
AUTHELIA_JWT_SECRET=your-jwt-secret-here
|
||||
AUTHELIA_SESSION_SECRET=your-session-secret-here
|
||||
AUTHELIA_STORAGE_ENCRYPTION_KEY=your-encryption-key-here
|
||||
|
||||
# Let's Encrypt Configuration
|
||||
ACME_EMAIL=your-email@example.com
|
||||
@@ -1,6 +1,6 @@
|
||||
# Authelia Configuration
|
||||
# Copy to /opt/stacks/authelia/configuration.yml
|
||||
# IMPORTANT: Replace 'kelinreij.duckdns.org' with your actual DuckDNS domain
|
||||
# IMPORTANT: Replace 'your-domain.duckdns.org' with your actual DuckDNS domain
|
||||
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
@@ -11,18 +11,18 @@ log:
|
||||
|
||||
theme: dark
|
||||
|
||||
jwt_secret: generate-with-openssl-rand-hex-64
|
||||
jwt_secret: ${AUTHELIA_JWT_SECRET}
|
||||
|
||||
default_redirection_url: https://auth.kelinreij.duckdns.org
|
||||
default_redirection_url: https://auth.${DOMAIN}
|
||||
|
||||
totp:
|
||||
issuer: kelinreij.duckdns.org
|
||||
issuer: ${DOMAIN}
|
||||
period: 30
|
||||
skew: 1
|
||||
|
||||
authentication_backend:
|
||||
file:
|
||||
path: /config/users_database.yml
|
||||
path: /secrets/users_database.yml
|
||||
password:
|
||||
algorithm: argon2id
|
||||
iterations: 1
|
||||
@@ -36,40 +36,34 @@ access_control:
|
||||
|
||||
rules:
|
||||
# Bypass Authelia for Jellyfin (allow app access)
|
||||
- domain: jellyfin.kelinreij.duckdns.org
|
||||
- domain: jellyfin.${DOMAIN}
|
||||
policy: bypass
|
||||
|
||||
# Bypass for Plex (allow app access)
|
||||
- domain: plex.kelinreij.duckdns.org
|
||||
- domain: plex.${DOMAIN}
|
||||
policy: bypass
|
||||
|
||||
# Bypass for Home Assistant (has its own auth)
|
||||
- domain: ha.kelinreij.duckdns.org
|
||||
policy: bypass
|
||||
|
||||
# Bypass for development services (they have their own auth or setup)
|
||||
- domain: pgadmin.kelinreij.duckdns.org
|
||||
policy: bypass
|
||||
- domain: gitlab.kelinreij.duckdns.org
|
||||
- domain: ha.${DOMAIN}
|
||||
policy: bypass
|
||||
|
||||
# Protected: All other services require authentication
|
||||
- domain: "*.kelinreij.duckdns.org"
|
||||
- domain: "*.${DOMAIN}"
|
||||
policy: one_factor
|
||||
|
||||
# Two-factor for admin services (optional)
|
||||
# - domain:
|
||||
# - "admin.kelinreij.duckdns.org"
|
||||
# - "portainer.kelinreij.duckdns.org"
|
||||
# - "admin.${DOMAIN}"
|
||||
# - "portainer.${DOMAIN}"
|
||||
# policy: two_factor
|
||||
|
||||
session:
|
||||
name: authelia_session
|
||||
secret: generate-with-openssl-rand-hex-64
|
||||
secret: ${AUTHELIA_SESSION_SECRET}
|
||||
expiration: 24h # Session expires after 24 hours
|
||||
inactivity: 24h # Session expires after 24 hours of inactivity
|
||||
remember_me_duration: 1M
|
||||
domain: kelinreij.duckdns.org
|
||||
domain: ${DOMAIN}
|
||||
|
||||
regulation:
|
||||
max_retries: 3
|
||||
@@ -77,11 +71,11 @@ regulation:
|
||||
ban_time: 5m
|
||||
|
||||
storage:
|
||||
encryption_key: generate-with-openssl-rand-hex-64
|
||||
encryption_key: ${AUTHELIA_STORAGE_ENCRYPTION_KEY}
|
||||
local:
|
||||
path: /data/db.sqlite3
|
||||
path: /config/db.sqlite3
|
||||
|
||||
notifier:
|
||||
# File-based notifications (for development/testing)
|
||||
filesystem:
|
||||
filename: /data/notification.txt
|
||||
filename: /config/notification.txt
|
||||
20
docker-compose/core/authelia/config/users_database.yml
Normal file
20
docker-compose/core/authelia/config/users_database.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
# Authelia Users Database
|
||||
# Copy to /opt/stacks/authelia/users_database.yml
|
||||
# Generate password hashes with: docker run authelia/authelia:latest authelia crypto hash generate argon2 --password 'yourpassword'
|
||||
|
||||
users:
|
||||
${AUTHELIA_ADMIN_USER}:
|
||||
displayname: ${AUTHELIA_ADMIN_USER}
|
||||
password: "${AUTHELIA_ADMIN_PASSWORD_HASH}"
|
||||
email: ${AUTHELIA_ADMIN_EMAIL}
|
||||
groups:
|
||||
- admins
|
||||
- users
|
||||
|
||||
# Example: Additional user
|
||||
# user1:
|
||||
# displayname: "User One"
|
||||
# password: "$argon2id$v=19$m=65536,t=3,p=4$CHANGEME"
|
||||
# email: user1@example.com
|
||||
# groups:
|
||||
# - users
|
||||
@@ -10,4 +10,3 @@ users:
|
||||
groups:
|
||||
- admins
|
||||
- users
|
||||
- users
|
||||
@@ -1,12 +0,0 @@
|
||||
###############################################################
|
||||
# Users Database #
|
||||
###############################################################
|
||||
|
||||
users:
|
||||
${DEFAULT_USER}:
|
||||
displayname: "Admin User"
|
||||
password: "${AUTHELIA_ADMIN_PASSWORD_HASH}"
|
||||
email: ${DEFAULT_EMAIL}
|
||||
groups:
|
||||
- admins
|
||||
- users
|
||||
@@ -56,7 +56,7 @@ services:
|
||||
|
||||
authelia:
|
||||
# Single sign-on authentication service - must always run for user authentication
|
||||
image: authelia/authelia:latest
|
||||
image: authelia/authelia:4.37.5
|
||||
container_name: authelia
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
# Core Infrastructure Services
|
||||
# These services form the foundation of the homelab and should always be running
|
||||
# Place in /opt/stacks/core/docker-compose.yml
|
||||
|
||||
# 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
|
||||
|
||||
services:
|
||||
|
||||
duckdns:
|
||||
# Dynamic DNS service - must always run to maintain domain resolution
|
||||
image: lscr.io/linuxserver/duckdns:latest
|
||||
container_name: duckdns
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
- SUBDOMAINS=${DUCKDNS_SUBDOMAINS}
|
||||
- TOKEN=${DUCKDNS_TOKEN}
|
||||
volumes:
|
||||
- ./duckdns/config:/config
|
||||
networks:
|
||||
- traefik-network
|
||||
|
||||
traefik:
|
||||
# Reverse proxy and SSL termination - core routing service, must always run
|
||||
# CONFIGURATION REQUIREMENT: traefik.yml MUST be in ./traefik/config/ directory
|
||||
# VOLUME MOUNT: ./traefik/config:/config - config file location is critical
|
||||
image: traefik:v3
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
command: ["--configFile=/config/traefik.yml"]
|
||||
environment:
|
||||
- DUCKDNS_TOKEN=${DUCKDNS_TOKEN}
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
- 8080:8080
|
||||
volumes:
|
||||
- ./traefik/config:/config
|
||||
- ./traefik/letsencrypt:/letsencrypt
|
||||
- ./traefik/dynamic:/dynamic
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
networks:
|
||||
- traefik-network
|
||||
labels:
|
||||
# TRAEFIK CONFIGURATION
|
||||
# ==========================================
|
||||
# Service metadata
|
||||
- "homelab.category=core"
|
||||
- "homelab.description=Reverse proxy and SSL termination"
|
||||
# Traefik reverse proxy (comment/uncomment to disable/enable)
|
||||
# If Traefik is on a remote server: these labels are NOT USED;
|
||||
# configure external yml files in /traefik/dynamic folder instead.
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)"
|
||||
- "traefik.http.routers.traefik.entrypoints=websecure"
|
||||
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.traefik.middlewares=authelia@docker"
|
||||
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
|
||||
|
||||
authelia:
|
||||
# Single sign-on authentication service - must always run for user authentication
|
||||
# VERSION PINNING: Pinned to v4.37.5 due to breaking changes in v4.39.15+
|
||||
# BREAKING CHANGES: v4.39.15+ has incompatible configuration and database changes
|
||||
# UPGRADE NOTES: Test in separate environment before upgrading. Backup config and DB.
|
||||
image: authelia/authelia:4.37.5
|
||||
container_name: authelia
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
ports:
|
||||
- "9091:9091"
|
||||
volumes:
|
||||
- ./authelia/config:/config
|
||||
- ./authelia/secrets:/secrets
|
||||
networks:
|
||||
- traefik-network
|
||||
depends_on:
|
||||
- traefik
|
||||
labels:
|
||||
# TRAEFIK CONFIGURATION
|
||||
# ==========================================
|
||||
# Service metadata
|
||||
- "homelab.category=core"
|
||||
- "homelab.description=Single sign-on authentication"
|
||||
# Traefik reverse proxy (comment/uncomment to disable/enable)
|
||||
# If Traefik is on a remote server: these labels are NOT USED;
|
||||
# configure external yml files in /traefik/dynamic folder instead.
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.authelia.rule=Host(`auth.${DOMAIN}`)"
|
||||
- "traefik.http.routers.authelia.entrypoints=websecure"
|
||||
- "traefik.http.routers.authelia.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.authelia.service=authelia"
|
||||
- "traefik.http.services.authelia.loadbalancer.server.port=9091"
|
||||
# Authelia forward auth middleware configuration
|
||||
- "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}/"
|
||||
- "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=X-Secret"
|
||||
- "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true"
|
||||
|
||||
# Sablier - Lazy loading service for Docker containers
|
||||
# Controls startup/shutdown of lazy-loaded services, must always run
|
||||
# REQUIREMENTS FOR DOCKER API ACCESS:
|
||||
# 1. Docker daemon must be configured to listen on TCP port 2376 with TLS
|
||||
# 2. DOCKER_HOST environment variable must point to accessible Docker API endpoint
|
||||
# 3. Firewall must allow TCP connections to Docker API port (2376)
|
||||
# 4. TLS certificates must be mounted and environment variables set
|
||||
# 5. Ensure dockerproxy service is running and accessible
|
||||
sablier-service:
|
||||
image: sablierapp/sablier:latest
|
||||
container_name: sablier-service
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- traefik-network
|
||||
environment:
|
||||
- SABLIER_PROVIDER=docker
|
||||
- SABLIER_DOCKER_API_VERSION=1.51
|
||||
- SABLIER_DOCKER_NETWORK=traefik-network
|
||||
- SABLIER_LOG_LEVEL=debug
|
||||
- DOCKER_HOST=tcp://${SERVER_IP}:2376
|
||||
- DOCKER_TLS_VERIFY=1
|
||||
- DOCKER_CERT_PATH=/certs
|
||||
volumes:
|
||||
- ./shared-ca:/certs:ro
|
||||
ports:
|
||||
- 10000:10000
|
||||
labels:
|
||||
# Service metadata
|
||||
- "homelab.category=core"
|
||||
- "homelab.description=Lazy loading service for Docker containers"
|
||||
|
||||
networks:
|
||||
traefik-network:
|
||||
external: true
|
||||
|
||||
x-dockge:
|
||||
urls:
|
||||
- https://auth.${DOMAIN}
|
||||
- http://${SERVER_IP}:9091
|
||||
- https://traefik.${DOMAIN}
|
||||
- http://${SERVER_IP}:8080
|
||||
@@ -0,0 +1,19 @@
|
||||
http:
|
||||
routers:
|
||||
# Individual Services
|
||||
homeassistant:
|
||||
rule: "Host(`hass.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: homeassistant
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
services:
|
||||
# Individual Services
|
||||
homeassistant:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://${HOMEASSISTANT_IP}:8123"
|
||||
passHostHeader: true
|
||||
399
docker-compose/core/traefik/dynamic/local-host-production.yml
Normal file
399
docker-compose/core/traefik/dynamic/local-host-production.yml
Normal file
@@ -0,0 +1,399 @@
|
||||
http:
|
||||
routers:
|
||||
# Remote Server Services (${REMOTE_SERVER_HOSTNAME})
|
||||
dockge-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`dockge.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: dockge-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
dozzle-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`dozzle.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: dozzle-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
glances-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`glances.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: glances-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
backrest-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`backrest.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: backrest-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
duplicati-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`duplicati.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: duplicati-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
homepage-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`homepage.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: homepage-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
homarr-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`homarr.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: homarr-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
grafana-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`grafana.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: grafana-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
prometheus-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`prometheus.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: prometheus-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
uptime-kuma-${REMOTE_SERVER_HOSTNAME}:
|
||||
rule: "Host(`status.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: uptime-kuma-${REMOTE_SERVER_HOSTNAME}
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
# Service Definitions
|
||||
services:
|
||||
backrest-${SERVER_HOSTNAME}:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:9898"
|
||||
passHostHeader: true
|
||||
|
||||
vaultwarden-${SERVER_HOSTNAME}:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8091"
|
||||
passHostHeader: true
|
||||
|
||||
bookstack-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:6875"
|
||||
passHostHeader: true
|
||||
|
||||
calibre-web-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8083"
|
||||
passHostHeader: true
|
||||
|
||||
code-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8079"
|
||||
passHostHeader: true
|
||||
|
||||
dockge-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:5001"
|
||||
passHostHeader: true
|
||||
|
||||
dockhand-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:3003"
|
||||
passHostHeader: true
|
||||
|
||||
dokuwiki-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8087"
|
||||
passHostHeader: true
|
||||
|
||||
dozzle-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8085"
|
||||
passHostHeader: true
|
||||
|
||||
duplicati-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8200"
|
||||
passHostHeader: true
|
||||
|
||||
ez-assistant-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:18789" # Internal IP of ${SERVER_HOSTNAME} server
|
||||
passHostHeader: true
|
||||
|
||||
formio-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:3002"
|
||||
passHostHeader: true
|
||||
|
||||
gitea-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:3010"
|
||||
passHostHeader: true
|
||||
|
||||
glances-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:61208"
|
||||
passHostHeader: true
|
||||
|
||||
homarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:7575"
|
||||
passHostHeader: true
|
||||
|
||||
homepage-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:3000"
|
||||
passHostHeader: true
|
||||
|
||||
jellyfin-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8096"
|
||||
passHostHeader: true
|
||||
|
||||
jupyter-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8890"
|
||||
passHostHeader: true
|
||||
|
||||
kopia-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:51515"
|
||||
passHostHeader: true
|
||||
|
||||
mealie-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:9000"
|
||||
passHostHeader: true
|
||||
|
||||
mediawiki-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8086"
|
||||
passHostHeader: true
|
||||
|
||||
motioneye-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8081"
|
||||
passHostHeader: true
|
||||
|
||||
nextcloud-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8089"
|
||||
passHostHeader: true
|
||||
|
||||
openkm-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:18080"
|
||||
passHostHeader: true
|
||||
|
||||
openwebui-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:3000"
|
||||
passHostHeader: true
|
||||
|
||||
qbittorrent-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8081"
|
||||
passHostHeader: true
|
||||
|
||||
tdarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8265"
|
||||
passHostHeader: true
|
||||
|
||||
unmanic-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8889"
|
||||
passHostHeader: true
|
||||
|
||||
wordpress-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8088"
|
||||
passHostHeader: true
|
||||
|
||||
# Arr Services
|
||||
|
||||
jellyseerr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:5055"
|
||||
passHostHeader: true
|
||||
|
||||
prowlarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:9696"
|
||||
passHostHeader: true
|
||||
|
||||
radarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:7878"
|
||||
passHostHeader: true
|
||||
|
||||
sonarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8989"
|
||||
passHostHeader: true
|
||||
|
||||
lidarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8686"
|
||||
passHostHeader: true
|
||||
|
||||
readarr-${SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8787"
|
||||
passHostHeader: true
|
||||
|
||||
mylar3-${SERVER_HOSTNAME}:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://${SERVER_IP}:8090"
|
||||
passHostHeader: true
|
||||
|
||||
|
||||
|
||||
|
||||
# Remote Server Service Definitions (${REMOTE_SERVER_HOSTNAME})
|
||||
dockge-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:5001"
|
||||
passHostHeader: true
|
||||
|
||||
dozzle-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:8085"
|
||||
passHostHeader: true
|
||||
|
||||
glances-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:61208"
|
||||
passHostHeader: true
|
||||
|
||||
backrest-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:9898"
|
||||
passHostHeader: true
|
||||
|
||||
duplicati-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:8200"
|
||||
passHostHeader: true
|
||||
|
||||
homepage-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:3000"
|
||||
passHostHeader: true
|
||||
|
||||
homarr-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:7575"
|
||||
passHostHeader: true
|
||||
|
||||
grafana-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:3000"
|
||||
passHostHeader: true
|
||||
|
||||
prometheus-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:9090"
|
||||
passHostHeader: true
|
||||
|
||||
uptime-kuma-${REMOTE_SERVER_HOSTNAME}:
|
||||
loadbalancer:
|
||||
servers:
|
||||
- url: "http://${REMOTE_SERVER_IP}:3001"
|
||||
passHostHeader: true
|
||||
|
||||
# Middleware Definitions
|
||||
middlewares:
|
||||
ez-assistant-websocket:
|
||||
headers:
|
||||
accessControlAllowHeaders:
|
||||
- "Connection"
|
||||
- "Upgrade"
|
||||
accessControlAllowMethods:
|
||||
- "GET"
|
||||
- "POST"
|
||||
- "OPTIONS"
|
||||
accessControlMaxAge: 86400
|
||||
31
docker-compose/core/traefik/dynamic/routes.yml
Normal file
31
docker-compose/core/traefik/dynamic/routes.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
# Traefik Dynamic Configuration
|
||||
# Copy to /opt/stacks/traefik/dynamic/routes.yml
|
||||
# Add custom routes here that aren't defined via Docker labels
|
||||
|
||||
http:
|
||||
routers:
|
||||
# Example custom route
|
||||
# custom-service:
|
||||
# rule: "Host(`custom.example.com`)"
|
||||
# entryPoints:
|
||||
# - websecure
|
||||
# middlewares:
|
||||
# - authelia@docker
|
||||
# tls:
|
||||
# certResolver: letsencrypt
|
||||
# service: custom-service
|
||||
|
||||
services:
|
||||
# Example custom service
|
||||
# custom-service:
|
||||
# loadBalancer:
|
||||
# servers:
|
||||
# - url: "http://192.168.1.100:8080"
|
||||
|
||||
middlewares:
|
||||
# Additional middlewares can be defined here
|
||||
# Example: Rate limiting
|
||||
# rate-limit:
|
||||
# rateLimit:
|
||||
# average: 100
|
||||
# burst: 50
|
||||
454
docker-compose/core/traefik/dynamic/sablier.yml
Normal file
454
docker-compose/core/traefik/dynamic/sablier.yml
Normal file
@@ -0,0 +1,454 @@
|
||||
# Session duration set to 5m for testing. Increase to 30m for production.
|
||||
http:
|
||||
middlewares:
|
||||
authelia:
|
||||
forwardauth:
|
||||
address: http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}/
|
||||
authResponseHeaders:
|
||||
- X-Secret
|
||||
trustForwardHeader: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-arr:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-arr
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Arr Apps
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-backrest:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-backrest
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Backrest
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-vaultwarden:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-vaultwarden
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Vaultwarden
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-bookstack:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-bookstack
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Bookstack
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-calibre-web:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-calibre-web
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Calibre Web
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-code-server:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-code-server
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Code Server
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-dozzle:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-dozzle
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: dozzle
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-dokuwiki:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-dokuwiki
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: DokuWiki
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-duplicati:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-duplicati
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Duplicati
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-assistant:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-assistant
|
||||
sessionDuration: 30m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: EZ-Assistant
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-formio:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-formio
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: FormIO
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-gitea:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-gitea
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Gitea
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-glances:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-glances
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Glances
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-homarr:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-homarr
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Homarr
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-jellyfin:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-jellyfin
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Jellyfin
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-jupyter:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-jupyter
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Jupyter
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-komodo:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-komodo
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Komodo
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-kopia:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-kopia
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Kopia
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-mealie:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-mealie
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Mealie
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-mediawiki:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-mediawiki
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: mediawiki
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-nextcloud:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-nextcloud
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: NextCloud
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-openkm:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-openkm
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: OpenKM
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-openwebui:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-openwebui
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: OpenWebUI
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-pulse:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-pulse
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Pulse
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-tdarr:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-tdarr
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Tdarr
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-unmanic:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-unmanic
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Unmanic
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${SERVER_HOSTNAME}-wordpress:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${SERVER_HOSTNAME}-wordpress
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: wordpress
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
# Remote Server (${REMOTE_SERVER_HOSTNAME}) Sablier Middlewares
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-dockge:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-dockge
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Dockge (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-dozzle:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-dozzle
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Dozzle (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-glances:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-glances
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Glances (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-backrest:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-backrest
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Backrest (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-duplicati:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-duplicati
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Duplicati (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-homepage:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-homepage
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Homepage (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-homarr:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-homarr
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Homarr (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-grafana:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-grafana
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Grafana (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-prometheus:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-prometheus
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Prometheus (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-${REMOTE_SERVER_HOSTNAME}-uptime-kuma:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: ${REMOTE_SERVER_HOSTNAME}-uptime-kuma
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Uptime Kuma (${REMOTE_SERVER_HOSTNAME})
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
Reference in New Issue
Block a user