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