Add Docker compose templates and configurations

This commit is contained in:
kelinfoxy
2026-03-17 17:29:50 -04:00
parent b28a11f619
commit 58306f7fe6
67 changed files with 738607 additions and 93 deletions

View 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}

View 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

View 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

View File

@@ -1,2 +0,0 @@
TZ=America/New_York
STACKS_DIR=/opt/stacks

View File

@@ -1,5 +0,0 @@
# Backrest
## https://backrest.jasper.kelinreij.duckdns.org
## http://192.168.4.4:9898

View File

@@ -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}

View 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}

View 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

View File

@@ -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}

View File

@@ -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}

View 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

View 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}

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -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"

View 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

View 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"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View 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

View 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}

View 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}

View 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

View 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

View 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}

View 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

View 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}

View 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

View 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}

View 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

View 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}

View 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

View 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}

View 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

View 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

View 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

View File

@@ -0,0 +1,2 @@
---
# sample kubernetes config

View 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:

View File

@@ -0,0 +1,5 @@
---
# pve:
# url: https://proxmox.host.or.ip:8006
# token: username@pam!Token ID
# secret: secret

View 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

View 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

View 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

View 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}

View 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

View 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}

View 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

View 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}

View 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

View 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}

View 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}

View 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}

View 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

View 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}

View File

View 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

View 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

View 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