Fix variable substitution in users_database.yml

- Update localize_users_database_file to properly resolve nested variables in AUTHELIA_ADMIN_EMAIL
- Fix template to use correct AUTHELIA_* variables instead of DEFAULT_* variables
- Update deploy-core.sh to only process files containing variables and fix .env path
- Fix file permissions for authelia config files
This commit is contained in:
Kelin
2026-02-03 22:48:27 -05:00
parent e2a654b3f4
commit 59cd225e0e
14 changed files with 278 additions and 259 deletions

View File

@@ -11,12 +11,12 @@ log:
theme: dark theme: dark
jwt_secret: ${AUTHELIA_JWT_SECRET} jwt_secret: 4f263cdfa9929d007551fd5a5a6b552f7e17127cc4bb425b375a8532631d527b6b591a560a784552a33767699391973799e7472b679e7f94fcf4aca2ce5b2efc
default_redirection_url: https://auth.${DOMAIN} default_redirection_url: https://auth.kelinreij.duckdns.org
totp: totp:
issuer: ${DOMAIN} issuer: kelinreij.duckdns.org
period: 30 period: 30
skew: 1 skew: 1
@@ -36,34 +36,34 @@ access_control:
rules: rules:
# Bypass Authelia for Jellyfin (allow app access) # Bypass Authelia for Jellyfin (allow app access)
- domain: jellyfin.${DOMAIN} - domain: jellyfin.kelinreij.duckdns.org
policy: bypass policy: bypass
# Bypass for Plex (allow app access) # Bypass for Plex (allow app access)
- domain: plex.${DOMAIN} - domain: plex.kelinreij.duckdns.org
policy: bypass policy: bypass
# Bypass for Home Assistant (has its own auth) # Bypass for Home Assistant (has its own auth)
- domain: ha.${DOMAIN} - domain: ha.kelinreij.duckdns.org
policy: bypass policy: bypass
# Protected: All other services require authentication # Protected: All other services require authentication
- domain: "*.${DOMAIN}" - domain: "*.kelinreij.duckdns.org"
policy: one_factor policy: one_factor
# Two-factor for admin services (optional) # Two-factor for admin services (optional)
# - domain: # - domain:
# - "admin.${DOMAIN}" # - "admin.kelinreij.duckdns.org"
# - "portainer.${DOMAIN}" # - "portainer.kelinreij.duckdns.org"
# policy: two_factor # policy: two_factor
session: session:
name: authelia_session name: authelia_session
secret: ${AUTHELIA_SESSION_SECRET} secret: 3ba018547a24dfd49ae55f23b5b75377ec93f5957707e2a669b0a49966df745a5b062eee3f7356e0abae21452915bdd30a32f404ec0a2a7a957c93a2fa2a94c8
expiration: 24h # Session expires after 24 hours expiration: 24h # Session expires after 24 hours
inactivity: 24h # Session expires after 24 hours of inactivity inactivity: 24h # Session expires after 24 hours of inactivity
remember_me_duration: 1M remember_me_duration: 1M
domain: ${DOMAIN} domain: kelinreij.duckdns.org
regulation: regulation:
max_retries: 3 max_retries: 3
@@ -71,7 +71,7 @@ regulation:
ban_time: 5m ban_time: 5m
storage: storage:
encryption_key: ${AUTHELIA_STORAGE_ENCRYPTION_KEY} encryption_key: dd23db430500eb630e469d5cf0f77dd597649bd4d1a90c02ad673286d8eb9aa8f55435655435d40033751003fc764a173944dbc3ad89d57330e185269792a4b7
local: local:
path: /config/db.sqlite3 path: /config/db.sqlite3

Binary file not shown.

View File

@@ -1,20 +1,12 @@
# Authelia Users Database ###############################################################
# Copy to /opt/stacks/authelia/users_database.yml # Users Database #
# Generate password hashes with: docker run authelia/authelia:latest authelia crypto hash generate argon2 --password 'yourpassword' ###############################################################
users: users:
${AUTHELIA_ADMIN_USER}: kelin:
displayname: ${AUTHELIA_ADMIN_USER} displayname: "kelin"
password: "${AUTHELIA_ADMIN_PASSWORD_HASH}" password: "$argon2id$v=19$m=65536,t=3,p=4$e97MzVuvteD5VfHT+Kw9Ew$NnK63ABYKRm5d8nWG7Z8dbRBJfhhHjaf71zQ354KSN4"
email: ${AUTHELIA_ADMIN_EMAIL} email: kelinshomelab@gmail.com
groups: groups:
- admins - admins
- users - 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

View File

@@ -3,10 +3,10 @@
############################################################### ###############################################################
users: users:
${DEFAULT_USER}: ${AUTHELIA_ADMIN_USER}:
displayname: "Administrator" displayname: "${AUTHELIA_ADMIN_USER}"
password: "${DEFAULT_PASSWORD_HASH}" # Generate with: docker run authelia/authelia:latest authelia crypto hash generate pbkdf2 --password 'yourpassword' password: "${AUTHELIA_ADMIN_PASSWORD_HASH}"
email: ${DEFAULT_EMAIL} email: ${AUTHELIA_ADMIN_EMAIL}
groups: groups:
- admins - admins
- users - users

View File

@@ -0,0 +1,19 @@
# yamllint disable rule:line-length
---
###############################################################
# Users Database #
###############################################################
# This file can be used if you do not have an LDAP set up.
users:
authelia:
disabled: false
displayname: "Test User"
password: "$argon2id$v=19$m=32768,t=1,p=8$eUhVT1dQa082YVk2VUhDMQ$E8QI4jHbUBt3EdsU1NFDu4Bq5jObKNx7nBKSn1EYQxk" # Password is 'authelia'
email: authelia@authelia.com
groups:
- admins
- dev
...
# yamllint enable rule:line-length

View File

@@ -6,16 +6,16 @@ set -e
# Source common functions # Source common functions
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="/home/kelin/EZ-Homelab" # Fixed repo path since script runs from /opt/stacks/core REPO_DIR="$HOME/EZ-Homelab"
source "$REPO_DIR/scripts/common.sh" source "$REPO_DIR/scripts/common.sh"
log_info "Deploying core stack..." log_info "Deploying core stack..."
# Load environment # Load environment
load_env_file_safely .env load_env_file_safely "$REPO_DIR/.env"
# Copy fresh templates # Copy fresh templates
cp "$REPO_DIR/docker-compose/core/authelia/secrets/users_database.yml" "./authelia/secrets/users_database.yml" # cp "$REPO_DIR/docker-compose/core/authelia/secrets/users_database.yml" "./authelia/secrets/users_database.yml"
# Localize labels in compose file (only replaces variables in labels, not environment sections) # Localize labels in compose file (only replaces variables in labels, not environment sections)
localize_compose_labels docker-compose.yml localize_compose_labels docker-compose.yml
@@ -23,7 +23,7 @@ localize_compose_labels docker-compose.yml
# Localize config files - Process all YAML config files (excluding docker-compose.yml) # Localize config files - Process all YAML config files (excluding docker-compose.yml)
# This performs FULL variable replacement on config files like: # This performs FULL variable replacement on config files like:
# - authelia/config/configuration.yml # - authelia/config/configuration.yml
# - authelia/secrets/users_database.yml <- HANDLED SPECIALLY to preserve password hashes # - authelia/config/users_database.yml <- HANDLED SPECIALLY to preserve password hashes
# - traefik/dynamic/*.yml # - traefik/dynamic/*.yml
# #
# Why exclude docker-compose.yml? # Why exclude docker-compose.yml?
@@ -35,11 +35,14 @@ localize_compose_labels docker-compose.yml
# nested variables like ${AUTHELIA_ADMIN_PASSWORD_HASH} or ${SERVICE_NAME}.${DOMAIN} # nested variables like ${AUTHELIA_ADMIN_PASSWORD_HASH} or ${SERVICE_NAME}.${DOMAIN}
# The localize_users_database_file function handles password hashes specially to avoid corruption # The localize_users_database_file function handles password hashes specially to avoid corruption
for config_file in $(find . -name "*.yml" -o -name "*.yaml" | grep -v docker-compose.yml); do for config_file in $(find . -name "*.yml" -o -name "*.yaml" | grep -v docker-compose.yml); do
# Only process files that contain variables (have ${ in them)
if grep -q '\${' "$config_file"; then
if [[ "$config_file" == *"users_database.yml" ]]; then if [[ "$config_file" == *"users_database.yml" ]]; then
localize_users_database_file "$config_file" localize_users_database_file "$config_file"
else else
localize_config_file "$config_file" localize_config_file "$config_file"
fi fi
fi
done done
# Deploy # Deploy

View File

@@ -48,7 +48,7 @@ services:
- 'homelab.category=core' - 'homelab.category=core'
- 'homelab.description=Reverse proxy and SSL termination' - 'homelab.description=Reverse proxy and SSL termination'
- 'traefik.enable=true' - 'traefik.enable=true'
- 'traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)' - 'traefik.http.routers.traefik.rule=Host(`traefik.kelinreij.duckdns.org`)'
- 'traefik.http.routers.traefik.entrypoints=websecure' - 'traefik.http.routers.traefik.entrypoints=websecure'
- 'traefik.http.routers.traefik.tls.certresolver=letsencrypt' - 'traefik.http.routers.traefik.tls.certresolver=letsencrypt'
- 'traefik.http.routers.traefik.middlewares=authelia@docker' - 'traefik.http.routers.traefik.middlewares=authelia@docker'
@@ -80,13 +80,13 @@ services:
# If Traefik is on a remote server: these labels are NOT USED; # If Traefik is on a remote server: these labels are NOT USED;
# configure external yml files in /traefik/dynamic folder instead. # configure external yml files in /traefik/dynamic folder instead.
- 'traefik.enable=true' - 'traefik.enable=true'
- 'traefik.http.routers.authelia.rule=Host(`auth.${DOMAIN}`)' - 'traefik.http.routers.authelia.rule=Host(`auth.kelinreij.duckdns.org`)'
- 'traefik.http.routers.authelia.entrypoints=websecure' - 'traefik.http.routers.authelia.entrypoints=websecure'
- 'traefik.http.routers.authelia.tls.certresolver=letsencrypt' - 'traefik.http.routers.authelia.tls.certresolver=letsencrypt'
- 'traefik.http.routers.authelia.service=authelia' - 'traefik.http.routers.authelia.service=authelia'
- 'traefik.http.services.authelia.loadbalancer.server.port=9091' - 'traefik.http.services.authelia.loadbalancer.server.port=9091'
# Authelia forward auth middleware configuration # 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.address=http://authelia:9091/api/verify?rd=https://auth.kelinreij.duckdns.org/'
- 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=X-Secret' - 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=X-Secret'
- 'traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true' - 'traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true'
@@ -127,7 +127,7 @@ networks:
x-dockge: x-dockge:
urls: urls:
- https://auth.${DOMAIN} - https://auth.kelinreij.duckdns.org
- http://192.168.4.11:9091 - http://192.168.4.11:9091
- https://traefik.${DOMAIN} - https://traefik.kelinreij.duckdns.org
- http://192.168.4.11:8080 - http://192.168.4.11:8080

View File

@@ -0,0 +1,5 @@
/config/duck.log {
rotate 5
size 100k
compress
}

View File

@@ -2,7 +2,7 @@ http:
routers: routers:
# Individual Services # Individual Services
homeassistant: homeassistant:
rule: "Host(`hass.${DOMAIN}`)" rule: "Host(`hass.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: homeassistant service: homeassistant
@@ -15,5 +15,5 @@ http:
homeassistant: homeassistant:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://${HOMEASSISTANT_IP}:8123" - url: "http://:8123"
passHostHeader: true passHostHeader: true

View File

@@ -1,101 +1,101 @@
http: http:
routers: routers:
# Remote Server Services (${REMOTE_SERVER_HOSTNAME}) # Remote Server Services (your-remote-server)
dockge-${REMOTE_SERVER_HOSTNAME}: dockge-your-remote-server:
rule: "Host(`dockge.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`dockge.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: dockge-${REMOTE_SERVER_HOSTNAME} service: dockge-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
dozzle-${REMOTE_SERVER_HOSTNAME}: dozzle-your-remote-server:
rule: "Host(`dozzle.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`dozzle.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: dozzle-${REMOTE_SERVER_HOSTNAME} service: dozzle-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
glances-${REMOTE_SERVER_HOSTNAME}: glances-your-remote-server:
rule: "Host(`glances.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`glances.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: glances-${REMOTE_SERVER_HOSTNAME} service: glances-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
backrest-${REMOTE_SERVER_HOSTNAME}: backrest-your-remote-server:
rule: "Host(`backrest.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`backrest.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: backrest-${REMOTE_SERVER_HOSTNAME} service: backrest-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
duplicati-${REMOTE_SERVER_HOSTNAME}: duplicati-your-remote-server:
rule: "Host(`duplicati.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`duplicati.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: duplicati-${REMOTE_SERVER_HOSTNAME} service: duplicati-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
homepage-${REMOTE_SERVER_HOSTNAME}: homepage-your-remote-server:
rule: "Host(`homepage.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`homepage.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: homepage-${REMOTE_SERVER_HOSTNAME} service: homepage-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
homarr-${REMOTE_SERVER_HOSTNAME}: homarr-your-remote-server:
rule: "Host(`homarr.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`homarr.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: homarr-${REMOTE_SERVER_HOSTNAME} service: homarr-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
grafana-${REMOTE_SERVER_HOSTNAME}: grafana-your-remote-server:
rule: "Host(`grafana.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`grafana.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: grafana-${REMOTE_SERVER_HOSTNAME} service: grafana-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
prometheus-${REMOTE_SERVER_HOSTNAME}: prometheus-your-remote-server:
rule: "Host(`prometheus.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`prometheus.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: prometheus-${REMOTE_SERVER_HOSTNAME} service: prometheus-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
- authelia@docker - authelia@docker
uptime-kuma-${REMOTE_SERVER_HOSTNAME}: uptime-kuma-your-remote-server:
rule: "Host(`status.${REMOTE_SERVER_HOSTNAME}.${DOMAIN}`)" rule: "Host(`status.your-remote-server.kelinreij.duckdns.org`)"
entryPoints: entryPoints:
- websecure - websecure
service: uptime-kuma-${REMOTE_SERVER_HOSTNAME} service: uptime-kuma-your-remote-server
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares: middlewares:
@@ -103,286 +103,286 @@ http:
# Service Definitions # Service Definitions
services: services:
backrest-${SERVER_HOSTNAME}: backrest-jasper:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://${SERVER_IP}:9898" - url: "http://192.168.4.4:9898"
passHostHeader: true passHostHeader: true
vaultwarden-${SERVER_HOSTNAME}: vaultwarden-jasper:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://${SERVER_IP}:8091" - url: "http://192.168.4.4:8091"
passHostHeader: true passHostHeader: true
bookstack-${SERVER_HOSTNAME}: bookstack-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:6875" - url: "http://192.168.4.4:6875"
passHostHeader: true passHostHeader: true
calibre-web-${SERVER_HOSTNAME}: calibre-web-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8083" - url: "http://192.168.4.4:8083"
passHostHeader: true passHostHeader: true
code-${SERVER_HOSTNAME}: code-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8079" - url: "http://192.168.4.4:8079"
passHostHeader: true passHostHeader: true
dockge-${SERVER_HOSTNAME}: dockge-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:5001" - url: "http://192.168.4.4:5001"
passHostHeader: true passHostHeader: true
dockhand-${SERVER_HOSTNAME}: dockhand-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:3003" - url: "http://192.168.4.4:3003"
passHostHeader: true passHostHeader: true
dokuwiki-${SERVER_HOSTNAME}: dokuwiki-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8087" - url: "http://192.168.4.4:8087"
passHostHeader: true passHostHeader: true
dozzle-${SERVER_HOSTNAME}: dozzle-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8085" - url: "http://192.168.4.4:8085"
passHostHeader: true passHostHeader: true
duplicati-${SERVER_HOSTNAME}: duplicati-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8200" - url: "http://192.168.4.4:8200"
passHostHeader: true passHostHeader: true
ez-assistant-${SERVER_HOSTNAME}: ez-assistant-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:18789" # Internal IP of ${SERVER_HOSTNAME} server - url: "http://192.168.4.4:18789" # Internal IP of jasper server
passHostHeader: true passHostHeader: true
formio-${SERVER_HOSTNAME}: formio-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:3002" - url: "http://192.168.4.4:3002"
passHostHeader: true passHostHeader: true
gitea-${SERVER_HOSTNAME}: gitea-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:3010" - url: "http://192.168.4.4:3010"
passHostHeader: true passHostHeader: true
glances-${SERVER_HOSTNAME}: glances-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:61208" - url: "http://192.168.4.4:61208"
passHostHeader: true passHostHeader: true
homarr-${SERVER_HOSTNAME}: homarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:7575" - url: "http://192.168.4.4:7575"
passHostHeader: true passHostHeader: true
homepage-${SERVER_HOSTNAME}: homepage-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:3000" - url: "http://192.168.4.4:3000"
passHostHeader: true passHostHeader: true
jellyfin-${SERVER_HOSTNAME}: jellyfin-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8096" - url: "http://192.168.4.4:8096"
passHostHeader: true passHostHeader: true
jupyter-${SERVER_HOSTNAME}: jupyter-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8890" - url: "http://192.168.4.4:8890"
passHostHeader: true passHostHeader: true
kopia-${SERVER_HOSTNAME}: kopia-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:51515" - url: "http://192.168.4.4:51515"
passHostHeader: true passHostHeader: true
mealie-${SERVER_HOSTNAME}: mealie-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:9000" - url: "http://192.168.4.4:9000"
passHostHeader: true passHostHeader: true
mediawiki-${SERVER_HOSTNAME}: mediawiki-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8086" - url: "http://192.168.4.4:8086"
passHostHeader: true passHostHeader: true
motioneye-${SERVER_HOSTNAME}: motioneye-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8081" - url: "http://192.168.4.4:8081"
passHostHeader: true passHostHeader: true
nextcloud-${SERVER_HOSTNAME}: nextcloud-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8089" - url: "http://192.168.4.4:8089"
passHostHeader: true passHostHeader: true
openkm-${SERVER_HOSTNAME}: openkm-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:18080" - url: "http://192.168.4.4:18080"
passHostHeader: true passHostHeader: true
openwebui-${SERVER_HOSTNAME}: openwebui-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:3000" - url: "http://192.168.4.4:3000"
passHostHeader: true passHostHeader: true
qbittorrent-${SERVER_HOSTNAME}: qbittorrent-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8081" - url: "http://192.168.4.4:8081"
passHostHeader: true passHostHeader: true
tdarr-${SERVER_HOSTNAME}: tdarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8265" - url: "http://192.168.4.4:8265"
passHostHeader: true passHostHeader: true
unmanic-${SERVER_HOSTNAME}: unmanic-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8889" - url: "http://192.168.4.4:8889"
passHostHeader: true passHostHeader: true
wordpress-${SERVER_HOSTNAME}: wordpress-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8088" - url: "http://192.168.4.4:8088"
passHostHeader: true passHostHeader: true
# Arr Services # Arr Services
jellyseerr-${SERVER_HOSTNAME}: jellyseerr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:5055" - url: "http://192.168.4.4:5055"
passHostHeader: true passHostHeader: true
prowlarr-${SERVER_HOSTNAME}: prowlarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:9696" - url: "http://192.168.4.4:9696"
passHostHeader: true passHostHeader: true
radarr-${SERVER_HOSTNAME}: radarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:7878" - url: "http://192.168.4.4:7878"
passHostHeader: true passHostHeader: true
sonarr-${SERVER_HOSTNAME}: sonarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8989" - url: "http://192.168.4.4:8989"
passHostHeader: true passHostHeader: true
lidarr-${SERVER_HOSTNAME}: lidarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8686" - url: "http://192.168.4.4:8686"
passHostHeader: true passHostHeader: true
readarr-${SERVER_HOSTNAME}: readarr-jasper:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${SERVER_IP}:8787" - url: "http://192.168.4.4:8787"
passHostHeader: true passHostHeader: true
mylar3-${SERVER_HOSTNAME}: mylar3-jasper:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://${SERVER_IP}:8090" - url: "http://192.168.4.4:8090"
passHostHeader: true passHostHeader: true
# Remote Server Service Definitions (${REMOTE_SERVER_HOSTNAME}) # Remote Server Service Definitions (your-remote-server)
dockge-${REMOTE_SERVER_HOSTNAME}: dockge-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:5001" - url: "http://your.remote.ip.address:5001"
passHostHeader: true passHostHeader: true
dozzle-${REMOTE_SERVER_HOSTNAME}: dozzle-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:8085" - url: "http://your.remote.ip.address:8085"
passHostHeader: true passHostHeader: true
glances-${REMOTE_SERVER_HOSTNAME}: glances-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:61208" - url: "http://your.remote.ip.address:61208"
passHostHeader: true passHostHeader: true
backrest-${REMOTE_SERVER_HOSTNAME}: backrest-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:9898" - url: "http://your.remote.ip.address:9898"
passHostHeader: true passHostHeader: true
duplicati-${REMOTE_SERVER_HOSTNAME}: duplicati-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:8200" - url: "http://your.remote.ip.address:8200"
passHostHeader: true passHostHeader: true
homepage-${REMOTE_SERVER_HOSTNAME}: homepage-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:3000" - url: "http://your.remote.ip.address:3000"
passHostHeader: true passHostHeader: true
homarr-${REMOTE_SERVER_HOSTNAME}: homarr-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:7575" - url: "http://your.remote.ip.address:7575"
passHostHeader: true passHostHeader: true
grafana-${REMOTE_SERVER_HOSTNAME}: grafana-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:3000" - url: "http://your.remote.ip.address:3000"
passHostHeader: true passHostHeader: true
prometheus-${REMOTE_SERVER_HOSTNAME}: prometheus-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:9090" - url: "http://your.remote.ip.address:9090"
passHostHeader: true passHostHeader: true
uptime-kuma-${REMOTE_SERVER_HOSTNAME}: uptime-kuma-your-remote-server:
loadbalancer: loadbalancer:
servers: servers:
- url: "http://${REMOTE_SERVER_IP}:3001" - url: "http://your.remote.ip.address:3001"
passHostHeader: true passHostHeader: true
# Middleware Definitions # Middleware Definitions

View File

@@ -3,16 +3,16 @@ http:
middlewares: middlewares:
authelia: authelia:
forwardauth: forwardauth:
address: http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}/ address: http://authelia:9091/api/verify?rd=https://auth.kelinreij.duckdns.org/
authResponseHeaders: authResponseHeaders:
- X-Secret - X-Secret
trustForwardHeader: true trustForwardHeader: true
sablier-${SERVER_HOSTNAME}-arr: sablier-jasper-arr:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-arr group: jasper-arr
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -20,11 +20,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-backrest: sablier-jasper-backrest:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-backrest group: jasper-backrest
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -32,11 +32,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-vaultwarden: sablier-jasper-vaultwarden:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-vaultwarden group: jasper-vaultwarden
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -44,11 +44,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-bookstack: sablier-jasper-bookstack:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-bookstack group: jasper-bookstack
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -56,11 +56,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-calibre-web: sablier-jasper-calibre-web:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-calibre-web group: jasper-calibre-web
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -68,11 +68,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-code-server: sablier-jasper-code-server:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-code-server group: jasper-code-server
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -80,11 +80,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-dozzle: sablier-jasper-dozzle:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-dozzle group: jasper-dozzle
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -92,11 +92,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-dokuwiki: sablier-jasper-dokuwiki:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-dokuwiki group: jasper-dokuwiki
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -104,11 +104,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-duplicati: sablier-jasper-duplicati:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-duplicati group: jasper-duplicati
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -116,11 +116,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-assistant: sablier-jasper-assistant:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-assistant group: jasper-assistant
sessionDuration: 30m sessionDuration: 30m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -128,11 +128,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-formio: sablier-jasper-formio:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-formio group: jasper-formio
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -140,11 +140,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-gitea: sablier-jasper-gitea:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-gitea group: jasper-gitea
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -152,11 +152,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-glances: sablier-jasper-glances:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-glances group: jasper-glances
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -164,11 +164,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-homarr: sablier-jasper-homarr:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-homarr group: jasper-homarr
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -176,11 +176,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-jellyfin: sablier-jasper-jellyfin:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-jellyfin group: jasper-jellyfin
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -188,11 +188,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-jupyter: sablier-jasper-jupyter:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-jupyter group: jasper-jupyter
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -200,11 +200,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-komodo: sablier-jasper-komodo:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-komodo group: jasper-komodo
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -212,11 +212,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-kopia: sablier-jasper-kopia:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-kopia group: jasper-kopia
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -224,11 +224,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-mealie: sablier-jasper-mealie:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-mealie group: jasper-mealie
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -236,11 +236,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-mediawiki: sablier-jasper-mediawiki:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-mediawiki group: jasper-mediawiki
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -248,11 +248,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-nextcloud: sablier-jasper-nextcloud:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-nextcloud group: jasper-nextcloud
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -260,11 +260,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-openkm: sablier-jasper-openkm:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-openkm group: jasper-openkm
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -272,11 +272,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-openwebui: sablier-jasper-openwebui:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-openwebui group: jasper-openwebui
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -284,11 +284,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-pulse: sablier-jasper-pulse:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-pulse group: jasper-pulse
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -296,11 +296,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-tdarr: sablier-jasper-tdarr:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-tdarr group: jasper-tdarr
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -308,11 +308,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-unmanic: sablier-jasper-unmanic:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-unmanic group: jasper-unmanic
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -320,11 +320,11 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${SERVER_HOSTNAME}-wordpress: sablier-jasper-wordpress:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${SERVER_HOSTNAME}-wordpress group: jasper-wordpress
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
@@ -332,123 +332,123 @@ http:
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
# Remote Server (${REMOTE_SERVER_HOSTNAME}) Sablier Middlewares # Remote Server (your-remote-server) Sablier Middlewares
sablier-${REMOTE_SERVER_HOSTNAME}-dockge: sablier-your-remote-server-dockge:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-dockge group: your-remote-server-dockge
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Dockge (${REMOTE_SERVER_HOSTNAME}) displayName: Dockge (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-dozzle: sablier-your-remote-server-dozzle:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-dozzle group: your-remote-server-dozzle
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Dozzle (${REMOTE_SERVER_HOSTNAME}) displayName: Dozzle (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-glances: sablier-your-remote-server-glances:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-glances group: your-remote-server-glances
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Glances (${REMOTE_SERVER_HOSTNAME}) displayName: Glances (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-backrest: sablier-your-remote-server-backrest:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-backrest group: your-remote-server-backrest
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Backrest (${REMOTE_SERVER_HOSTNAME}) displayName: Backrest (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-duplicati: sablier-your-remote-server-duplicati:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-duplicati group: your-remote-server-duplicati
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Duplicati (${REMOTE_SERVER_HOSTNAME}) displayName: Duplicati (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-homepage: sablier-your-remote-server-homepage:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-homepage group: your-remote-server-homepage
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Homepage (${REMOTE_SERVER_HOSTNAME}) displayName: Homepage (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-homarr: sablier-your-remote-server-homarr:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-homarr group: your-remote-server-homarr
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Homarr (${REMOTE_SERVER_HOSTNAME}) displayName: Homarr (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-grafana: sablier-your-remote-server-grafana:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-grafana group: your-remote-server-grafana
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Grafana (${REMOTE_SERVER_HOSTNAME}) displayName: Grafana (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-prometheus: sablier-your-remote-server-prometheus:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-prometheus group: your-remote-server-prometheus
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Prometheus (${REMOTE_SERVER_HOSTNAME}) displayName: Prometheus (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true
sablier-${REMOTE_SERVER_HOSTNAME}-uptime-kuma: sablier-your-remote-server-uptime-kuma:
plugin: plugin:
sablier: sablier:
sablierUrl: http://sablier-service:10000 sablierUrl: http://sablier-service:10000
group: ${REMOTE_SERVER_HOSTNAME}-uptime-kuma group: your-remote-server-uptime-kuma
sessionDuration: 5m sessionDuration: 5m
ignoreUserAgent: curl ignoreUserAgent: curl
dynamic: dynamic:
displayName: Uptime Kuma (${REMOTE_SERVER_HOSTNAME}) displayName: Uptime Kuma (your-remote-server)
theme: ghost theme: ghost
show-details-by-default: true show-details-by-default: true

View File

@@ -27,7 +27,7 @@ entryPoints:
certificatesResolvers: certificatesResolvers:
letsencrypt: letsencrypt:
acme: acme:
email: ${ACME_EMAIL} # Your email for Let's Encrypt notifications email: kelinshomelab@gmail.com # Your email for Let's Encrypt notifications
caServer: https://acme-v02.api.letsencrypt.org/directory # Use staging for testing caServer: https://acme-v02.api.letsencrypt.org/directory # Use staging for testing
storage: /letsencrypt/acme.json storage: /letsencrypt/acme.json
# DNS challenge - For wildcard certificates (*.yourdomain.duckdns.org) # DNS challenge - For wildcard certificates (*.yourdomain.duckdns.org)

View File

@@ -154,7 +154,7 @@ localize_users_database_file() {
# Resolve nested variables first # Resolve nested variables first
local resolved_user="${AUTHELIA_ADMIN_USER}" local resolved_user="${AUTHELIA_ADMIN_USER}"
local resolved_email=$(eval echo "${AUTHELIA_ADMIN_EMAIL}") local resolved_email=$(eval echo "${AUTHELIA_ADMIN_EMAIL}")
local resolved_password="${AUTHELIA_ADMIN_PASSWORD_HASH}" local resolved_password="${AUTHELIA_ADMIN_PASSWORD_HASH}" # Don't eval - password hash contains $ that would be interpreted
# Escape $ in password hash for sed # Escape $ in password hash for sed
local escaped_password=$(printf '%s\n' "$resolved_password" | sed 's/\$/\\$/g') local escaped_password=$(printf '%s\n' "$resolved_password" | sed 's/\$/\\$/g')