Compare commits
12 Commits
a46ab16489
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4061164a6 | ||
|
|
7ec59a3b07 | ||
|
|
8a67598944 | ||
|
|
ebb0c20ee4 | ||
|
|
2bb4bfa337 | ||
|
|
4caf3f5266 | ||
|
|
5609944f02 | ||
|
|
c6f4b733b3 | ||
|
|
407594dd85 | ||
|
|
2862618816 | ||
|
|
e6ce62ae09 | ||
|
|
f448f29a03 |
@@ -18,6 +18,7 @@ include:
|
||||
- ${INFRA_PATH}/authelia/authelia.yml
|
||||
- ${INFRA_PATH}/crowdsec/crowdsec.yml
|
||||
- ${INFRA_PATH}/homepage/homepage.yml
|
||||
- ${INFRA_PATH}/ntfy/ntfy.yml
|
||||
- ${INFRA_PATH}/speedtest/speedtest.yml
|
||||
- ${INFRA_PATH}/syncthing/syncthing.yml
|
||||
- ${INFRA_PATH}/traefik/traefik.yml
|
||||
@@ -28,15 +29,22 @@ include:
|
||||
- path:
|
||||
- ${MONITORING_PATH}/dozzle/dozzle.yml
|
||||
- ${MONITORING_PATH}/grafana/grafana.yml
|
||||
- ${MONITORING_PATH}/loki/loki.yml
|
||||
- ${MONITORING_PATH}/prometheus/prometheus.yml
|
||||
env_file: ${MONITORING_PATH}/.env
|
||||
|
||||
- path:
|
||||
- ${MEDIA_PATH}/audiobookshelf/audiobookshelf.yml
|
||||
- ${MEDIA_PATH}/calibre/calibre.yml
|
||||
- ${MEDIA_PATH}/immich/immich.yml
|
||||
- ${MEDIA_PATH}/kiwix/kiwix.yml
|
||||
- ${MEDIA_PATH}/lidarr/lidarr.yml
|
||||
- ${MEDIA_PATH}/navidrome/navidrome.yml
|
||||
- ${MEDIA_PATH}/prowlarr/prowlarr.yml
|
||||
- ${MEDIA_PATH}/qbittorrent/qbittorrent.yml
|
||||
- ${MEDIA_PATH}/readarr/readarr.yml
|
||||
- ${MEDIA_PATH}/slskd/slskd.yml
|
||||
- ${MEDIA_PATH}/soularr/soularr.yml
|
||||
env_file: ${MEDIA_PATH}/.env
|
||||
|
||||
- path:
|
||||
@@ -44,15 +52,16 @@ include:
|
||||
- ${SERVICE_PATH}/gitea/gitea.yml
|
||||
- ${SERVICE_PATH}/home-assistant/home-assistant.yml
|
||||
- ${SERVICE_PATH}/ghost/ghost.yml
|
||||
- ${SERVICE_PATH}/home-assistant/ha-addon/ha-ewelink-addon.yml
|
||||
- ${SERVICE_PATH}/it-tools/it-tools.yml
|
||||
- ${SERVICE_PATH}/jupyter-notebook/jupyter-notebook.yml
|
||||
- ${SERVICE_PATH}/linkwarden/linkwarden.yml
|
||||
- ${SERVICE_PATH}/mealie/mealie.yml
|
||||
- ${SERVICE_PATH}/n8n/n8n.yml
|
||||
# - ${SERVICE_PATH}/ollama/ollama.yml
|
||||
- ${SERVICE_PATH}/paperless-ngx/paperless-ngx.yml
|
||||
- ${SERVICE_PATH}/radicale/radicale.yml
|
||||
- ${SERVICE_PATH}/shlink/shlink.yml
|
||||
- ${SERVICE_PATH}/sponsorblock/sponsorblock.yml
|
||||
- ${SERVICE_PATH}/stirling-pdf/stirling-pdf.yml
|
||||
- ${SERVICE_PATH}/pdf/pdf.yml
|
||||
- ${SERVICE_PATH}/vaultwarden/vaultwarden.yml
|
||||
- ${SERVICE_PATH}/vikunja/vikunja.yml
|
||||
env_file: ${SERVICE_PATH}/.env
|
||||
|
||||
@@ -72,4 +81,4 @@ networks:
|
||||
# config:
|
||||
# # - subnet: "2a04:ee41:86:9397::/64"
|
||||
# - subnet: "2001:db8:2:/64"
|
||||
# - gateway: "2001:db8:2::1"
|
||||
# - gateway: "2001:db8:2::1"
|
||||
|
||||
@@ -26,10 +26,9 @@ services:
|
||||
AUTHELIA_SESSION_SECRET_FILE: /run/secrets/SESSION_SECRET
|
||||
AUTHELIA_STORAGE_POSTGRES_PASSWORD_FILE: /run/secrets/STORAGE_PASSWORD
|
||||
AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: /run/secrets/STORAGE_ENCRYPTION_KEY
|
||||
AUTHELIA_PUBLIC_DOMAIN: ${PUBLIC_DOMAIN} # this does not work for access control or openID yet
|
||||
AUTHELIA_LOCAL_DOMAIN: ${LOCAL_DOMAIN} # this does not work for access control or openID yet
|
||||
# AUTHELIA_PUBLIC_DOMAIN: ${PUBLIC_DOMAIN} # this does not work for access control or openID yet
|
||||
# AUTHELIA_LOCAL_DOMAIN: ${LOCAL_DOMAIN} # this does not work for access control or openID yet
|
||||
volumes:
|
||||
- ${INFRA_PATH}/authelia/config:/config
|
||||
- ${INFRA_PATH}/authelia/config:/config
|
||||
- "/var/log/authelia/:/config/log"
|
||||
labels:
|
||||
@@ -44,4 +43,4 @@ services:
|
||||
- 'traefik.http.routers.authelia.service=authelia-svc'
|
||||
- 'traefik.http.services.authelia-svc.loadbalancer.server.port=9091'
|
||||
# Middleware
|
||||
- "traefik.http.routers.authelia.middlewares=crowdsec-bouncer@file"
|
||||
- "traefik.http.routers.authelia.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
@@ -12,6 +12,7 @@ services:
|
||||
environment:
|
||||
HOMEPAGE_VAR_LOCAL_DOMAIN: ${LOCAL_DOMAIN}
|
||||
HOMEPAGE_VAR_PUBLIC_DOMAIN: ${PUBLIC_DOMAIN}
|
||||
HOMEPAGE_ALLOWED_HOSTS: homepage.${LOCAL_DOMAIN}, 192.168.178.35:3030
|
||||
volumes:
|
||||
- ${INFRA_PATH}/homepage/config:/app/config
|
||||
- ${INFRA_PATH}/homepage/data/images:/app/public/images
|
||||
@@ -25,4 +26,4 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.homepage.rule=Host(`homepage.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.homepage.entrypoints=https"
|
||||
- "traefik.http.routers.homepage.tls=true"
|
||||
- "traefik.http.routers.homepage.tls=true"
|
||||
|
||||
27
project/infrastructure/ntfy/ntfy.yml
Normal file
27
project/infrastructure/ntfy/ntfy.yml
Normal file
@@ -0,0 +1,27 @@
|
||||
services:
|
||||
ntfy:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
container_name: ntfy
|
||||
image: binwiederhier/ntfy
|
||||
ports:
|
||||
- "4023:80"
|
||||
networks:
|
||||
- ip4net
|
||||
command:
|
||||
- serve
|
||||
volumes:
|
||||
- /var/cache/ntfy:/var/cache/ntfy
|
||||
- ${INFRA_PATH}/ntfy/config:/etc/ntfy
|
||||
- ${INFRA_PATH}/ntfy/data:/var/lib/ntfy
|
||||
labels:
|
||||
# Watchtower
|
||||
- 'com.centurylinklabs.watchtower.enable=true'
|
||||
# Traefik
|
||||
- 'traefik.enable=true'
|
||||
- 'traefik.http.routers.ntfy.rule=Host(`ntfy.${PUBLIC_DOMAIN}`)'
|
||||
- 'traefik.http.routers.ntfy.entrypoints=https'
|
||||
- 'traefik.http.routers.ntfy.tls=true'
|
||||
# Middlewares
|
||||
- "traefik.http.routers.ntfy.middlewares=crowdsec-bouncer@file"
|
||||
@@ -6,6 +6,8 @@ services:
|
||||
image: syncthing/syncthing
|
||||
container_name: syncthing
|
||||
volumes:
|
||||
- ${EXTERNAL_STORAGE}/notes/Obsidian-sync:/var/syncthing-data/Obsidian-sync
|
||||
- ${EXTERNAL_STORAGE}/media/pictures/to-sort:/var/syncthing-data/picture-phone
|
||||
- ${INFRA_PATH}/syncthing/data:/var/syncthing
|
||||
ports:
|
||||
- 8384:8384 # Web UI
|
||||
@@ -26,4 +28,4 @@ services:
|
||||
- "traefik.http.routers.syncthing.service=syncthing-svc"
|
||||
- "traefik.http.services.syncthing-svc.loadbalancer.server.port=8384"
|
||||
# Middlewares
|
||||
#- "traefik.http.routers.syncthing.middlewares=crowdsec-bouncer@file"
|
||||
#- "traefik.http.routers.syncthing.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
@@ -18,6 +18,7 @@ services:
|
||||
TRAEFIK_PUBLIC_DOMAIN: ${PUBLIC_DOMAIN}
|
||||
TRAEFIK_AUTH_PUBLIC_DOMAIN: auth.${PUBLIC_DOMAIN}
|
||||
TRAEFIK_CROWDSEC_API_KEY: ${CROWDSEC_API_KEY}
|
||||
INFOMANIAK_ACCESS_TOKEN: ${INFOMANIAK_CERTIFICATE_ACCESS_TOKEN}
|
||||
volumes:
|
||||
- "/var/log/crowdsec/:/var/log/crowdsec/"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
@@ -51,4 +52,4 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.whoami.rule=Host(`whoami.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.whoami.entrypoints=https"
|
||||
- 'traefik.http.routers.whoami.tls=true'
|
||||
- 'traefik.http.routers.whoami.tls=true'
|
||||
|
||||
@@ -5,7 +5,7 @@ services:
|
||||
# extends:
|
||||
# file: ${TEMPLATES_PATH}
|
||||
# service: default
|
||||
image: louislam/uptime-kuma:latest
|
||||
image: louislam/uptime-kuma
|
||||
container_name: uptime-kuma
|
||||
restart: unless-stopped
|
||||
security_opt:
|
||||
@@ -14,6 +14,7 @@ services:
|
||||
TZ: ${TZ}
|
||||
volumes:
|
||||
- ${INFRA_PATH}/uptime-kuma/config:/app/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
ports:
|
||||
- 5001:3001
|
||||
networks:
|
||||
@@ -26,4 +27,4 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.uptime-kuma.rule=Host(`uptime-kuma.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.uptime-kuma.entrypoints=https"
|
||||
- "traefik.http.routers.uptime-kuma.tls=true"
|
||||
- "traefik.http.routers.uptime-kuma.tls=true"
|
||||
|
||||
@@ -10,9 +10,7 @@ services:
|
||||
networks:
|
||||
- ip6net
|
||||
volumes:
|
||||
# - ${AUDIOBOOKSHELF_EXTERNAL_PATH}/audiobooks:/audiobooks
|
||||
# - ${AUDIOBOOKSHELF_EXTERNAL_PATH}/podcasts:/podcasts
|
||||
- ${MEDIA_PATH}/data/media/audiobooks:/audiobooks
|
||||
- ${AUDIOBOOKSHELF_EXTERNAL_PATH}:/audiobooks
|
||||
- ${MEDIA_PATH}/audiobookshelf/config:/config
|
||||
- ${MEDIA_PATH}/audiobookshelf/data/metadata:/metadata
|
||||
labels:
|
||||
@@ -25,4 +23,4 @@ services:
|
||||
- "traefik.http.routers.audiobookshelf.tls.certresolver=myresolver"
|
||||
- 'traefik.http.routers.audiobookshelf.tls=true'
|
||||
# Middlewares
|
||||
- "traefik.http.routers.audiobookshelf.middlewares=crowdsec-bouncer@file"
|
||||
- "traefik.http.routers.audiobookshelf.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
53
project/media/calibre/calibre.yml
Normal file
53
project/media/calibre/calibre.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
services:
|
||||
calibre:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: lscr.io/linuxserver/calibre:latest
|
||||
container_name: calibre
|
||||
environment:
|
||||
- PASSWORD= #optional
|
||||
- CLI_ARGS= #optional
|
||||
volumes:
|
||||
- ${EXTERNAL_STORAGE}/media/books:/config/library
|
||||
- ${MEDIA_PATH}/data/downloaded/books:/config/tosync
|
||||
ports:
|
||||
- 2005:8080 # gui
|
||||
- 2006:8181 # gui https
|
||||
- 2007:8081 # webserver ui
|
||||
networks:
|
||||
- ip4net
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.calibre.rule=Host(`calibre.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.calibre.entrypoints=https"
|
||||
- 'traefik.http.routers.calibre.tls=true'
|
||||
- 'traefik.http.services.calibre.loadbalancer.server.port=8080'
|
||||
|
||||
calibre-web:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: lscr.io/linuxserver/calibre-web:latest
|
||||
container_name: calibre-web
|
||||
environment:
|
||||
- DOCKER_MODS=linuxserver/mods:universal-calibre #optional
|
||||
# - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
|
||||
volumes:
|
||||
- ${EXTERNAL_STORAGE}/media/books:/books
|
||||
- ${MEDIA_PATH}/calibre/data:/config
|
||||
ports:
|
||||
- 2008:8083
|
||||
networks:
|
||||
- ip6net
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.calibre-web.rule=Host(`calibre-web.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.calibre-web.entrypoints=https"
|
||||
- 'traefik.http.routers.calibre-web.tls=true'
|
||||
@@ -12,7 +12,7 @@ services:
|
||||
DB_DATABASE_NAME: immich
|
||||
REDIS_HOSTNAME: redis
|
||||
volumes:
|
||||
# to mount the trueNas external library: sudo mount 192.168.1.212:/mnt/hdd-storage/vm-external-storage/immich /mnt/external-storage/immich/
|
||||
# to mount the trueNas external library: sudo mount 192.168.178.36:/mnt/hdd-storage/vm-external-storage/immich /mnt/external-storage/immich/
|
||||
- ${IMMICH_EXTERNAL_PATH}:/usr/src/app/external:ro
|
||||
- ${MEDIA_PATH}/immich/data/library:/usr/src/app/upload
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
@@ -38,6 +38,8 @@ services:
|
||||
service: default
|
||||
container_name: immich_machine_learning
|
||||
image: ghcr.io/immich-app/immich-machine-learning:release
|
||||
ports:
|
||||
- 3003:3003
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/immich/data/model-cache:/cache
|
||||
labels:
|
||||
@@ -46,7 +48,7 @@ services:
|
||||
|
||||
# https://github.com/Salvoxia/immich-folder-album-creator
|
||||
# one time run:
|
||||
# docker run -e API_URL="https://immich.crescentec.xyz/api/" -e API_KEY="qTaebdVMtph9yD0pSJRJDQJkDEpexiXNMJ5V5HBEnA" -e ROOT_PATH="/usr/src/app/external" -e LOG_LEVEL="DEBUG" salvoxia/immich-folder-album-creator:latest /script/immich_auto_album.sh
|
||||
# docker run -e -e API_URL="https://immich.crescentec.xyz/api/" -e API_KEY="qTaebdVMtph9yD0pSJRJDQJkDEpexiXNMJ5V5HBEnA" -e ROOT_PATH="/usr/src/app/external" -e LOG_LEVEL="DEBUG" salvoxia/immich-folder-album-creator:latest /script/immich_auto_album.sh
|
||||
immich-folder-album-creator:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
@@ -58,6 +60,11 @@ services:
|
||||
API_KEY: qTaebdVMtph9yD0pSJRJDQJkDEpexiXNMJ5V5HBEnA
|
||||
ROOT_PATH: /usr/src/app/external
|
||||
CRON_EXPRESSION: "0 * * * *"
|
||||
LOG_LEVEL: DEBUG
|
||||
#RUN_IMMEDIATELY: true
|
||||
#UNATTENDED: 1
|
||||
volumes:
|
||||
- /usr/src/app/external:/usr/src/app/external
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
|
||||
24
project/media/kiwix/kiwix.yml
Normal file
24
project/media/kiwix/kiwix.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
kiwix:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: ghcr.io/kiwix/kiwix-serve
|
||||
container_name: kiwix
|
||||
ports:
|
||||
- 2009:8080
|
||||
networks:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${EXTERNAL_STORAGE}/wikipedia/:/data
|
||||
command:
|
||||
- '*.zim'
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.kiwix.rule=Host(`wikipedia.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.kiwix.entrypoints=https"
|
||||
- 'traefik.http.routers.kiwix.tls=true'
|
||||
- 'traefik.http.services.kiwix.loadbalancer.server.port=8080'
|
||||
26
project/media/lidarr/lidarr.yml
Normal file
26
project/media/lidarr/lidarr.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
services:
|
||||
lidarr:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: lscr.io/linuxserver/lidarr
|
||||
container_name: lidarr
|
||||
ports:
|
||||
- 2010:8686
|
||||
networks:
|
||||
- ip4net
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 1.1.1.1
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/lidarr/config:/config
|
||||
- ${MEDIA_PATH}/data:/data
|
||||
- ${EXTERNAL_STORAGE}/media/music:/music
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.lidarr.rule=Host(`lidarr.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.lidarr.entrypoints=https"
|
||||
- 'traefik.http.routers.lidarr.tls=true'
|
||||
31
project/media/navidrome/navidrome.yml
Normal file
31
project/media/navidrome/navidrome.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
services:
|
||||
navidrome:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: deluan/navidrome
|
||||
container_name: navidrome
|
||||
ports:
|
||||
- 2011:4533
|
||||
networks:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/navidrome/data:/data
|
||||
- ${EXTERNAL_STORAGE}/media/music:/music:ro
|
||||
environment:
|
||||
ND_REVERSEPROXYWHITELIST: 0.0.0.0/0
|
||||
ND_ENABLEUSEREDITING: false
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.navidrome.rule=Host(`navidrome.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.navidrome.entrypoints=https"
|
||||
- 'traefik.http.routers.navidrome.tls=true'
|
||||
# Middlewares
|
||||
- "traefik.http.routers.navidrome.middlewares=crowdsec-bouncer@file, authelia@file"
|
||||
# Subsonic endpoint use basic authentication middleware from authelia
|
||||
- "traefik.http.routers.navidrome-subsonic.rule=Host(`navidrome.${PUBLIC_DOMAIN}`) && PathPrefix(`/rest/`) && !Query(`c`, `NavidromeUI`)"
|
||||
- "traefik.http.routers.navidrome-subsonic.entrypoints=https"
|
||||
- "traefik.http.routers.navidrome-subsonic.middlewares=crowdsec-bouncer@file, authelia-basicauth@file, subsonic-basicauth@file"
|
||||
@@ -7,17 +7,20 @@ services:
|
||||
container_name: qbittorrent
|
||||
ports:
|
||||
- 2002:2002
|
||||
- 6881:6881
|
||||
- 6881:6881/udp
|
||||
- 50059:6881
|
||||
- 50059:6881/udp
|
||||
networks:
|
||||
- ip4net
|
||||
- ip6net
|
||||
environment:
|
||||
- WEBUI_PORT=2002
|
||||
- TORRENTING_PORT=6881
|
||||
- TORRENTING_PORT=50059
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/qbittorrent/config:/config
|
||||
- ${MEDIA_PATH}/qbittorrent/downloads:/downloads # do not use this folder, see https://wiki.servarr.com/docker-guide#consistent-and-well-planned-paths -> issues
|
||||
- ${MEDIA_PATH}/data/torrents:/data/torrents
|
||||
- ${MEDIA_PATH}/data/downloaded/books:/data/downloaded/books
|
||||
- ${EXTERNAL_STORAGE}/media/audiobooks:/data/downloaded/audiobooks
|
||||
- ${EXTERNAL_STORAGE}/media/music:/data/downloaded/music
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
@@ -25,4 +28,4 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.qbittorrent.rule=Host(`qbittorrent.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.qbittorrent.entrypoints=https"
|
||||
- 'traefik.http.routers.qbittorrent.tls=true'
|
||||
- 'traefik.http.routers.qbittorrent.tls=true'
|
||||
|
||||
@@ -11,7 +11,9 @@ services:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/readarr/config:/config
|
||||
- ${MEDIA_PATH}/data:/data
|
||||
- ${MEDIA_PATH}/data/torrents:/data/torrents
|
||||
- ${EXTERNAL_STORAGE}/media/audiobooks:/data/media/audiobooks
|
||||
- ${EXTERNAL_STORAGE}/media/books:/data/media/books
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
@@ -19,4 +21,4 @@ services:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.readarr.rule=Host(`readarr.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.readarr.entrypoints=https"
|
||||
- 'traefik.http.routers.readarr.tls=true'
|
||||
- 'traefik.http.routers.readarr.tls=true'
|
||||
|
||||
29
project/media/slskd/slskd.yml
Normal file
29
project/media/slskd/slskd.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
services:
|
||||
slskd:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: slskd/slskd
|
||||
container_name: slskd
|
||||
user: ${PUID}:${PGID}
|
||||
ports:
|
||||
- 2013:5031 # http
|
||||
- 2014:5030 # https
|
||||
- 50300:50300 # incoming connections
|
||||
networks:
|
||||
- ip4net
|
||||
environment:
|
||||
- SLSKD_REMOTE_CONFIGURATION=true
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/slskd/config/slskd.yml:/app/slskd.yml
|
||||
- ${MEDIA_PATH}/data/slskd_downloads:/app/downloads
|
||||
- ${EXTERNAL_STORAGE}/media/music:/app/library
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.slskd.rule=Host(`slskd.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.slskd.entrypoints=https"
|
||||
- 'traefik.http.routers.slskd.tls=true'
|
||||
- 'traefik.http.services.slskd.loadbalancer.server.port=5030'
|
||||
13
project/media/soularr/soularr.yml
Normal file
13
project/media/soularr/soularr.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
services:
|
||||
soularr:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: mrusse08/soularr
|
||||
container_name: soularr
|
||||
user: ${PUID}:${PGID}
|
||||
networks:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${MEDIA_PATH}/soularr/data:/data
|
||||
- ${MEDIA_PATH}/data/slskd_downloads:/downloads
|
||||
37
project/monitoring/loki/loki.yml
Normal file
37
project/monitoring/loki/loki.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
services:
|
||||
loki:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
container_name: loki
|
||||
image: grafana/loki
|
||||
ports:
|
||||
- 8094:3100
|
||||
networks:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${MONITORING_PATH}/loki/config/loki-config.yml:/etc/loki/local-config.yaml
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.loki.rule=Host(`loki.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.loki.entrypoints=https"
|
||||
- "traefik.http.routers.loki.tls=true"
|
||||
|
||||
promtail:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
container_name: promtail
|
||||
image: grafana/promtail
|
||||
networks:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${MONITORING_PATH}/loki/config/promtail-config.yml:/etc/promtail/config.yml
|
||||
- /var/log:/var/log
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
@@ -8,7 +8,7 @@ services:
|
||||
ports:
|
||||
- 4014:80
|
||||
networks:
|
||||
- ip4net
|
||||
- ip6net
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/freshrss/data:/var/www/FreshRSS/data
|
||||
- ${SERVICE_PATH}/freshrss/extensions:/var/www/FreshRSS/extensions
|
||||
@@ -20,9 +20,9 @@ services:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.freshrss.rule=Host(`rss.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.freshrss.rule=Host(`rss.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.freshrss.entrypoints=https"
|
||||
- "traefik.http.routers.freshrss.tls=true"
|
||||
#- "traefik.http.routers.freshrss.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.freshrss.tls.certresolver=myresolver"
|
||||
# Middlewares
|
||||
#- "traefik.http.routers.freshrss.middlewares=crowdsec-bouncer@file"
|
||||
- "traefik.http.routers.freshrss.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
Submodule project/service/home-assistant/ha-addon deleted from 032fb202d4
49
project/service/linkwarden/linkwarden.yml
Normal file
49
project/service/linkwarden/linkwarden.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
services:
|
||||
linkwarden:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: ghcr.io/linkwarden/linkwarden:latest
|
||||
container_name: linkwarden
|
||||
ports:
|
||||
- 4020:3000
|
||||
networks:
|
||||
- ip4net
|
||||
- ip6net
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/linkwarden/data:/data/data
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://linkwarden:${LINKWARDEN_DATABASE_PASSWORD}@postgres:5432/linkwarden
|
||||
- NEXTAUTH_URL=https://linkwarden.${PUBLIC_DOMAIN}/api/v1/auth
|
||||
- NEXTAUTH_SECRET=${LINKWARDEN_NEXTAUTH_SECRET}
|
||||
- MEILI_MASTER_KEY=${LINKWARDEN_MEILI_MASTER_KEY}
|
||||
- MEILI_HOST=http://meilisearch:7700
|
||||
- NEXT_PUBLIC_DISABLE_REGISTRATION=true
|
||||
- NEXT_PUBLIC_AUTHELIA_ENABLED=true
|
||||
- AUTHELIA_WELLKNOWN_URL=https://auth.${PUBLIC_DOMAIN}/.well-known/openid-configuration
|
||||
- AUTHELIA_CLIENT_ID=linkwarden
|
||||
- AUTHELIA_CLIENT_SECRET=${LINKWARDEN_OIDC_CLIENT_SECRET}
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.linkwarden.rule=Host(`linkwarden.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.linkwarden.entrypoints=https"
|
||||
- "traefik.http.routers.linkwarden.tls=true"
|
||||
|
||||
meilisearch:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: getmeili/meilisearch:latest
|
||||
container_name: linkwarden_meili
|
||||
networks:
|
||||
- ip4net
|
||||
- ip6net
|
||||
ports:
|
||||
- 4021:7700
|
||||
environment:
|
||||
- MEILI_MASTER_KEY=${LINKWARDEN_MEILI_MASTER_KEY}
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/linkwarden/meili_data:/meili_data
|
||||
@@ -21,18 +21,13 @@ services:
|
||||
POSTGRES_SERVER: postgres
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_DB: mealie
|
||||
# LDAP Authentication
|
||||
LDAP_AUTH_ENABLED: true
|
||||
LDAP_SERVER_URL: ldap://lldap:3890
|
||||
LDAP_BASE_DN: ou=people,dc=${SECOND_LEVEL_DOMAIN},dc=${TOP_LEVEL_DOMAIN}
|
||||
LDAP_ID_ATTRIBUTE: uid
|
||||
LDAP_NAME_ATTRIBUTE: displayName
|
||||
LDAP_MAIL_ATTRIBUTE: mail
|
||||
LDAP_QUERY_BIND: cn=readonly_user,ou=people,dc=${SECOND_LEVEL_DOMAIN},dc=${TOP_LEVEL_DOMAIN}
|
||||
LDAP_QUERY_PASSWORD: ${LLDAP_READONLY_USER_PASSWORD}
|
||||
# LDAP_USER_FILTER: (memberof=cn=mealie,ou=groups,dc=example,dc=com)
|
||||
# LDAP_ADMIN_FILTER: (memberof=cn=mealie-admin,ou=groups,dc=example,dc=com)
|
||||
|
||||
# OIDC using authelia
|
||||
OIDC_AUTH_ENABLED: true
|
||||
OIDC_SIGNUP_ENABLED: false
|
||||
OIDC_CONFIGURATION_URL: https://auth.${PUBLIC_DOMAIN}/.well-known/openid-configuration
|
||||
OIDC_CLIENT_ID: mealie
|
||||
OIDC_CLIENT_SECRET: ${MEALIE_OIDC_CLIENT_SECRET}
|
||||
OIDC_AUTO_REDIRECT: false
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
@@ -43,4 +38,4 @@ services:
|
||||
- "traefik.http.routers.mealie.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.mealie.tls=true"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.mealie.middlewares=crowdsec-bouncer@file"
|
||||
- "traefik.http.routers.mealie.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
32
project/service/n8n/n8n.yml
Normal file
32
project/service/n8n/n8n.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
services:
|
||||
n8n:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: docker.n8n.io/n8nio/n8n
|
||||
container_name: n8n
|
||||
ports:
|
||||
- 4022:5678
|
||||
networks:
|
||||
- ip4net
|
||||
environment:
|
||||
- N8N_BLOCK_ENV_ACCESS_IN_NODE=false
|
||||
- MAM_USERNAME=${N8N_MAM_USERNAME}
|
||||
- MAM_PASSWORD=${N8N_MAM_PASSWORD}
|
||||
- PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
- PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
|
||||
user: root
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/n8n/data:/home/node/.n8n
|
||||
entrypoint: /home/node/.n8n/script/entrypoint.sh
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.n8n.rule=Host(`n8n.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.n8n.entrypoints=https"
|
||||
- "traefik.http.routers.n8n.tls=true"
|
||||
- "traefik.http.routers.n8n.tls.certresolver=myresolver"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.n8n.middlewares=crowdsec-bouncer@file"
|
||||
24
project/service/ollama/ollama.yml
Normal file
24
project/service/ollama/ollama.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
ollama:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: ollama/ollama
|
||||
container_name: ollama
|
||||
ports:
|
||||
- 4019:11434
|
||||
networks:
|
||||
- ip6net
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/ollama/data:/root/.ollama
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.ollama.rule=Host(`ollama.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.ollama.entrypoints=https"
|
||||
- "traefik.http.routers.ollama.tls=true"
|
||||
- "traefik.http.routers.ollama.tls.certresolver=myresolver"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.ollama.middlewares=crowdsec-bouncer@file"
|
||||
@@ -10,8 +10,8 @@ services:
|
||||
networks:
|
||||
- ip6net
|
||||
volumes:
|
||||
- ${EXTERNAL_STORAGE}/paperless-ngx/data:/usr/src/paperless/data
|
||||
- ${EXTERNAL_STORAGE}/paperless-ngx/media:/usr/src/paperless/media
|
||||
- ${EXTERNAL_STORAGE}/documents/data:/usr/src/paperless/data
|
||||
- ${EXTERNAL_STORAGE}/documents/media:/usr/src/paperless/media
|
||||
- ${SERVICE_PATH}/paperless-ngx/data/export:/usr/src/paperless/export
|
||||
- ${SERVICE_PATH}/paperless-ngx/data/consume:/usr/src/paperless/consume
|
||||
environment:
|
||||
@@ -46,4 +46,4 @@ services:
|
||||
- "traefik.http.routers.paperless.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.paperless.tls=true"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.paperless.middlewares=crowdsec-bouncer@file"
|
||||
- "traefik.http.routers.paperless.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
22
project/service/pdf/pdf.yml
Normal file
22
project/service/pdf/pdf.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
services:
|
||||
pdf:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: bentopdf/bentopdf-simple
|
||||
container_name: pdf
|
||||
ports:
|
||||
- '4003:8080'
|
||||
networks:
|
||||
- ip6net
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.pdf.rule=Host(`pdf.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.pdf.entrypoints=https"
|
||||
- "traefik.http.routers.pdf.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.pdf.tls=true"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.pdf.middlewares=crowdsec-bouncer@file, authelia@file"
|
||||
@@ -23,9 +23,8 @@ services:
|
||||
# interval: 30s
|
||||
# retries: 3
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/radicale/data:/data/
|
||||
- ${SERVICE_PATH}/radicale/config:/data/
|
||||
|
||||
- ${SERVICE_PATH}/radicale/config:/config/
|
||||
- ${EXTERNAL_STORAGE}/calendars-contacts:/data
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
@@ -36,4 +35,4 @@ services:
|
||||
- "traefik.http.routers.radicale.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.radicale.tls=true"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.radicale.middlewares=crowdsec-bouncer@file"
|
||||
- "traefik.http.routers.radicale.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
services:
|
||||
shlink-backend:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: shlinkio/shlink:latest
|
||||
container_name: shlink-backend
|
||||
ports:
|
||||
- '4004:8080'
|
||||
networks:
|
||||
- ip6net
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/shlink/data:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages
|
||||
- ${SERVICE_PATH}/shlink/config:/configs
|
||||
environment:
|
||||
DEFAULT_DOMAIN: shlink.${PUBLIC_DOMAIN}
|
||||
IS_HTTPS_ENABLED: true
|
||||
# GEOLITE_LICENSE_KEY: # optional, to geolocate visit, see https://shlink.io/documentation/geolite-license-key/
|
||||
# DB
|
||||
DB_DRIVER: postgres
|
||||
DB_USER: shlink
|
||||
DB_PASSWORD: ${SHLINK_DATABASE_PASSWORD}
|
||||
DB_HOST: postgres
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.shlink-backend.rule=Host(`shlink.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.shlink-backend.entrypoints=https"
|
||||
- "traefik.http.routers.shlink-backend.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.shlink-backend.tls=true"
|
||||
- "traefik.http.routers.shlink-backend.service=shlink-backend-svc"
|
||||
- "traefik.http.services.shlink-backend-svc.loadbalancer.server.port=8080"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.shlink-backend.middlewares=crowdsec-bouncer@file"
|
||||
|
||||
shlink-frontend:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: shlinkio/shlink-web-client:latest
|
||||
container_name: shlink-frontend
|
||||
ports:
|
||||
- '4005:8080'
|
||||
networks:
|
||||
- ip6net
|
||||
environment:
|
||||
SHLINK_SERVER_URL: https://shlink.${PUBLIC_DOMAIN}
|
||||
SHLINK_SERVER_API_KEY: ${SHLINK_SERVER_API_KEY}
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.shlink-frontend.rule=Host(`shlink.${LOCAL_DOMAIN}`)"
|
||||
- "traefik.http.routers.shlink-frontend.entrypoints=https"
|
||||
- "traefik.http.routers.shlink-frontend.tls=true"
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
services:
|
||||
sponsorblock:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: ghcr.io/dmunozv04/isponsorblocktv
|
||||
container_name: sponsorblock
|
||||
networks:
|
||||
- ip4net
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/sponsorblock/data:/app/data
|
||||
@@ -1,26 +0,0 @@
|
||||
services:
|
||||
stirling-pdf:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: frooodle/s-pdf:latest
|
||||
container_name: stirling-pdf
|
||||
ports:
|
||||
- '4003:8080'
|
||||
networks:
|
||||
- ip6net
|
||||
volumes:
|
||||
- ${SERVICE_PATH}/stirling-pdf/data:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages
|
||||
- ${SERVICE_PATH}/stirling-pdf/config:/configs
|
||||
# - /location/of/customFiles:/customFiles/
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.stirling-pdf.rule=Host(`stirling-pdf.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.stirling-pdf.entrypoints=https"
|
||||
- "traefik.http.routers.stirling-pdf.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.stirling-pdf.tls=true"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.stirling-pdf.middlewares=crowdsec-bouncer@file, authelia@file"
|
||||
34
project/service/vaultwarden/vaultwarden.yml
Normal file
34
project/service/vaultwarden/vaultwarden.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
services:
|
||||
vaultwarden:
|
||||
extends:
|
||||
file: ${TEMPLATES_PATH}
|
||||
service: default
|
||||
image: vaultwarden/server
|
||||
container_name: vaultwarden
|
||||
ports:
|
||||
- 4018:80
|
||||
networks:
|
||||
- ip6net
|
||||
environment:
|
||||
DOMAIN: "https://vaultwarden.${PUBLIC_DOMAIN}"
|
||||
SIGNUPS_ALLOWED: false
|
||||
INVITATIONS_ALLOWED: false
|
||||
SSO_ENABLED: false # for now sso does only help companies for role management and the master password is still necessary
|
||||
SSO_ONLY: false
|
||||
SSO_AUTHORITY: https://auth.${PUBLIC_DOMAIN}
|
||||
SSO_SCOPES: profile email offline_access
|
||||
SSO_CLIENT_ID: vaultwarden
|
||||
SSO_CLIENT_SECRET: ${VAULTWARDEN_OIDC_CLIENT_SECRET}
|
||||
volumes:
|
||||
- ${EXTERNAL_STORAGE}/passwords:/data/
|
||||
labels:
|
||||
# Watchtower
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.vaultwarden.rule=Host(`vaultwarden.${PUBLIC_DOMAIN}`)"
|
||||
- "traefik.http.routers.vaultwarden.entrypoints=https"
|
||||
- "traefik.http.routers.vaultwarden.tls=true"
|
||||
- "traefik.http.routers.vaultwarden.tls.certresolver=myresolver"
|
||||
# Middlewares
|
||||
- "traefik.http.routers.vaultwarden.middlewares=crowdsec-bouncer@file"
|
||||
Reference in New Issue
Block a user