Add Docker compose templates and configurations
This commit is contained in:
46
docker-templates/.env.global
Normal file
46
docker-templates/.env.global
Normal file
@@ -0,0 +1,46 @@
|
||||
TZ=America/New_York
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
SERVER_IP=192.168.4.4
|
||||
SERVER_HOSTNAME=jasper
|
||||
DUCKDNS_SUBDOMAINS=kelinreij
|
||||
DUCKDNS_TOKEN=41ef7faa-fc93-41d2-a32f-340fd2b75b2f
|
||||
DOMAIN=kelinreij.duckdns.org
|
||||
DEFAULT_USER=kelin
|
||||
DEFAULT_PASSWORD=Tiberi0u$
|
||||
DEFAULT_EMAIL=kelinshomelab@gmail.com
|
||||
STACKS_DIR=/opt/stacks # for Dockge
|
||||
PROJECTS_DIR=${STACKS_DIR} # for Arcane
|
||||
MEDIA_DIR=/mnt/media # Large media files on separate drive
|
||||
DOWNLOAD_DIR=/mnt/downloads # Downloads on separate drive
|
||||
SMTP_EMAIL_PASSWORD='zdpx aykz ofsv doin'
|
||||
SMTP_EMAIL_SERVER=smtp.gmail.com
|
||||
SMTP_EMAIL_PORT=587
|
||||
SMTP_EMAIL_FROM=${DEFAULT_EMAIL}
|
||||
SMTP_EMAIL_SECURITY=starttls
|
||||
ACME_EMAIL=${DEFAULT_EMAIL}
|
||||
SMTP_USERNAME=${SMTP_EMAIL_FROM}
|
||||
SMTP_PASSWORD=${SMTP_EMAIL_PASSWORD}
|
||||
ADMIN_SSH_PUB_KEY=
|
||||
ADMIN_EMAIL=${DEFAULT_EMAIL}
|
||||
AUTHELIA_ADMIN_USER=kelin
|
||||
AUTHELIA_ADMIN_EMAIL=kelinshomelab@gmail.com
|
||||
AUTHELIA_ADMIN_PASSWORD=Tiberi0u$
|
||||
AUTHELIA_ADMIN_PASSWORD_HASH=$argon2id$v=19$m=65536,t=3,p=4$UqnsccIzIO71IC99bWla+A$AuT07ewcoYNFJm18+otnHSpfW0Xr7uXV3XZ9sy7YxaI
|
||||
AUTHELIA_JWT_SECRET=f6e604660a5b0cc9b6e506374c1de1309e7fb7999fae330701b3ffeb8c874a8f7cb55781186e72c81f46edba4fe6874020d5edc00562bfcbf7b555e5a483e025
|
||||
AUTHELIA_SESSION_SECRET=27a9a3b300b73de99537488c56133ab062b5b7d6474063db18942314a6b0dc045ee0f42b2f8a526afb12e2a1480e1539087b4a5a67334fe825116739adf27c1b
|
||||
AUTHELIA_STORAGE_ENCRYPTION_KEY=b9a5374a75524340001bb715dc35b666dbf2288ab2cef5181a4d1ec8ec7c4ed16cab1ab9dfd981341d4b55b86b3d4b61be7f568cae896c38c08e02cd758b1cd4
|
||||
ARCANE_ENCRYPTION_KEY=3b5d5f145bd4de64c6c841cd37fb1e0711033ee5cc9f0a018730e4b005e8403154ee5dd1d3cbcf96dafced4c94cde048ffb5595bb7524c4e0d8ad8d5448f8f28
|
||||
ARCANE_JWT_SECRET=3f6d1c8c68ca75f0efb7a73bbeddd70415f23c5e5f5856fc66f80b06d1c76c6d4f259f720b1ad8d70c59b56dfc5d509430813414713ee6e31ccf2c1bce0d88cb
|
||||
BITWARDEN_SIGNUPS_ALLOWED=true
|
||||
BITWARDEN_ADMIN_TOKEN=${DEFAULT_PASSWORD}
|
||||
BITWARDEN_INVITATIONS_ALLOWED=true
|
||||
SMTP_HOST=${SMTP_EMAIL_SERVER}
|
||||
SMTP_FROM=${SMTP_EMAIL_FROM}
|
||||
SMTP_PORT=${SMTP_EMAIL_PORT}
|
||||
SMTP_SECURITY=${SMTP_EMAIL_SECURITY}
|
||||
BOOKSTACK_DB_PASSWORD=${DEFAULT_PASSWORD}
|
||||
BOOKSTACK_DB_ROOT_PASSWORD=${DEFAULT_PASSWORD}
|
||||
GITEA_DB_PASSWORD=${DEFAULT_PASSWORD}
|
||||
HOMEPAGE_ALLOWED_HOSTS=homepage.kelinreij.duckdns.org,192.168.4.4:3003
|
||||
JUPYTER_TOKEN=${DEFAULT_PASSWORD}
|
||||
47
docker-templates/.env.template
Normal file
47
docker-templates/.env.template
Normal file
@@ -0,0 +1,47 @@
|
||||
# #######################################################
|
||||
# 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
|
||||
49
docker-templates/backrest/.env
Normal file
49
docker-templates/backrest/.env
Normal file
@@ -0,0 +1,49 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=backrest
|
||||
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}
|
||||
|
||||
STACKS_DIR=/opt
|
||||
BACKUP_HOME_DIR=/home/kelin
|
||||
BACKUP_DIR=/mnt/restic-usb
|
||||
|
||||
# #############################################################
|
||||
# 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
|
||||
@@ -1,2 +0,0 @@
|
||||
TZ=America/New_York
|
||||
STACKS_DIR=/opt/stacks
|
||||
@@ -1,5 +0,0 @@
|
||||
# Backrest
|
||||
|
||||
## https://backrest.jasper.kelinreij.duckdns.org
|
||||
|
||||
## http://192.168.4.4:9898
|
||||
@@ -1,54 +0,0 @@
|
||||
services:
|
||||
backrest:
|
||||
image: garethgeorge/backrest:latest
|
||||
container_name: backrest
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- '9898:9898'
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./config:/config
|
||||
- ${STACKS_DIR}:${STACKS_DIR}:ro # Backup source
|
||||
- /mnt:/mnt:ro # Backup additional drives
|
||||
- ./cache:/cache
|
||||
environment:
|
||||
- BACKREST_DATA=/data
|
||||
- BACKREST_CONFIG=/config/config.json
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:9898/']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
labels:
|
||||
- 'com.centurylinklabs.watchtower.enable=true'
|
||||
- 'homelab.category=utilities'
|
||||
- 'homelab.description=Backup management with restic'
|
||||
- 'traefik.enable=true'
|
||||
- 'traefik.docker.network=traefik-network'
|
||||
- 'traefik.http.routers.backrest.rule=Host(`backrest.jasper.kelinreij.duckdns.org`)'
|
||||
- 'traefik.http.routers.backrest.entrypoints=websecure'
|
||||
- 'traefik.http.routers.backrest.tls.certresolver=letsencrypt'
|
||||
- 'traefik.http.routers.backrest.middlewares=authelia@docker'
|
||||
- 'traefik.http.services.backrest.loadbalancer.server.port=9898'
|
||||
|
||||
networks:
|
||||
homelab-network:
|
||||
external: true
|
||||
traefik-network:
|
||||
external: true
|
||||
|
||||
x-dockge:
|
||||
urls:
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
|
||||
x-arcane:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/backrest.svg
|
||||
urls:
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
55
docker-templates/backrest/docker-compose.yml
Normal file
55
docker-templates/backrest/docker-compose.yml
Normal file
@@ -0,0 +1,55 @@
|
||||
services:
|
||||
backrest:
|
||||
image: garethgeorge/backrest:latest
|
||||
container_name: backrest
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./config:/config
|
||||
- ./cache:/cache
|
||||
- ${STACKS_DIR}:${STACKS_DIR}:ro # Backup /opt folder
|
||||
- ${BACKUP_HOME_DIR}:${BACKUP_HOME_DIR}:ro # Backup home folder
|
||||
- ${BACKUP_DIR}:${BACKUP_DIR} # Backup Destination
|
||||
- /var/run/docker.sock:/var/run/docker.sock # Allows backrest to stop containers during backup if needed
|
||||
environment:
|
||||
- BACKREST_DATA=/data
|
||||
- BACKREST_CONFIG=/config/config.json
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:9898/']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
53
docker-templates/bookstack/.env
Normal file
53
docker-templates/bookstack/.env
Normal file
@@ -0,0 +1,53 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=bookstack
|
||||
|
||||
ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/${SERVICE_NAME}.svg
|
||||
|
||||
DB_ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/mariadb.svg
|
||||
DB_ICON_LABEL=com.getarcaneapp.arcane.icon=${DB_ICON_URL}
|
||||
|
||||
# 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=80
|
||||
EXTERNAL_PORT=6875
|
||||
LOCAL_URL=http://${SERVER_IP}:${EXTERNAL_PORT}
|
||||
|
||||
BOOKSTACK_DB_PASSWORD=${DEFAULT_PASSWORD}
|
||||
BOOKSTACK_DB_ROOT_PASSWORD=${DEFAULT_PASSWORD}
|
||||
|
||||
# #############################################################
|
||||
# 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
|
||||
@@ -1,12 +0,0 @@
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
DOMAIN=kelinreij.duckdns.org
|
||||
LOCAL_URL=
|
||||
PROXY_URL=
|
||||
|
||||
DEFAULT_USER=kelin
|
||||
DEFAULT_PASSWORD=Tiberi0u$
|
||||
DEFAULT_EMAIL=kelinshomelab@gmail.com
|
||||
|
||||
BOOKSTACK_DB_PASSWORD=${DEFAULT_PASSWORD}
|
||||
BOOKSTACK_DB_ROOT_PASSWORD=${DEFAULT_PASSWORD}
|
||||
@@ -7,13 +7,13 @@ services:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- '6875:80'
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./config:/config
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- APP_URL=https://bookstack.${DOMAIN}
|
||||
- APP_URL=https://${PROXY_URL}
|
||||
- DB_HOST=bookstack-db
|
||||
- DB_PORT=3306
|
||||
- DB_DATABASE=bookstack
|
||||
@@ -29,19 +29,15 @@ services:
|
||||
depends_on:
|
||||
- bookstack-db
|
||||
labels:
|
||||
# CHANGE THE DOMAIN NAME HERE
|
||||
- 'traefik.http.routers.bookstack.rule=Host(`bookstack.kelinreij.duckdns.org`)'
|
||||
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/bookstack.svg
|
||||
- 'com.centurylinklabs.watchtower.enable=true'
|
||||
- 'homelab.category=productivity'
|
||||
- 'homelab.description=Documentation and wiki platform'
|
||||
- 'traefik.enable=true'
|
||||
- 'traefik.docker.network=traefik-network'
|
||||
- 'traefik.http.routers.bookstack.entrypoints=websecure'
|
||||
- 'traefik.http.routers.bookstack.tls.certresolver=letsencrypt'
|
||||
- 'traefik.http.routers.bookstack.middlewares=authelia@docker'
|
||||
- 'traefik.http.services.bookstack.loadbalancer.server.port=80'
|
||||
- ${ICON_LABEL}
|
||||
- ${HOST_LABEL}
|
||||
- ${LOADBALANCER_LABEL}
|
||||
- ${WATCHTOWER_ENABLE_LABEL}
|
||||
- ${TRAEFIK_ENABLE_LABEL}
|
||||
- ${TRAEFIK_NETWORK_LABEL}
|
||||
- ${ENTRYPOINT_LABEL}
|
||||
- ${CERT_LABEL}
|
||||
- ${AUTHELIA_LABEL}
|
||||
|
||||
bookstack-db:
|
||||
image: mariadb:10.11
|
||||
@@ -57,7 +53,7 @@ services:
|
||||
- MYSQL_USER=bookstack
|
||||
- MYSQL_PASSWORD=${BOOKSTACK_DB_PASSWORD}
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/mariadb.svg
|
||||
- ${DB_ICON_LABEL}
|
||||
- 'homelab.category=productivity'
|
||||
- 'homelab.description=BookStack database'
|
||||
|
||||
@@ -69,11 +65,11 @@ networks:
|
||||
|
||||
x-dockge:
|
||||
urls:
|
||||
- https://{$PROXY_URL}
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
|
||||
x-arcane:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/bookstack-light.svg
|
||||
icon: ${ICON_URL}
|
||||
urls:
|
||||
- https://{$PROXY_URL}
|
||||
- https://192.168.4.4:6875
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
45
docker-templates/calibre/.env
Normal file
45
docker-templates/calibre/.env
Normal file
@@ -0,0 +1,45 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=calibre-web
|
||||
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
|
||||
48
docker-templates/calibre/docker-compose.yml
Normal file
48
docker-templates/calibre/docker-compose.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
services:
|
||||
# Calibre-Web - Ebook reader and server
|
||||
calibre-web:
|
||||
image: lscr.io/linuxserver/calibre-web:latest
|
||||
container_name: calibre-web
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./calibre-web/config:/config
|
||||
- ${MEDIA_DIR}/books:/books
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
- DOCKER_MODS=linuxserver/mods:universal-calibre
|
||||
# TRAEFIK CONFIGURATION
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
18
docker-templates/core/.env
Normal file
18
docker-templates/core/.env
Normal file
@@ -0,0 +1,18 @@
|
||||
# Core Stack Environment Variables
|
||||
|
||||
TZ=America/New_York
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
SERVER_IP=192.168.4.4
|
||||
SERVER_HOSTNAME=jasper
|
||||
DOMAIN=kelinreij.duckdns.org
|
||||
|
||||
DUCKDNS_SUBDOMAINS=kelinreij
|
||||
DUCKDNS_TOKEN=41ef7faa-fc93-41d2-a32f-340fd2b75b2f
|
||||
|
||||
PIHOLE_PASSWORD=Tiberi0u$
|
||||
|
||||
AUTHELIA_JWT_SECRET=f6e604660a5b0cc9b6e506374c1de1309e7fb7999fae330701b3ffeb8c874a8f7cb55781186e72c81f46edba4fe6874020d5edc00562bfcbf7b555e5a483e025
|
||||
AUTHELIA_SESSION_SECRET=27a9a3b300b73de99537488c56133ab062b5b7d6474063db18942314a6b0dc045ee0f42b2f8a526afb12e2a1480e1539087b4a5a67334fe825116739adf27c1b
|
||||
AUTHELIA_STORAGE_ENCRYPTION_KEY=b9a5374a75524340001bb715dc35b666dbf2288ab2cef5181a4d1ec8ec7c4ed16cab1ab9dfd981341d4b55b86b3d4b61be7f568cae896c38c08e02cd758b1cd4
|
||||
AUTHELIA_ADMIN_PASSWORD_HASH==19=65536,t=3,p=4+A+otnHSpfW0Xr7uXV3XZ9sy7YxaI
|
||||
107
docker-templates/core/docker-compose.yml
Normal file
107
docker-templates/core/docker-compose.yml
Normal file
@@ -0,0 +1,107 @@
|
||||
# Core Infrastructure Services
|
||||
# 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
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/duckdns.svg
|
||||
|
||||
traefik:
|
||||
# Reverse proxy and SSL termination - core routing service, must always run
|
||||
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
|
||||
- ./traefik/logs:/logs
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
networks:
|
||||
- traefik-network
|
||||
- homelab-network
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/traefik.svg
|
||||
- 'homelab.category=core'
|
||||
- 'homelab.description=Reverse proxy and SSL termination'
|
||||
- 'traefik.enable=true'
|
||||
- 'traefik.http.routers.traefik.rule=Host(`traefik.kelinreij.duckdns.org`)'
|
||||
- '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
|
||||
image: authelia/authelia:latest
|
||||
container_name: authelia
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
ports:
|
||||
- '9091:9091'
|
||||
volumes:
|
||||
- ./authelia/config:/config
|
||||
- ./authelia/secrets:/secrets
|
||||
networks:
|
||||
- traefik-network
|
||||
- homelab-network
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/authelia.svg
|
||||
- 'homelab.category=core'
|
||||
- 'homelab.description=Single sign-on authentication'
|
||||
- 'traefik.enable=true'
|
||||
- 'traefik.http.routers.authelia.rule=Host(`auth.kelinreij.duckdns.org`)'
|
||||
- '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'
|
||||
- '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.trustForwardHeader=true'
|
||||
|
||||
networks:
|
||||
traefik-network:
|
||||
external: true
|
||||
homelab-network:
|
||||
external: true
|
||||
|
||||
x-dockge:
|
||||
urls:
|
||||
- https://auth.kelinreij.duckdns.org
|
||||
- http://192.168.4.4:9091
|
||||
- https://traefik.kelinreij.duckdns.org
|
||||
- http://192.168.4.4:8080
|
||||
|
||||
x-arcane:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/traefik.svg
|
||||
urls:
|
||||
- https://auth.kelinreij.duckdns.org
|
||||
- http://192.168.4.4:9091
|
||||
- https://traefik.kelinreij.duckdns.org
|
||||
- http://192.168.4.4:8080
|
||||
31
docker-templates/core/traefik/config/routes.yml
Normal file
31
docker-templates/core/traefik/config/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
|
||||
57
docker-templates/core/traefik/config/traefik.yml
Normal file
57
docker-templates/core/traefik/config/traefik.yml
Normal file
@@ -0,0 +1,57 @@
|
||||
# Traefik Static Configuration
|
||||
# Copy to /opt/stacks/traefik/traefik.yml
|
||||
|
||||
global:
|
||||
checkNewVersion: true
|
||||
sendAnonymousUsage: false
|
||||
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: true # Dashboard accessible via Traefik route with Authelia
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
|
||||
websecure:
|
||||
address: ":443"
|
||||
http:
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: kelinshomelab@gmail.com # Your email for Let's Encrypt notifications
|
||||
caServer: https://acme-v02.api.letsencrypt.org/directory # Use staging for testing
|
||||
storage: /letsencrypt/acme.json
|
||||
# DNS challenge - For wildcard certificates (*.yourdomain.duckdns.org)
|
||||
# Works with DuckDNS - requires DUCKDNS_TOKEN in environment
|
||||
dnsChallenge:
|
||||
provider: duckdns
|
||||
resolvers:
|
||||
- "1.1.1.1:53"
|
||||
- "8.8.8.8:53"
|
||||
|
||||
providers:
|
||||
docker:
|
||||
endpoint: "unix:///var/run/docker.sock"
|
||||
exposedByDefault: false # Only expose services with traefik.enable=true
|
||||
network: traefik-network
|
||||
|
||||
file:
|
||||
directory: /dynamic
|
||||
watch: true
|
||||
|
||||
log:
|
||||
level: DEBUG # DEBUG, INFO, WARN, ERROR
|
||||
filePath: ./logs/traefik.log
|
||||
|
||||
accessLog:
|
||||
filePath: ./logs/access.log
|
||||
bufferingSize: 100
|
||||
54
docker-templates/core/traefik/config/traefik.yml.backup
Normal file
54
docker-templates/core/traefik/config/traefik.yml.backup
Normal file
@@ -0,0 +1,54 @@
|
||||
# Traefik Static Configuration
|
||||
# Copy to /opt/stacks/traefik/traefik.yml
|
||||
|
||||
global:
|
||||
checkNewVersion: true
|
||||
sendAnonymousUsage: false
|
||||
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: false # Dashboard accessible via Traefik route with Authelia
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
|
||||
websecure:
|
||||
address: ":443"
|
||||
http:
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: kelinshomelab@gmail.com # Your email for Let's Encrypt notifications
|
||||
caServer: https://acme-v02.api.letsencrypt.org/directory # Use staging for testing
|
||||
storage: /letsencrypt/acme.json
|
||||
# DNS challenge - For wildcard certificates (*.yourdomain.duckdns.org)
|
||||
# Works with DuckDNS - requires DUCKDNS_TOKEN in environment
|
||||
dnsChallenge:
|
||||
provider: duckdns
|
||||
|
||||
providers:
|
||||
docker:
|
||||
endpoint: "unix:///var/run/docker.sock"
|
||||
exposedByDefault: false # Only expose services with traefik.enable=true
|
||||
network: traefik-network
|
||||
|
||||
file:
|
||||
directory: /dynamic
|
||||
watch: true
|
||||
|
||||
log:
|
||||
level: DEBUG # DEBUG, INFO, WARN, ERROR
|
||||
filePath: /var/log/traefik/traefik.log
|
||||
|
||||
accessLog:
|
||||
filePath: /var/log/traefik/access.log
|
||||
bufferingSize: 100
|
||||
18
docker-templates/core/traefik/dynamic/homeassistant.yml
Normal file
18
docker-templates/core/traefik/dynamic/homeassistant.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
http:
|
||||
routers:
|
||||
# Individual Services
|
||||
homeassistant:
|
||||
rule: "Host(`ha.kelinreij.duckdns.org`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: homeassistant
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
services:
|
||||
# Individual Services
|
||||
homeassistant:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.5:8123"
|
||||
passHostHeader: true
|
||||
358
docker-templates/core/traefik/dynamic/jarvis-server-routes.yml
Normal file
358
docker-templates/core/traefik/dynamic/jarvis-server-routes.yml
Normal file
@@ -0,0 +1,358 @@
|
||||
# Manual Routes for Remote Server: jarvis
|
||||
# Auto-generated by EZ-Homelab
|
||||
# Last updated: 2026-02-11 20:40:04
|
||||
#
|
||||
# These routes proxy HTTPS traffic from core Traefik to HTTP services on remote server
|
||||
|
||||
http:
|
||||
routers:
|
||||
arcane-jarvis:
|
||||
rule: "Host(`arcane.jarvis.kelinreij.duckdns.org`)"
|
||||
service: arcane-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
backrest-jarvis:
|
||||
rule: "Host(`backrest.jarvis.kelinreij.duckdns.org`)"
|
||||
service: backrest-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
dockge-jarvis:
|
||||
rule: "Host(`dockge.jarvis.kelinreij.duckdns.org`)"
|
||||
service: dockge-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
dozzle-jarvis:
|
||||
rule: "Host(`dozzle.jarvis.kelinreij.duckdns.org`)"
|
||||
service: dozzle-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
formio-jarvis:
|
||||
rule: "Host(`formio.jarvis.kelinreij.duckdns.org`)"
|
||||
service: formio-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
glances-jarvis:
|
||||
rule: "Host(`glances.jarvis.kelinreij.duckdns.org`)"
|
||||
service: glances-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
jellyfin-jarvis:
|
||||
rule: "Host(`jellyfin.kelinreij.duckdns.org`)"
|
||||
service: jellyfin-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
jellyseerr-jarvis:
|
||||
rule: "Host(`jellyseerr.kelinreij.duckdns.org`)"
|
||||
service: jellyseerr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
lazylibrarian-jarvis:
|
||||
rule: "Host(`lazylibrarian.kelinreij.duckdns.org`)"
|
||||
service: lazylibrarian-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
lidarr-jarvis:
|
||||
rule: "Host(`lidarr.kelinreij.duckdns.org`)"
|
||||
service: lidarr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
motioneye-jarvis:
|
||||
rule: "Host(`motioneye.kelinreij.duckdns.org`)"
|
||||
service: motioneye-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
mylar3-jarvis:
|
||||
rule: "Host(`mylar3.kelinreij.duckdns.org`)"
|
||||
service: mylar3-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
n8n-jarvis:
|
||||
rule: "Host(`n8n.kelinreij.duckdns.org`)"
|
||||
service: n8n-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
nextcloud-jarvis:
|
||||
rule: "Host(`nextcloud.kelinreij.duckdns.org`)"
|
||||
service: nextcloud-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
prowlarr-jarvis:
|
||||
rule: "Host(`prowlarr.kelinreij.duckdns.org`)"
|
||||
service: prowlarr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
qbittorrent-jarvis:
|
||||
rule: "Host(`qbittorrent.kelinreij.duckdns.org`)"
|
||||
service: qbittorrent-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
radarr-jarvis:
|
||||
rule: "Host(`radarr.kelinreij.duckdns.org`)"
|
||||
service: radarr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
readarr-jarvis:
|
||||
rule: "Host(`readarr.kelinreij.duckdns.org`)"
|
||||
service: readarr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
sonarr-jarvis:
|
||||
rule: "Host(`sonarr.kelinreij.duckdns.org`)"
|
||||
service: sonarr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
tdarr-jarvis:
|
||||
rule: "Host(`tdarr.kelinreij.duckdns.org`)"
|
||||
service: tdarr-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
unmanic-jarvis:
|
||||
rule: "Host(`unmanic.kelinreij.duckdns.org`)"
|
||||
service: unmanic-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
wordpress-jarvis:
|
||||
rule: "Host(`wordpress.kelinreij.duckdns.org`)"
|
||||
service: wordpress-jarvis-service
|
||||
entrypoints:
|
||||
- websecure
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
middlewares:
|
||||
- authelia@docker
|
||||
|
||||
|
||||
services:
|
||||
arcane-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:3552"
|
||||
passHostHeader: true
|
||||
|
||||
backrest-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:9898"
|
||||
passHostHeader: true
|
||||
|
||||
dockge-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:5001"
|
||||
passHostHeader: true
|
||||
|
||||
dozzle-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8085"
|
||||
passHostHeader: true
|
||||
|
||||
formio-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:3002"
|
||||
passHostHeader: true
|
||||
|
||||
glances-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:61208"
|
||||
passHostHeader: true
|
||||
|
||||
jellyfin-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8096"
|
||||
passHostHeader: true
|
||||
|
||||
jellyseerr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:5055"
|
||||
passHostHeader: true
|
||||
|
||||
lazylibrarian-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:5299"
|
||||
passHostHeader: true
|
||||
|
||||
lidarr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8686"
|
||||
passHostHeader: true
|
||||
|
||||
motioneye-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8765"
|
||||
passHostHeader: true
|
||||
|
||||
mylar3-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8090"
|
||||
passHostHeader: true
|
||||
|
||||
n8n-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:5678"
|
||||
passHostHeader: true
|
||||
|
||||
nextcloud-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8089"
|
||||
passHostHeader: true
|
||||
|
||||
prowlarr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:9696"
|
||||
passHostHeader: true
|
||||
|
||||
qbittorrent-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8200"
|
||||
passHostHeader: true
|
||||
|
||||
radarr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:7878"
|
||||
passHostHeader: true
|
||||
|
||||
readarr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8787"
|
||||
passHostHeader: true
|
||||
|
||||
sonarr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8989"
|
||||
passHostHeader: true
|
||||
|
||||
tdarr-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8266"
|
||||
passHostHeader: true
|
||||
|
||||
unmanic-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:9999"
|
||||
passHostHeader: true
|
||||
|
||||
wordpress-jarvis-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.4.11:8088"
|
||||
passHostHeader: true
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# Sablier Middleware for Remote Server: jarvis
|
||||
# Auto-generated by EZ-Homelab
|
||||
# Last updated: 2026-02-11 20:40:04
|
||||
#
|
||||
# This middleware enables lazy loading for services on jarvis
|
||||
# Each server has its own Sablier instance managing local containers
|
||||
|
||||
http:
|
||||
middlewares:
|
||||
sablier-jarvis:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: "http://192.168.4.11:10000"
|
||||
sessionDuration: "5m"
|
||||
dynamic:
|
||||
theme: "hacker-terminal"
|
||||
131
docker-templates/core/traefik/dynamic/sablier.yml
Normal file
131
docker-templates/core/traefik/dynamic/sablier.yml
Normal file
@@ -0,0 +1,131 @@
|
||||
# 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.yourdomain.duckdns.org/
|
||||
authResponseHeaders:
|
||||
- X-Secret
|
||||
trustForwardHeader: true
|
||||
|
||||
sablier-jasper-vaultwarden:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-vaultwarden
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Vaultwarden
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-bookstack:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-bookstack
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Bookstack
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-calibre-web:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-calibre-web
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Calibre Web
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-dozzle:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-dozzle
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: dozzle
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-dokuwiki:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-dokuwiki
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: DokuWiki
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-assistant:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-assistant
|
||||
sessionDuration: 30m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: EZ-Assistant
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-gitea:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-gitea
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Gitea
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-glances:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-glances
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Glances
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-jupyter:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-jupyter
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Jupyter
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
sablier-jasper-mealie:
|
||||
plugin:
|
||||
sablier:
|
||||
sablierUrl: http://sablier-service:10000
|
||||
group: jasper-mealie
|
||||
sessionDuration: 5m
|
||||
ignoreUserAgent: curl
|
||||
dynamic:
|
||||
displayName: Mealie
|
||||
theme: ghost
|
||||
show-details-by-default: true
|
||||
|
||||
|
||||
16
docker-templates/core/traefik/dynamic/wildcard-cert.yml
Normal file
16
docker-templates/core/traefik/dynamic/wildcard-cert.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
# Wildcard Certificate Configuration
|
||||
# This creates a router to trigger wildcard certificate generation
|
||||
|
||||
http:
|
||||
routers:
|
||||
wildcard-cert-request:
|
||||
rule: "Host(`kelinreij.duckdns.org`) || Host(`www.kelinreij.duckdns.org`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: noop@internal
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
domains:
|
||||
- main: "kelinreij.duckdns.org"
|
||||
sans:
|
||||
- "*.kelinreij.duckdns.org"
|
||||
292
docker-templates/core/traefik/letsencrypt/acme.json
Normal file
292
docker-templates/core/traefik/letsencrypt/acme.json
Normal file
File diff suppressed because one or more lines are too long
41
docker-templates/core/traefik/letsencrypt/acme.json.backup
Normal file
41
docker-templates/core/traefik/letsencrypt/acme.json.backup
Normal file
File diff suppressed because one or more lines are too long
511931
docker-templates/core/traefik/logs/access.log
Normal file
511931
docker-templates/core/traefik/logs/access.log
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
222854
docker-templates/core/traefik/logs/traefik.log
Normal file
222854
docker-templates/core/traefik/logs/traefik.log
Normal file
File diff suppressed because one or more lines are too long
40
docker-templates/dbGate/.env
Normal file
40
docker-templates/dbGate/.env
Normal file
@@ -0,0 +1,40 @@
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=dbgate
|
||||
|
||||
# #############################################################################
|
||||
# Variables above this line are used for templating only,
|
||||
# they are not used by the compose file directly
|
||||
|
||||
|
||||
# #############################################################################
|
||||
# Remaining Variables are used by the compose file
|
||||
|
||||
CONTAINER_NAME=${SERVICE_NAME}
|
||||
INTERNAL_PORT=3000
|
||||
EXTERNAL_PORT=3027
|
||||
LOCAL_URL=http://${SERVER_IP}:${EXTERNAL_PORT}
|
||||
|
||||
# Services that exist on multiple servers should include ${SERVER_NAME} in PROXY_URL
|
||||
# Services that exist on a single server can omit ${SERVER_NAME}
|
||||
PROXY_URL=${SERVICE_NAME}.${SUBDOMAIN}.duckdns.org
|
||||
|
||||
# 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
|
||||
45
docker-templates/dbGate/compose.yaml
Normal file
45
docker-templates/dbGate/compose.yaml
Normal file
@@ -0,0 +1,45 @@
|
||||
services:
|
||||
dbgate:
|
||||
image: dbgate/dbgate
|
||||
restart: unless-stopped
|
||||
container_name: dbgate
|
||||
networks:
|
||||
- traefik-network
|
||||
- homelab-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./data:/root/.dbgate
|
||||
- /opt:/opt
|
||||
|
||||
# environment:
|
||||
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
60
docker-templates/docker-compose.yml.template
Normal file
60
docker-templates/docker-compose.yml.template
Normal file
@@ -0,0 +1,60 @@
|
||||
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:
|
||||
- ${ICON_LABEL}
|
||||
- ${HOST_LABEL}
|
||||
- ${LOADBALANCER_LABEL}
|
||||
- ${WATCHTOWER_ENABLE_LABEL}
|
||||
- ${TRAEFIK_ENABLE_LABEL}
|
||||
- ${TRAEFIK_NETWORK_LABEL}
|
||||
- ${ENTRYPOINT_LABEL}
|
||||
- ${CERT_LABEL}
|
||||
- ${AUTHELIA_LABEL}
|
||||
|
||||
#- 'com.centurylinklabs.watchtower.enable=true'
|
||||
#- 'homelab.category=utilities'
|
||||
#- 'homelab.description=Backup management with restic'
|
||||
#- 'traefik.enable=true'
|
||||
#- 'traefik.docker.network=traefik-network'
|
||||
#- 'traefik.http.routers.backrest.entrypoints=websecure'
|
||||
#- 'traefik.http.routers.backrest.tls.certresolver=letsencrypt'
|
||||
#- 'traefik.http.routers.backrest.middlewares=authelia@docker'
|
||||
#- 'traefik.http.services.backrest.loadbalancer.server.port=9898'
|
||||
|
||||
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}
|
||||
37
docker-templates/docker-proxy/docker-compose.yml
Normal file
37
docker-templates/docker-proxy/docker-compose.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
services:
|
||||
dockerproxy:
|
||||
image: tecnativa/docker-socket-proxy:latest
|
||||
container_name: dockerproxy
|
||||
privileged: true
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
ports:
|
||||
- "2375:2375"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- PING=1
|
||||
- VERSION=1
|
||||
- INFO=1
|
||||
- POST=1
|
||||
- CONTAINERS=1
|
||||
- SERVICES=1
|
||||
- TASKS=1
|
||||
- NETWORKS=1
|
||||
- NODES=1
|
||||
- EXEC=1
|
||||
- IMAGES=1
|
||||
- VOLUMES=1
|
||||
- SWARM=1
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/docker.svg
|
||||
- homelab.category=infrastructure
|
||||
- homelab.description=Docker socket proxy for security
|
||||
|
||||
networks:
|
||||
homelab-network:
|
||||
external: true
|
||||
|
||||
x-arcane:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/docker.svg
|
||||
46
docker-templates/dokuwiki/.env
Normal file
46
docker-templates/dokuwiki/.env
Normal file
@@ -0,0 +1,46 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=dokuwiki
|
||||
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
|
||||
44
docker-templates/dokuwiki/docker-compose.yml
Normal file
44
docker-templates/dokuwiki/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
services:
|
||||
dokuwiki:
|
||||
image: lscr.io/linuxserver/dokuwiki:latest
|
||||
container_name: dokuwiki
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./config:/config
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
46
docker-templates/dozzle/.env
Normal file
46
docker-templates/dozzle/.env
Normal file
@@ -0,0 +1,46 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=backrest
|
||||
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=8080
|
||||
EXTERNAL_PORT=8085
|
||||
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
|
||||
51
docker-templates/dozzle/docker-compose.yml
Normal file
51
docker-templates/dozzle/docker-compose.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
services:
|
||||
dozzle:
|
||||
image: amir20/dozzle:latest
|
||||
container_name: dozzle
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
- DOZZLE_LEVEL=info
|
||||
- DOZZLE_TAILSIZE=300
|
||||
- DOZZLE_FILTER=status=running
|
||||
- DOZZLE_HOSTNAME=${PROXY_URL}
|
||||
healthcheck:
|
||||
test: ['CMD', '/dozzle', 'healthcheck']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
51
docker-templates/gitea/.env
Normal file
51
docker-templates/gitea/.env
Normal file
@@ -0,0 +1,51 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=gitea
|
||||
ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/${SERVICE_NAME}.svg
|
||||
DB_ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/postgresql.svg
|
||||
DB_ICON_LABEL=com.getarcaneapp.arcane.icon=${DB_ICON_URL}
|
||||
|
||||
# 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=3000
|
||||
EXTERNAL_PORT=3010
|
||||
LOCAL_URL=http://${SERVER_IP}:${EXTERNAL_PORT}
|
||||
|
||||
GITEA_DB_PASSWORD=
|
||||
|
||||
# #############################################################
|
||||
# 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
|
||||
|
||||
77
docker-templates/gitea/docker-compose.yml
Normal file
77
docker-templates/gitea/docker-compose.yml
Normal file
@@ -0,0 +1,77 @@
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- USER_UID=${PUID}
|
||||
- USER_GID=${PGID}
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=gitea-db:5432
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=${GITEA_DB_PASSWORD}
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
depends_on:
|
||||
- gitea-db
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${HOST_LABEL}
|
||||
- ${LOADBALANCER_LABEL}
|
||||
- ${WATCHTOWER_ENABLE_LABEL}
|
||||
- ${CATEGORY_LABEL}
|
||||
- ${DESCRIPTION_LABEL}
|
||||
- ${TRAEFIK_ENABLE_LABEL}
|
||||
- ${TRAEFIK_NETWORK_LABEL}
|
||||
- ${ENTRYPOINT_LABEL}
|
||||
- ${CERT_LABEL}
|
||||
# - ${AUTHELIA_LABEL}
|
||||
|
||||
|
||||
gitea-db:
|
||||
image: postgres:14-alpine
|
||||
container_name: gitea-db
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_USER=gitea
|
||||
- POSTGRES_PASSWORD=${GITEA_DB_PASSWORD}
|
||||
- POSTGRES_DB=gitea
|
||||
labels:
|
||||
- ${DB_ICON_LABEL}
|
||||
- 'homelab.category=productivity'
|
||||
- 'homelab.description=Gitea database'
|
||||
|
||||
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}
|
||||
46
docker-templates/glances/.env
Normal file
46
docker-templates/glances/.env
Normal file
@@ -0,0 +1,46 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=glances
|
||||
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=61208
|
||||
EXTERNAL_PORT=61208
|
||||
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
|
||||
44
docker-templates/glances/docker-compose.yml
Normal file
44
docker-templates/glances/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
services:
|
||||
glances:
|
||||
image: nicolargo/glances:latest-full
|
||||
container_name: glances
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
pid: host
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./config:/glances/conf
|
||||
environment:
|
||||
- GLANCES_OPT=-w
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
47
docker-templates/homarr/.env
Normal file
47
docker-templates/homarr/.env
Normal file
@@ -0,0 +1,47 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=homarr
|
||||
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=7575
|
||||
EXTERNAL_PORT=7575
|
||||
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
|
||||
48
docker-templates/homarr/docker-compose.yml
Normal file
48
docker-templates/homarr/docker-compose.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
services:
|
||||
homarr:
|
||||
image: ghcr.io/homarr-labs/homarr:latest
|
||||
container_name: homarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./appdata:/appdata
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
- SECRET_ENCRYPTION_KEY=fe342b503e9a684404e6a16b0ea8da3d54030346ad94236788752df50f89389a
|
||||
- ENABLE_DOCKER=true
|
||||
- DOCKER_HOST=tcp://dockerproxy:2375
|
||||
- DOCKER_HOSTNAMES=dockerproxy
|
||||
- DOCKER_PORTS=2375
|
||||
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
47
docker-templates/homepage/.env
Normal file
47
docker-templates/homepage/.env
Normal file
@@ -0,0 +1,47 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=homepage
|
||||
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=3000
|
||||
EXTERNAL_PORT=3003
|
||||
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
|
||||
313
docker-templates/homepage/config/bookmarks.yaml
Normal file
313
docker-templates/homepage/config/bookmarks.yaml
Normal file
@@ -0,0 +1,313 @@
|
||||
# Homepage Bookmarks - Comprehensive EZ-Homelab Resources
|
||||
|
||||
- EZ-Homelab Project:
|
||||
- EZ-Homelab GitHub:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/kelinfoxy/EZ-Homelab
|
||||
- EZ-Homelab Wiki:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/readthedocs.png
|
||||
href: https://github.com/kelinfoxy/EZ-Homelab/wiki
|
||||
- Homepage Dashboard:
|
||||
- icon: homepage.png
|
||||
href: https://gethomepage.dev
|
||||
- Core Services:
|
||||
- Traefik website:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/traefik.png
|
||||
href: https://traefik.io
|
||||
- Traefik github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/traefik/traefik
|
||||
- Traefik docker-hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/_/traefik
|
||||
- Authelia website:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/authelia.png
|
||||
href: https://www.authelia.com
|
||||
- Authelia github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/authelia/authelia
|
||||
- Authelia docker-hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/authelia/authelia
|
||||
- DuckDNS:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/duckduckgo.png
|
||||
href: https://www.duckdns.org
|
||||
- Docker:
|
||||
- icon: docker.png
|
||||
href: https://www.docker.com
|
||||
- Docker:
|
||||
- Docker Hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com
|
||||
- Docker Docs:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/docker.png
|
||||
href: https://docs.docker.com
|
||||
- LinuxServer.io:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/linux.png
|
||||
href: https://www.linuxserver.io
|
||||
description: LinuxServer.io Container Images
|
||||
- LinuxServer github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/linuxserver
|
||||
- Media Services:
|
||||
- Jellyfin website:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/jellyfin.png
|
||||
href: https://jellyfin.org
|
||||
- Jellyfin github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/jellyfin/jellyfin
|
||||
- Jellyfin docker-hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/jellyfin/jellyfin
|
||||
- Sonarr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/sonarr.png
|
||||
href: https://sonarr.tv
|
||||
- Sonarr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Sonarr/Sonarr
|
||||
- Sonarr docker-hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/sonarr
|
||||
description: Sonarr Docker Image
|
||||
- Radarr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/radarr.png
|
||||
href: https://radarr.video
|
||||
- Radarr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Radarr/Radarr
|
||||
- Radarr docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/radarr
|
||||
- Prowlarr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/prowlarr.png
|
||||
href: https://prowlarr.com
|
||||
- Prowlarr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Prowlarr/Prowlarr
|
||||
- Prowlarr github:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/prowlarr
|
||||
- qBittorrent:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/qbittorrent.png
|
||||
href: https://www.qbittorrent.org
|
||||
- qBittorrent github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/qbittorrent/qBittorrent
|
||||
- qBittorrent docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/qbittorrent
|
||||
- Readarr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/readarr.png
|
||||
href: https://readarr.com
|
||||
- Readarr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Readarr/Readarr
|
||||
- Readarr docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/readarr
|
||||
- Lidarr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/lidarr.png
|
||||
href: https://lidarr.audio
|
||||
- Lidarr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Lidarr/Lidarr
|
||||
- Lidarr docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/lidarr
|
||||
- Jellyseerr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/jellyseerr.png
|
||||
href: https://jellyseerr.dev
|
||||
- Jellyseerr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Fallenbagel/jellyseerr
|
||||
- Jellyseerr docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/fallenbagel/jellyseerr
|
||||
- Tdarr:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/tdarr.png
|
||||
href: https://tdarr.io
|
||||
- Tdarr github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/HaveAGitGat/Tdarr
|
||||
- Tdarr docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/haveagitgat/tdarr
|
||||
- Unmanic:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/unmanic.png
|
||||
href: https://docs.unmanic.app
|
||||
- Unmanic github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/Unmanic/unmanic
|
||||
- Unmanic docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/josh5/unmanic
|
||||
- Calibre-Web:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/calibre-web.png
|
||||
href: https://github.com/janeczku/calibre-web
|
||||
- CaLibre-Web github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/janeczku/calibre-web
|
||||
- Calibre-Web docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/calibre-web
|
||||
- Smart Home:
|
||||
- Home Assistant:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/homeassistant.png
|
||||
href: https://www.home-assistant.io
|
||||
- HA github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/home-assistant/core
|
||||
- HA docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/homeassistant
|
||||
- ESPHome:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/esphome.png
|
||||
href: https://esphome.io
|
||||
- ESPHome github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/esphome/esphome
|
||||
- ESPHome docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/esphome/esphome
|
||||
- MotionEye:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/motioneye.png
|
||||
href: https://github.com/motioneye-project/motioneye
|
||||
- MotionEye github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/motioneye-project/motioneye
|
||||
- MotionEye docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/motioneye
|
||||
- TasmoAdmin:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/tasmota.png
|
||||
href: https://github.com/reloxx13/TasmoAdmin
|
||||
- TasmoAdmin github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/reloxx13/TasmoAdmin
|
||||
- TasmoAdmin docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/raymondmm/tasmoadmin
|
||||
|
||||
- Services:
|
||||
- Nextcloud:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/nextcloud.png
|
||||
href: https://nextcloud.com
|
||||
- Nextcloud github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/nextcloud/server
|
||||
- Nextcloud docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/nextcloud
|
||||
- Gitea:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/gitea.png
|
||||
href: https://gitea.io
|
||||
- Gitea github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/go-gitea/gitea
|
||||
- Gitea docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/gitea/gitea
|
||||
- BookStack:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/bookstack.png
|
||||
href: https://www.bookstackapp.com
|
||||
- BookStack github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/BookStackApp/BookStack
|
||||
- BookStack docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/bookstack
|
||||
- DokuWiki:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/dokuwiki.png
|
||||
href: https://www.dokuwiki.org
|
||||
- DokuWiki github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/dokuwiki/dokuwiki
|
||||
- DokuWiki docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/dokuwiki
|
||||
- WordPress:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/wordpress.png
|
||||
href: https://wordpress.org
|
||||
- WordPress github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/WordPress/WordPress
|
||||
- WordPress docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/wordpress
|
||||
- Mealie:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/mealie.png
|
||||
href: https://hay-kot.github.io/mealie
|
||||
- Mealie github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/hay-kot/mealie
|
||||
- Mealie docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/hkotel/mealie
|
||||
- Form.io:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/formio.png
|
||||
href: https://www.form.io
|
||||
- Form.io github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/formio/formio
|
||||
- Form.io docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/formio/formio-enterprise
|
||||
- Jupyter Lab:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/jupyter.png
|
||||
href: https://jupyter.org
|
||||
- Jupyter Lab github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/jupyterlab/jupyterlab
|
||||
- Jupyter Lab docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/jupyterlab
|
||||
- Vaultwarden:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/bitwarden.png
|
||||
href: https://github.com/dani-garcia/vaultwarden
|
||||
- Vaultwarden github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/dani-garcia/vaultwarden
|
||||
- Vaultwarden docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/vaultwarden/server
|
||||
- Glances:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/glances.png
|
||||
href: https://nicolargo.github.io/glances
|
||||
- Glances github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/nicolargo/glances
|
||||
- Glances docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/linuxserver/glances
|
||||
- Dozzle:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/dozzle.png
|
||||
href: https://dozzle.dev
|
||||
- Dozzle github:
|
||||
- icon: github-light.png
|
||||
href: https://github.com/amir20/dozzle
|
||||
- Dozzle docker hub:
|
||||
- icon: docker.png
|
||||
href: https://hub.docker.com/r/amir20/dozzle
|
||||
|
||||
- External Resources:
|
||||
- Awesome Docker Compose:
|
||||
- icon: docker.png
|
||||
href: https://awesome-docker-compose.com
|
||||
- Servarr Wiki:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/servarr.png
|
||||
href: https://wiki.servarr.com
|
||||
- Let's Encrypt:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/letsencrypt.png
|
||||
href: https://letsencrypt.org
|
||||
- Awesome Selfhosted:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/awesome.png
|
||||
href: https://awesome-selfhosted.net
|
||||
- Homelab Wiki:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/wikipedia.png
|
||||
href: https://homelab.wiki
|
||||
- Reddit r/selfhosted:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/reddit.png
|
||||
href: https://reddit.com/r/selfhosted
|
||||
- Reddit r/homelab:
|
||||
- icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/reddit.png
|
||||
href: https://reddit.com/r/homelab
|
||||
0
docker-templates/homepage/config/custom.css
Normal file
0
docker-templates/homepage/config/custom.css
Normal file
0
docker-templates/homepage/config/custom.js
Normal file
0
docker-templates/homepage/config/custom.js
Normal file
10
docker-templates/homepage/config/docker.yaml
Normal file
10
docker-templates/homepage/config/docker.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
# For configuration options and examples, please see:
|
||||
# https://gethomepage.dev/configs/docker/
|
||||
|
||||
# my-docker:
|
||||
# host: 127.0.0.1
|
||||
# port: 2375
|
||||
|
||||
# my-docker:
|
||||
# socket: /var/run/docker.sock
|
||||
2
docker-templates/homepage/config/kubernetes.yaml
Normal file
2
docker-templates/homepage/config/kubernetes.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
# sample kubernetes config
|
||||
439
docker-templates/homepage/config/logs/homepage.log
Normal file
439
docker-templates/homepage/config/logs/homepage.log
Normal file
@@ -0,0 +1,439 @@
|
||||
[2026-03-14T01:16:28.856Z] info: kubernetes.yaml was copied to the config folder
|
||||
[2026-03-14T02:23:43.120Z] info: docker.yaml was copied to the config folder
|
||||
[2026-03-14T02:23:43.123Z] info: services.yaml was copied to the config folder
|
||||
[2026-03-14T02:23:43.126Z] info: bookmarks.yaml was copied to the config folder
|
||||
[2026-03-14T02:23:43.128Z] info: proxmox.yaml was copied to the config folder
|
||||
[2026-03-14T02:23:43.152Z] info: widgets.yaml was copied to the config folder
|
||||
[2026-03-14T02:23:43.154Z] info: custom.css was copied to the config folder
|
||||
[2026-03-14T02:23:43.156Z] info: custom.js was copied to the config folder
|
||||
[2026-03-15T03:57:48.592Z] info: kubernetes.yaml was copied to the config folder
|
||||
[2026-03-15T03:57:48.607Z] info: proxmox.yaml was copied to the config folder
|
||||
[2026-03-15T04:10:09.588Z] error: end of the stream or a document separator is expected (4:1)
|
||||
|
||||
1 | https://cdn.jsdelivr.net/gh/self ...
|
||||
2 | # Homepage Bookmarks - Comprehen ...
|
||||
3 |
|
||||
4 | - EZ-Homelab Project:
|
||||
-----^
|
||||
5 | - EZ-Homelab GitHub:
|
||||
6 | - icon: github.png
|
||||
[2026-03-15T04:10:09.817Z] error: end of the stream or a document separator is expected (4:1)
|
||||
|
||||
1 | https://cdn.jsdelivr.net/gh/self ...
|
||||
2 | # Homepage Bookmarks - Comprehen ...
|
||||
3 |
|
||||
4 | - EZ-Homelab Project:
|
||||
-----^
|
||||
5 | - EZ-Homelab GitHub:
|
||||
6 | - icon: github.png
|
||||
[2026-03-15T04:10:09.943Z] error: <index> YAMLException: end of the stream or a document separator is expected (4:1)
|
||||
|
||||
1 | https://cdn.jsdelivr.net/gh/self ...
|
||||
2 | # Homepage Bookmarks - Comprehen ...
|
||||
3 |
|
||||
4 | - EZ-Homelab Project:
|
||||
-----^
|
||||
5 | - EZ-Homelab GitHub:
|
||||
6 | - icon: github.png
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2741:5)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
at n (/app/.next/server/pages/index.js:5:67898)
|
||||
at async K (/app/.next/server/pages/index.js:1:4420)
|
||||
at async rs (/app/node_modules/.pnpm/next@15.5.11_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js:12:4681)
|
||||
at async o (/app/.next/server/chunks/6566.js:8:12628)
|
||||
at async e5.handleRevalidate (/app/node_modules/.pnpm/next@15.5.11_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js:1:68394)
|
||||
[2026-03-15T04:10:10.329Z] error: end of the stream or a document separator is expected (4:1)
|
||||
|
||||
1 | https://cdn.jsdelivr.net/gh/self ...
|
||||
2 | # Homepage Bookmarks - Comprehen ...
|
||||
3 |
|
||||
4 | - EZ-Homelab Project:
|
||||
-----^
|
||||
5 | - EZ-Homelab GitHub:
|
||||
6 | - icon: github.png
|
||||
[2026-03-15T04:23:25.602Z] error: <index> YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at storeMappingPair (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1464:7)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2269:9)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
[2026-03-15T04:23:25.659Z] error: Failed to discover services, please check kubernetes.yaml for errors or remove example entries.
|
||||
[2026-03-15T04:23:25.660Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
[2026-03-15T04:23:25.673Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T04:23:25.674Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
[2026-03-15T04:23:25.688Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T04:23:25.689Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
[2026-03-15T04:23:25.778Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at storeMappingPair (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1464:7)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2269:9)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
[2026-03-15T04:23:25.820Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at storeMappingPair (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1464:7)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2269:9)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
[2026-03-15T04:23:25.979Z] error: Failed to discover services, please check kubernetes.yaml for errors or remove example entries.
|
||||
[2026-03-15T04:23:25.980Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
[2026-03-15T04:23:25.992Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T04:23:25.992Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
[2026-03-15T04:23:26.001Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T04:23:26.002Z] error: YAMLException: duplicated mapping key (40:3)
|
||||
|
||||
37 | style: row
|
||||
38 | columns: 6
|
||||
39 |
|
||||
40 | Smart Home:
|
||||
--------^
|
||||
41 | style: row
|
||||
42 | columns: 6
|
||||
[2026-03-15T04:56:18.035Z] error: bad indentation of a mapping entry (141:4)
|
||||
|
||||
138 | - Unmanic github:
|
||||
139 | - icon: github.png
|
||||
140 | href: https://github.com ...
|
||||
141 | - Unmanic docker hub:
|
||||
----------^
|
||||
142 | - icon: docker.png
|
||||
143 | href: https://hub.docker ...
|
||||
[2026-03-15T04:56:18.068Z] error: <index> YAMLException: bad indentation of a mapping entry (141:4)
|
||||
|
||||
138 | - Unmanic github:
|
||||
139 | - icon: github.png
|
||||
140 | href: https://github.com ...
|
||||
141 | - Unmanic docker hub:
|
||||
----------^
|
||||
142 | - icon: docker.png
|
||||
143 | href: https://hub.docker ...
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2278:7)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2104:5)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
at n (/app/.next/server/pages/index.js:5:67898)
|
||||
[2026-03-15T04:56:18.335Z] error: bad indentation of a mapping entry (141:4)
|
||||
|
||||
138 | - Unmanic github:
|
||||
139 | - icon: github.png
|
||||
140 | href: https://github.com ...
|
||||
141 | - Unmanic docker hub:
|
||||
----------^
|
||||
142 | - icon: docker.png
|
||||
143 | href: https://hub.docker ...
|
||||
[2026-03-15T04:56:38.964Z] error: <index> YAMLException: bad indentation of a mapping entry (150:4)
|
||||
|
||||
147 | - CaLibre-Web github:
|
||||
148 | - icon: github.png
|
||||
149 | href: https://github.com ...
|
||||
150 | - Calibre-Web docker hub:
|
||||
----------^
|
||||
151 | - icon: docker.png
|
||||
152 | href: https://hub.docker ...
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2278:7)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2104:5)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
at n (/app/.next/server/pages/index.js:5:67898)
|
||||
[2026-03-15T04:56:39.205Z] error: bad indentation of a mapping entry (150:4)
|
||||
|
||||
147 | - CaLibre-Web github:
|
||||
148 | - icon: github.png
|
||||
149 | href: https://github.com ...
|
||||
150 | - Calibre-Web docker hub:
|
||||
----------^
|
||||
151 | - icon: docker.png
|
||||
152 | href: https://hub.docker ...
|
||||
[2026-03-15T04:57:01.526Z] error: <index> YAMLException: bad indentation of a sequence entry (213:6)
|
||||
|
||||
210 | - BookStack:
|
||||
211 | - icon: https://cdn.jsdelivr ...
|
||||
212 | href: https://www.bookstac ...
|
||||
213 | - BookStack github:
|
||||
------------^
|
||||
214 | - icon: github.png
|
||||
215 | href: https://github.com/B ...
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2111:7)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2104:5)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
[2026-03-15T04:57:01.718Z] error: bad indentation of a sequence entry (213:6)
|
||||
|
||||
210 | - BookStack:
|
||||
211 | - icon: https://cdn.jsdelivr ...
|
||||
212 | href: https://www.bookstac ...
|
||||
213 | - BookStack github:
|
||||
------------^
|
||||
214 | - icon: github.png
|
||||
215 | href: https://github.com/B ...
|
||||
[2026-03-15T04:57:17.154Z] error: <index> YAMLException: bad indentation of a sequence entry (226:15)
|
||||
|
||||
223 | - icon: github.png
|
||||
224 | href: https://github.com/dokuwiki/d ...
|
||||
225 | - DokuWiki docker hub
|
||||
226 | - icon: docker.png
|
||||
---------------------^
|
||||
227 | href: https://hub.docker.com/r/linu ...
|
||||
228 | - WordPress:
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2111:7)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2104:5)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
[2026-03-15T04:57:17.357Z] error: bad indentation of a sequence entry (226:15)
|
||||
|
||||
223 | - icon: github.png
|
||||
224 | href: https://github.com/dokuwiki/d ...
|
||||
225 | - DokuWiki docker hub
|
||||
226 | - icon: docker.png
|
||||
---------------------^
|
||||
227 | href: https://hub.docker.com/r/linu ...
|
||||
228 | - WordPress:
|
||||
[2026-03-15T04:57:31.709Z] error: <index> YAMLException: bad indentation of a mapping entry (279:5)
|
||||
|
||||
276 | - Glances github:
|
||||
277 | - icon: github.png
|
||||
278 | href: https://github.com/ ...
|
||||
279 | _ Glances docker hub:
|
||||
-----------^
|
||||
280 | - icon: docker.png
|
||||
281 | href: https://hub.docker. ...
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2278:7)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockSequence (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2104:5)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2536:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
at Object.load$1 [as load] (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2810:19)
|
||||
at n (/app/.next/server/pages/index.js:5:67898)
|
||||
[2026-03-15T04:57:31.919Z] error: bad indentation of a mapping entry (279:5)
|
||||
|
||||
276 | - Glances github:
|
||||
277 | - icon: github.png
|
||||
278 | href: https://github.com/ ...
|
||||
279 | _ Glances docker hub:
|
||||
-----------^
|
||||
280 | - icon: docker.png
|
||||
281 | href: https://hub.docker. ...
|
||||
[2026-03-15T05:00:37.720Z] error: <index> YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2232:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
[2026-03-15T05:00:37.765Z] error: Failed to discover services, please check kubernetes.yaml for errors or remove example entries.
|
||||
[2026-03-15T05:00:37.765Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
[2026-03-15T05:00:37.774Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T05:00:37.775Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
[2026-03-15T05:00:37.785Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T05:00:37.785Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
[2026-03-15T05:00:37.866Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2232:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
[2026-03-15T05:00:37.886Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
at generateError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1289:10)
|
||||
at throwError (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:1293:9)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2232:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readBlockMapping (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2260:11)
|
||||
at composeNode (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2537:12)
|
||||
at readDocument (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2721:3)
|
||||
at loadDocuments (file:///app/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs:2784:5)
|
||||
[2026-03-15T05:00:38.003Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T05:00:38.004Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
[2026-03-15T05:00:38.009Z] error: Failed to discover services, please check kubernetes.yaml for errors or remove example entries.
|
||||
[2026-03-15T05:00:38.009Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
[2026-03-15T05:00:38.018Z] error: Failed to load settings.yaml, please check for errors
|
||||
[2026-03-15T05:00:38.018Z] error: YAMLException: can not read an implicit mapping pair; a colon is missed (42:14)
|
||||
|
||||
39 |
|
||||
40 | Media Services:
|
||||
41 | style: row
|
||||
42 | columns:4
|
||||
-------------------^
|
||||
43 |
|
||||
44 | Services:
|
||||
5
docker-templates/homepage/config/proxmox.yaml
Normal file
5
docker-templates/homepage/config/proxmox.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
# pve:
|
||||
# url: https://proxmox.host.or.ip:8006
|
||||
# token: username@pam!Token ID
|
||||
# secret: secret
|
||||
140
docker-templates/homepage/config/services.yaml
Normal file
140
docker-templates/homepage/config/services.yaml
Normal file
@@ -0,0 +1,140 @@
|
||||
---
|
||||
# Currently Installed Services - Grouped by Stack
|
||||
|
||||
- Jasper Admin:
|
||||
- Arcane:
|
||||
icon: arcane.png
|
||||
href: https://arcane.jasper.kelinreij.duckdns.org
|
||||
- Dockge:
|
||||
icon: dockge.png
|
||||
href: https://dockge.jasper.kelinreij.duckdns.org
|
||||
- Dozzle:
|
||||
icon: dozzle.png
|
||||
href: https://dozzle.jasper.kelinreij.duckdns.org
|
||||
- Glances:
|
||||
icon: glances.png
|
||||
href: https://glances.jasper.kelinreij.duckdns.org
|
||||
- Traefik:
|
||||
icon: traefik.png
|
||||
href: https://traefik.kelinreij.duckdns.org
|
||||
- Authelia:
|
||||
icon: authelia.png
|
||||
href: https://auth.kelinreij.duckdns.org
|
||||
- Backrest:
|
||||
icon: backrest.png
|
||||
href: https://backrest.jasper.kelinreij.duckdns.org
|
||||
- dbGate:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/dbgate.png
|
||||
href: https://dbgate.kelinreij.duckdns.org
|
||||
|
||||
- Jasper Services:
|
||||
- BookStack:
|
||||
icon: bookstack.png
|
||||
href: https://bookstack.kelinreij.duckdns.org
|
||||
- DokuWiki:
|
||||
icon: dokuwiki.png
|
||||
href: https://dokuwiki.kelinreij.duckdns.org
|
||||
- Homepage:
|
||||
icon: homepage.png
|
||||
href: https://homepage.kelinreij.duckdns.org
|
||||
- Homarr:
|
||||
icon: homarr.png
|
||||
href: https://homarr.kelinreij.duckdns.org
|
||||
- Gitea:
|
||||
icon: gitea.png
|
||||
href: https://gitea.kelinreij.duckdns.org
|
||||
- Mealie:
|
||||
icon: mealie.png
|
||||
href: https://mealie.kelinreij.duckdns.org
|
||||
- Vaultwarden:
|
||||
icon: vaultwarden.png
|
||||
href: https://vault.kelinreij.duckdns.org
|
||||
- Formio:
|
||||
icon: mdi-form-select
|
||||
href: https://formio.kelinreij.duckdns.org
|
||||
- Yarnl:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/yarnl.png
|
||||
href: https://yarnl.kelinreij.duckdns.org
|
||||
|
||||
- Jarvis Admin:
|
||||
- Arcane:
|
||||
icon: arcane.png
|
||||
href: https://arcane.jarvis.kelinreij.duckdns.org
|
||||
- Dockge:
|
||||
icon: dockge.png
|
||||
href: https://dockge.jarvis.kelinreij.duckdns.org
|
||||
- Dozzle:
|
||||
icon: dozzle.png
|
||||
href: https://dozzle.jarvis.kelinreij.duckdns.org
|
||||
- Glances:
|
||||
icon: glances.png
|
||||
href: https://glances.jarvis.kelinreij.duckdns.org
|
||||
- Backrest:
|
||||
icon: mdi-backup-restore
|
||||
href: https://backrest.jarvis.kelinreij.duckdns.org
|
||||
|
||||
- Jarvis Services:
|
||||
- Nextcloud:
|
||||
icon: nextcloud.png
|
||||
href: https://nextcloud.kelinreij.duckdns.org
|
||||
- WordPress:
|
||||
icon: wordpress.png
|
||||
href: https://wordpress.kelinreij.duckdns.org
|
||||
- Jupyter:
|
||||
icon: jupyter.png
|
||||
href: https://jupyter.kelinreij.duckdns.org
|
||||
- qBittorrent:
|
||||
icon: qbittorrent.png
|
||||
href: https://qbit.kelinreij.duckdns.org
|
||||
- Tdarr:
|
||||
icon: tdarr.png
|
||||
href: https://tdarr.kelinreij.duckdns.org
|
||||
- Unmanic:
|
||||
icon: unmanic.png
|
||||
href: https://unmanic.kelinreij.duckdns.org
|
||||
|
||||
- Media:
|
||||
- Jellyfin:
|
||||
icon: jellyfin.png
|
||||
href: https://jellyfin.kelinreij.duckdns.org
|
||||
- Jellyseerr:
|
||||
icon: jellyseerr.png
|
||||
href: https://jellyseerr.kelinreij.duckdns.org
|
||||
- Calibre-Web:
|
||||
icon: calibre-web.png
|
||||
href: https://calibre.kelinreij.duckdns.org
|
||||
|
||||
- Media Admin:
|
||||
- Sonarr:
|
||||
icon: sonarr.png
|
||||
href: https://sonarr.kelinreij.duckdns.org
|
||||
- Radarr:
|
||||
icon: radarr.png
|
||||
href: https://radarr.kelinreij.duckdns.org
|
||||
- Prowlarr:
|
||||
icon: prowlarr.png
|
||||
href: https://prowlarr.kelinreij.duckdns.org
|
||||
- Readarr:
|
||||
icon: readarr.png
|
||||
href: https://readarr.kelinreij.duckdns.org
|
||||
- Lidarr:
|
||||
icon: lidarr.png
|
||||
href: https://lidarr.kelinreij.duckdns.org
|
||||
- Mylar3:
|
||||
icon: mylar.png
|
||||
href: https://mylar.kelinreij.duckdns.org
|
||||
- Smart Home:
|
||||
- Home Assistant:
|
||||
icon: home-assistant.png
|
||||
href: https://ha.kelinreij.duckdns.org
|
||||
- MotionEye:
|
||||
icon: motioneye.png
|
||||
href: https://motioneye.kelinreij.duckdns.org
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
49
docker-templates/homepage/config/settings.yaml
Normal file
49
docker-templates/homepage/config/settings.yaml
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
# For configuration options and examples, please see:
|
||||
# https://gethomepage.dev/configs/settings/
|
||||
|
||||
layout:
|
||||
Jasper Admin:
|
||||
style: row
|
||||
columns: 6
|
||||
Jasper Services:
|
||||
style: row
|
||||
columns: 6
|
||||
Jarvis Admin:
|
||||
style: row
|
||||
columns: 6
|
||||
Jarvis Services:
|
||||
style: row
|
||||
columns: 6
|
||||
Media:
|
||||
style: row
|
||||
columns: 6
|
||||
Media Admin:
|
||||
style: row
|
||||
columns: 6
|
||||
Smart Home:
|
||||
style: row
|
||||
columns: 6
|
||||
Docker:
|
||||
style: row
|
||||
columns: 4
|
||||
|
||||
EZ-Homelab Project:
|
||||
style: row
|
||||
columns: 3
|
||||
|
||||
Core Services:
|
||||
style: row
|
||||
columns: 3
|
||||
|
||||
Media Services:
|
||||
style: row
|
||||
columns: 3
|
||||
|
||||
Services:
|
||||
style: row
|
||||
columns: 3
|
||||
|
||||
External Resources:
|
||||
style: row
|
||||
columns: 3
|
||||
13
docker-templates/homepage/config/widgets.yaml
Normal file
13
docker-templates/homepage/config/widgets.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
# For configuration options and examples, please see:
|
||||
# https://gethomepage.dev/configs/info-widgets/
|
||||
|
||||
- greeting:
|
||||
text_size: 4xl
|
||||
text: Kelin's Homelab
|
||||
|
||||
- datetime:
|
||||
text_size: 2xl
|
||||
format:
|
||||
timeStyle: short
|
||||
dateStyle: long
|
||||
46
docker-templates/homepage/docker-compose.yml
Normal file
46
docker-templates/homepage/docker-compose.yml
Normal file
@@ -0,0 +1,46 @@
|
||||
services:
|
||||
homepage:
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
restart: unless-stopped # change to 'no' to enable Sablier lazy loading
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./config:/app/config
|
||||
- /var/run/docker.sock:/var/run/docker.sock # For Docker integration do not mount RO
|
||||
environment:
|
||||
- PUID=${PUID} # Must be set to the docker user ID
|
||||
- PGID=${PGID} # Must be set to the docker group ID
|
||||
- TZ=${TZ}
|
||||
- HOMEPAGE_ALLOWED_HOSTS=${HOMEPAGE_ALLOWED_HOSTS}, ${SERVER_IP}:${EXTERNAL_PORT}
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
49
docker-templates/jupyter/.env
Normal file
49
docker-templates/jupyter/.env
Normal file
@@ -0,0 +1,49 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=jupyter
|
||||
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=8888
|
||||
EXTERNAL_PORT=8890
|
||||
LOCAL_URL=http://${SERVER_IP}:${EXTERNAL_PORT}
|
||||
|
||||
JUPYTER_TOKEN=Tiberi0u$
|
||||
|
||||
|
||||
# #############################################################
|
||||
# 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
|
||||
52
docker-templates/jupyter/docker-compose.yml
Normal file
52
docker-templates/jupyter/docker-compose.yml
Normal file
@@ -0,0 +1,52 @@
|
||||
services:
|
||||
jupyter:
|
||||
image: jupyter/scipy-notebook:latest
|
||||
container_name: jupyter
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./config/jupyter:/home/jovyan/work
|
||||
environment:
|
||||
- JUPYTER_ENABLE_LAB=yes
|
||||
- GRANT_SUDO=yes
|
||||
user: root
|
||||
command: start-notebook.sh --NotebookApp.token='${JUPYTER_TOKEN}'
|
||||
# Uncomment for GPU support (NVIDIA, requires nvidia-container-toolkit)
|
||||
# runtime: nvidia
|
||||
# devices:
|
||||
# - /dev/nvidia0:/dev/nvidia0
|
||||
# - /dev/nvidiactl:/dev/nvidiactl
|
||||
# Add these to environment above:
|
||||
# - NVIDIA_VISIBLE_DEVICES=all
|
||||
# - NVIDIA_DRIVER_CAPABILITIES=compute,utility
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
47
docker-templates/mealie/.env
Normal file
47
docker-templates/mealie/.env
Normal file
@@ -0,0 +1,47 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=mealie
|
||||
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=9000
|
||||
EXTERNAL_PORT=9000
|
||||
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
|
||||
46
docker-templates/mealie/docker-compose.yml
Normal file
46
docker-templates/mealie/docker-compose.yml
Normal file
@@ -0,0 +1,46 @@
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:latest
|
||||
container_name: mealie
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
- BASE_URL=https://${PROXY_URL}
|
||||
- DB_ENGINE=sqlite
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
42
docker-templates/metube/.env
Normal file
42
docker-templates/metube/.env
Normal file
@@ -0,0 +1,42 @@
|
||||
# #######################################################
|
||||
# Templating variables, not used by compose file directly
|
||||
SERVER_NAME=
|
||||
SERVER_IP=
|
||||
SUBDOMAIN=
|
||||
SERVICE_NAME=metube
|
||||
ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/${SERVICE_NAME}.svg
|
||||
|
||||
# Services that exist on multiple servers should include ${SERVER_NAME} in PROXY_URL
|
||||
# Services that exist on a single server can omit ${SERVER_NAME}
|
||||
PROXY_URL=${SERVICE_NAME}.${SUBDOMAIN}.duckdns.org
|
||||
|
||||
|
||||
# #############################################################################
|
||||
# Compose file variables
|
||||
|
||||
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
|
||||
|
||||
33
docker-templates/metube/compose.yaml
Normal file
33
docker-templates/metube/compose.yaml
Normal file
@@ -0,0 +1,33 @@
|
||||
services:
|
||||
metube:
|
||||
image: ghcr.io/alexta69/metube:latest
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./downloads:/downloads
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${HOST_LABEL}
|
||||
- ${LOADBALANCER_LABEL}
|
||||
- ${WATCHTOWER_ENABLE_LABEL}
|
||||
- ${TRAEFIK_ENABLE_LABEL}
|
||||
- ${TRAEFIK_NETWORK_LABEL}
|
||||
- ${ENTRYPOINT_LABEL}
|
||||
- ${CERT_LABEL}
|
||||
- ${AUTHELIA_LABEL}
|
||||
|
||||
x-dockge:
|
||||
urls:
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
|
||||
x-arcane:
|
||||
icon: ${ICON_URL}
|
||||
urls:
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
7
docker-templates/sablier/.env
Normal file
7
docker-templates/sablier/.env
Normal file
@@ -0,0 +1,7 @@
|
||||
# #######################################################
|
||||
|
||||
# NO webui = minimal config reguired
|
||||
|
||||
SERVICE_NAME=sablier
|
||||
ICON_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/${SERVICE_NAME}.svg
|
||||
ICON_LABEL=com.getarcaneapp.arcane.icon=${ICON_URL}
|
||||
24
docker-templates/sablier/docker-compose.yml
Normal file
24
docker-templates/sablier/docker-compose.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
sablier:
|
||||
image: acouvreur/sablier:1.7.0
|
||||
container_name: sablier
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- traefik-network
|
||||
- homelab-network
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
command:
|
||||
- start
|
||||
- --provider.name=docker
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
|
||||
networks:
|
||||
traefik-network:
|
||||
external: true
|
||||
homelab-network:
|
||||
external: true
|
||||
|
||||
x-arcane:
|
||||
icon: ${ICON_URL}
|
||||
59
docker-templates/valutwarden/.env
Normal file
59
docker-templates/valutwarden/.env
Normal file
@@ -0,0 +1,59 @@
|
||||
# #######################################################
|
||||
# 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=80
|
||||
EXTERNAL_PORT=8091
|
||||
LOCAL_URL=http://${SERVER_IP}:${EXTERNAL_PORT}
|
||||
|
||||
|
||||
DEFAULT_USER=kelin
|
||||
DEFAULT_PASSWORD=Tiberi0u$
|
||||
DEFAULT_EMAIL=kelinshomelab@gmail.com
|
||||
BITWARDEN_SIGNUPS_ALLOWED=true
|
||||
BITWARDEN_ADMIN_TOKEN=${DEFAULT_PASSWORD}
|
||||
BITWARDEN_INVITATIONS_ALLOWED=true
|
||||
SMTP_HOST=${SMTP_EMAIL_SERVER}
|
||||
SMTP_FROM=${SMTP_EMAIL_FROM}
|
||||
SMTP_PORT=${SMTP_EMAIL_PORT}
|
||||
SMTP_SECURITY=${SMTP_EMAIL_SECURITY}
|
||||
|
||||
|
||||
# #############################################################
|
||||
# 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
|
||||
57
docker-templates/valutwarden/docker-compose.yml
Normal file
57
docker-templates/valutwarden/docker-compose.yml
Normal file
@@ -0,0 +1,57 @@
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:1.30.1
|
||||
container_name: vaultwarden
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./data:/data
|
||||
environment:
|
||||
- DOMAIN=${PROXY_URL}
|
||||
- SIGNUPS_ALLOWED=${BITWARDEN_SIGNUPS_ALLOWED}
|
||||
- INVITATIONS_ALLOWED=${BITWARDEN_INVITATIONS_ALLOWED}
|
||||
- ADMIN_TOKEN=${BITWARDEN_ADMIN_TOKEN}
|
||||
# SMTP disabled - uncomment and configure to enable email
|
||||
- SMTP_HOST=${SMTP_EMAIL_SERVER}
|
||||
- SMTP_FROM=${SMTP_EMAIL_FROM}
|
||||
- SMTP_PORT=${SMTP_EMAIL_PORT}
|
||||
- SMTP_SECURITY=${SMTP_EMAIL_SECURITY}
|
||||
- SMTP_USERNAME=${SMTP_USERNAME}
|
||||
- SMTP_PASSWORD=${SMTP_PASSWORD}
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:80/']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
labels:
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
0
docker-templates/watchtower/.env
Normal file
0
docker-templates/watchtower/.env
Normal file
29
docker-templates/watchtower/docker-compose.yml
Normal file
29
docker-templates/watchtower/docker-compose.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
services:
|
||||
watchtower:
|
||||
image: containrrr/watchtower:latest
|
||||
container_name: watchtower
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- DOCKER_API_VERSION=1.52
|
||||
- WATCHTOWER_CLEANUP=true
|
||||
- WATCHTOWER_INCLUDE_RESTARTING=true
|
||||
- WATCHTOWER_SCHEDULE=0 0 4 * * * # 4 AM daily
|
||||
- WATCHTOWER_NOTIFICATIONS=shoutrrr
|
||||
# - WATCHTOWER_NOTIFICATION_URL=${WATCHTOWER_NOTIFICATION_URL}
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/watchtower.svg
|
||||
- 'homelab.category=infrastructure'
|
||||
- 'homelab.description=Automatic Docker container updates'
|
||||
|
||||
|
||||
networks:
|
||||
homelab-network:
|
||||
external: true
|
||||
|
||||
|
||||
x-arcane:
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/watchtower.svg
|
||||
50
docker-templates/yarnl/.env
Normal file
50
docker-templates/yarnl/.env
Normal file
@@ -0,0 +1,50 @@
|
||||
# #######################################################
|
||||
# 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
|
||||
|
||||
POSTGRES_DB=yarnl
|
||||
POSTGRES_USER=yarnl
|
||||
POSTGRES_PASSWORD=yarnl
|
||||
|
||||
# #############################################################################
|
||||
# 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
|
||||
83
docker-templates/yarnl/compose.yaml
Normal file
83
docker-templates/yarnl/compose.yaml
Normal file
@@ -0,0 +1,83 @@
|
||||
services:
|
||||
yarnl-db:
|
||||
container_name: yarnl-db
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-yarnl}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-yarnl}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-yarnl}
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-yarnl}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
labels:
|
||||
- com.getarcaneapp.arcane.icon=https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/postgresql.svg
|
||||
#com.getarcaneapp.arcane.updater: false
|
||||
|
||||
yarnl:
|
||||
container_name: yarnl
|
||||
image: titandrive/yarnl:latest
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
ports:
|
||||
- ${EXTERNAL_PORT}:${INTERNAL_PORT}
|
||||
volumes:
|
||||
- ./users:/app/users
|
||||
- /opt:/opt
|
||||
environment:
|
||||
POSTGRES_HOST: yarnl-db
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_DB: ${POSTGRES_DB:-yarnl}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-yarnl}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-yarnl}
|
||||
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
||||
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-}
|
||||
TZ: ${TZ:-UTC}
|
||||
SECURE_COOKIES: ${SECURE_COOKIES:-false}
|
||||
FORCE_LOCAL_LOGIN: ${FORCE_LOCAL_LOGIN:-false}
|
||||
|
||||
depends_on:
|
||||
yarnl-db:
|
||||
condition: service_healthy
|
||||
labels:
|
||||
- 'com.getarcaneapp.arcane.depends-on: yarnl-db'
|
||||
- ${ICON_LABEL}
|
||||
- ${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}
|
||||
- https://yarnl.com
|
||||
- https://ravelry.com
|
||||
|
||||
x-arcane:
|
||||
icon: ${ICON_URL}
|
||||
urls:
|
||||
- https://${PROXY_URL}
|
||||
- ${LOCAL_URL}
|
||||
- https://yarnl.com
|
||||
- https://ravelry.com
|
||||
|
||||
Reference in New Issue
Block a user