From 5d766f20e7144e5e409255dfe6d136b0c9b14f6c Mon Sep 17 00:00:00 2001 From: kelinfoxy <67766943+kelinfoxy@users.noreply.github.com> Date: Tue, 17 Mar 2026 20:02:26 -0400 Subject: [PATCH] revert to using icon labels instead of hardcoding icons in the compose files. --- README.md | 121 +++++++++++++++++- docker-templates/backrest/docker-compose.yml | 2 +- docker-templates/bookstack/docker-compose.yml | 2 +- .../{calibre => calibre-web}/.env | 0 .../docker-compose.yml | 2 +- docker-templates/dbGate/compose.yaml | 2 +- docker-templates/dokuwiki/docker-compose.yml | 2 +- docker-templates/dozzle/docker-compose.yml | 2 +- docker-templates/gitea/docker-compose.yml | 4 +- docker-templates/glances/docker-compose.yml | 2 +- docker-templates/homarr/docker-compose.yml | 2 +- docker-templates/homepage/docker-compose.yml | 2 +- docker-templates/jupyter/docker-compose.yml | 2 +- docker-templates/mealie/docker-compose.yml | 2 +- docker-templates/metube/compose.yaml | 2 +- docker-templates/sablier/docker-compose.yml | 2 +- .../valutwarden/docker-compose.yml | 2 +- docker-templates/yarnl/compose.yaml | 2 +- 18 files changed, 132 insertions(+), 23 deletions(-) rename docker-templates/{calibre => calibre-web}/.env (100%) rename docker-templates/{calibre => calibre-web}/docker-compose.yml (90%) diff --git a/README.md b/README.md index 775f0dd..eb7d627 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,127 @@ -# Kelin's Arcane Registry +# Authelia DuckDNS & Traefik based Arcane Registry -> Most templates configured with Traefik labels and Authelia middleware -with subdomains at kelinreij.duckdns.org +## Approach +Use env variables to template the required labels + +## Compose file template + +```bash +services: + SERVICE_NAME: + image: + container_name: + restart: unless-stopped + networks: + - homelab-network + - traefik-network + ports: + - ${EXTERNAL_PORT}:${INTERNAL_PORT} + volumes: + - ./data:/data + - ./config:/config + environment: + - TZ=${TZ} + - PUID=${PUID} + - PGID=${PGID} + healthcheck: + test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:9898/'] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + labels: + - com.getarcaneapp.arcane.icon=${ICON_URL} + - ${HOST_LABEL} + - ${LOADBALANCER_LABEL} + - ${WATCHTOWER_ENABLE_LABEL} + - ${TRAEFIK_ENABLE_LABEL} + - ${TRAEFIK_NETWORK_LABEL} + - ${ENTRYPOINT_LABEL} + - ${CERT_LABEL} + - ${AUTHELIA_LABEL} + +networks: + homelab-network: + external: true + traefik-network: + external: true + +x-dockge: + urls: + - https://${PROXY_URL} + - ${LOCAL_URL} + +x-arcane: + icon: ${ICON_URL} + urls: + - https://${PROXY_URL} + - ${LOCAL_URL} + +``` + +## .env template + +```bash +# ####################################################### +# Templating variables, not used by compose file directly +SERVER_NAME= +SERVER_IP= +SUBDOMAIN= +SERVICE_NAME= +ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/${SERVICE_NAME}.svg + +# Include Server Name in Proxy URL? Choose one. + +# PROXY_URL=${SERVICE_NAME}.${SERVER_NAME}.${SUBDOMAIN}.duckdns.org +PROXY_URL=${SERVICE_NAME}.${SUBDOMAIN}.duckdns.org + + +# ############################################################################# +# Compose file variables + +TZ=America/New_York +PUID=1000 +PGID=1000 + +CONTAINER_NAME=${SERVICE_NAME} +INTERNAL_PORT=8081 +EXTERNAL_PORT=8099 +LOCAL_URL=http://${SERVER_IP}:${EXTERNAL_PORT} + + +# ############################################################# +# Container Labels + +# DO NOT enclose label values in single quotes +# If the value needs to include single quotes use backticks instead + +# For example HOST_LABEL=traefik.http.routers.${SERVICE_NAME}.rule=Host(`${PROXY_URL}`) +# Notice the use of backticks instead of single quotes around ${PROXY_URL} + +TRAEFIK_ENABLE_LABEL=traefik.enable=true +HOST_LABEL=traefik.http.routers.${SERVICE_NAME}.rule=Host(`${PROXY_URL}`) +ICON_LABEL=com.getarcaneapp.arcane.icon=${ICON_URL} +LOADBALANCER_LABEL=traefik.http.services.${SERVICE_NAME}.loadbalancer.server.port=${INTERNAL_PORT} + +TRAEFIK_NETWORK_LABEL=traefik.docker.network=traefik-network +ENTRYPOINT_LABEL=traefik.http.routers.${SERVICE_NAME}.entrypoints=websecure +CERT_LABEL=traefik.http.routers.${SERVICE_NAME}.tls.certresolver=letsencrypt + +AUTHELIA_LABEL=traefik.http.routers.${SERVICE_NAME}.middlewares=authelia@docker +WATCHTOWER_ENABLE_LABEL=com.centurylinklabs.watchtower.enable=true +``` ## Docker Compose Templates -* Backrest -* Bookstack -* Calibre-web * Core * Authelia * DuckDNS (no webui) * Traefik + +* Backrest +* Bookstack +* Calibre-web * Docker-proxy (no webui) * Dokuwiki * Dozzle diff --git a/docker-templates/backrest/docker-compose.yml b/docker-templates/backrest/docker-compose.yml index e6fe2b7..98a6ba5 100644 --- a/docker-templates/backrest/docker-compose.yml +++ b/docker-templates/backrest/docker-compose.yml @@ -27,7 +27,7 @@ services: retries: 3 start_period: 30s labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/backrest.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/bookstack/docker-compose.yml b/docker-templates/bookstack/docker-compose.yml index 031df43..13335d3 100644 --- a/docker-templates/bookstack/docker-compose.yml +++ b/docker-templates/bookstack/docker-compose.yml @@ -29,7 +29,7 @@ services: depends_on: - bookstack-db labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/bookstack.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/calibre/.env b/docker-templates/calibre-web/.env similarity index 100% rename from docker-templates/calibre/.env rename to docker-templates/calibre-web/.env diff --git a/docker-templates/calibre/docker-compose.yml b/docker-templates/calibre-web/docker-compose.yml similarity index 90% rename from docker-templates/calibre/docker-compose.yml rename to docker-templates/calibre-web/docker-compose.yml index 3b17418..255e67a 100644 --- a/docker-templates/calibre/docker-compose.yml +++ b/docker-templates/calibre-web/docker-compose.yml @@ -19,7 +19,7 @@ services: - DOCKER_MODS=linuxserver/mods:universal-calibre # TRAEFIK CONFIGURATION labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/calibre-web.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/dbGate/compose.yaml b/docker-templates/dbGate/compose.yaml index 3880f39..5268e20 100644 --- a/docker-templates/dbGate/compose.yaml +++ b/docker-templates/dbGate/compose.yaml @@ -15,7 +15,7 @@ services: # environment: labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/dbgate.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/dokuwiki/docker-compose.yml b/docker-templates/dokuwiki/docker-compose.yml index d365b0a..9f8bb0a 100644 --- a/docker-templates/dokuwiki/docker-compose.yml +++ b/docker-templates/dokuwiki/docker-compose.yml @@ -15,7 +15,7 @@ services: - PGID=${PGID} - TZ=${TZ} labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/dokuwiki.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/dozzle/docker-compose.yml b/docker-templates/dozzle/docker-compose.yml index 534a064..ec32f21 100644 --- a/docker-templates/dozzle/docker-compose.yml +++ b/docker-templates/dozzle/docker-compose.yml @@ -22,7 +22,7 @@ services: retries: 3 start_period: 30s labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/dozzle.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/gitea/docker-compose.yml b/docker-templates/gitea/docker-compose.yml index 56b4142..d85bbf9 100644 --- a/docker-templates/gitea/docker-compose.yml +++ b/docker-templates/gitea/docker-compose.yml @@ -29,7 +29,7 @@ services: depends_on: - gitea-db labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/gitea.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} @@ -55,7 +55,7 @@ services: - POSTGRES_PASSWORD=${GITEA_DB_PASSWORD} - POSTGRES_DB=gitea labels: - - ${DB_ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/postgresql.svg - 'homelab.category=productivity' - 'homelab.description=Gitea database' diff --git a/docker-templates/glances/docker-compose.yml b/docker-templates/glances/docker-compose.yml index 640f4a0..042ba69 100644 --- a/docker-templates/glances/docker-compose.yml +++ b/docker-templates/glances/docker-compose.yml @@ -15,7 +15,7 @@ services: environment: - GLANCES_OPT=-w labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/glances.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/homarr/docker-compose.yml b/docker-templates/homarr/docker-compose.yml index 1f06e2a..bb2930a 100644 --- a/docker-templates/homarr/docker-compose.yml +++ b/docker-templates/homarr/docker-compose.yml @@ -19,7 +19,7 @@ services: - DOCKER_PORTS=2375 labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/homarr.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/homepage/docker-compose.yml b/docker-templates/homepage/docker-compose.yml index b3c22bb..51568bb 100644 --- a/docker-templates/homepage/docker-compose.yml +++ b/docker-templates/homepage/docker-compose.yml @@ -17,7 +17,7 @@ services: - TZ=${TZ} - HOMEPAGE_ALLOWED_HOSTS=${HOMEPAGE_ALLOWED_HOSTS}, ${SERVER_IP}:${EXTERNAL_PORT} labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/homepage.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/jupyter/docker-compose.yml b/docker-templates/jupyter/docker-compose.yml index e7426ca..293b1af 100644 --- a/docker-templates/jupyter/docker-compose.yml +++ b/docker-templates/jupyter/docker-compose.yml @@ -24,7 +24,7 @@ services: # - NVIDIA_VISIBLE_DEVICES=all # - NVIDIA_DRIVER_CAPABILITIES=compute,utility labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/jupyter.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/mealie/docker-compose.yml b/docker-templates/mealie/docker-compose.yml index 5772ed6..6d6b120 100644 --- a/docker-templates/mealie/docker-compose.yml +++ b/docker-templates/mealie/docker-compose.yml @@ -17,7 +17,7 @@ services: - BASE_URL=https://${PROXY_URL} - DB_ENGINE=sqlite labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/mealie.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/metube/compose.yaml b/docker-templates/metube/compose.yaml index 77aef77..ce155c3 100644 --- a/docker-templates/metube/compose.yaml +++ b/docker-templates/metube/compose.yaml @@ -11,7 +11,7 @@ services: volumes: - ./downloads:/downloads labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/metube.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/sablier/docker-compose.yml b/docker-templates/sablier/docker-compose.yml index 0a5be35..c9ec63c 100644 --- a/docker-templates/sablier/docker-compose.yml +++ b/docker-templates/sablier/docker-compose.yml @@ -12,7 +12,7 @@ services: - start - --provider.name=docker labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/sablier.svg networks: traefik-network: diff --git a/docker-templates/valutwarden/docker-compose.yml b/docker-templates/valutwarden/docker-compose.yml index e70067b..2a677d0 100644 --- a/docker-templates/valutwarden/docker-compose.yml +++ b/docker-templates/valutwarden/docker-compose.yml @@ -29,7 +29,7 @@ services: retries: 3 start_period: 30s labels: - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/vaultwarden-light.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL} diff --git a/docker-templates/yarnl/compose.yaml b/docker-templates/yarnl/compose.yaml index 648055a..e95a130 100644 --- a/docker-templates/yarnl/compose.yaml +++ b/docker-templates/yarnl/compose.yaml @@ -50,7 +50,7 @@ services: condition: service_healthy labels: - 'com.getarcaneapp.arcane.depends-on: yarnl-db' - - ${ICON_LABEL} + - com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/yarnl.svg - ${HOST_LABEL} - ${LOADBALANCER_LABEL} - ${WATCHTOWER_ENABLE_LABEL}