Files
self-hosted/docker-compose.yml
2025-12-07 22:30:49 +01:00

387 lines
10 KiB
YAML

---
services:
nzbget:
image: lscr.io/linuxserver/nzbget:latest
container_name: nzbget
network_mode: "service:gluetun"
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
- NZBGET_USER=admin
- NZBGET_PASS=${NZBGET_PASSWORD}
volumes:
- /mnt/.ix-apps/app_mounts/nzbget/config:/config
- /mnt/pool-main/media/downloads:/downloads
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:6789 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# JELLYFIN
############################
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
container_name: jellyfin
network_mode: bridge
ports:
- 8096:8096
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/jellyfin/config:/config
- /mnt/pool-main/media/series:/data/tvshows
- /mnt/pool-main/media/movies:/data/movies
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:8096 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# PLEX
############################
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
- VERSION=docker
- PLEX_CLAIM=claim-1sArduhvJJ87ywxKQeHr
volumes:
- /mnt/.ix-apps/app_mounts/plex/config:/config
- /mnt/pool-main/media/series:/tv
- /mnt/pool-main/media/movies:/movies
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# TAUTULLI
############################
tautulli:
image: lscr.io/linuxserver/tautulli:latest
container_name: tautulli
depends_on:
- plex
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/tautulli/config:/config
ports:
- 8181:8181
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:8181 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# RADARR
############################
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
network_mode: "service:gluetun"
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/radarr/config:/config
- /mnt/pool-main/media/movies:/movies #optional
- /mnt/pool-main/media/downloads:/downloads #optional
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# SONARR
############################
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
network_mode: "service:gluetun"
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/sonarr/config:/config
- /mnt/pool-main/media/series:/tv #optional
- /mnt/pool-main/media/downloads:/downloads #optional
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:8989 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# PROWLARR
############################
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
network_mode: "service:gluetun"
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/prowlarr/config:/config
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:9696 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# BAZARR
############################
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
network_mode: "service:gluetun"
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/bazarr/config:/config
- /mnt/pool-main/media/movies:/movies
- /mnt/pool-main/media/series:/tv
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:6767 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# LIDARR
############################
lidarr:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidarr
network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/lidarr/config:/config
- /mnt/pool-main/media/music:/music #optional
- /mnt/pool-main/media/downloads:/downloads #optional
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:8686 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# JELLYSEERR
############################
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
ports:
- 5055:5055
environment:
- LOG_LEVEL=debug
- TZ=Europe/Brussels
volumes:
- /mnt/.ix-apps/app_mounts/jellyseerr/config:/app/config
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# TRANSMISSION
############################
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
network_mode: "service:gluetun"
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
- USER=admin
- PASS=${TRANSMISSION_PASSWORD}
volumes:
- /mnt/.ix-apps/app_mounts/transmission/data:/config
- /mnt/pool-main/media/downloads:/downloads #optional
healthcheck:
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
test: ["CMD-SHELL", "curl -f http://127.0.0.1:9091 >/dev/null 2>&1"]
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
############################
# TRAEFIK (commented)
############################
# traefik:
# image: traefik:latest
# container_name: traefik
# network_mode: "service:gluetun"
# depends_on:
# - gluetun
# command:
# - "--api.insecure=true"
# - "--providers.docker=true"
# - "--providers.docker.exposedbydefault=false"
# - "--entrypoints.web.address=:8081"
# - "--log.level=DEBUG"
# - "--accesslog=true"
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.traefik.rule=Host(`traefik.${DUCKDNS_SUBDOMAIN}.duckdns.org`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))"
# - "traefik.http.routers.traefik.entrypoints=web"
# - "traefik.http.routers.traefik.service=api@internal"
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# - /mnt/.ix-apps/app_mounts/traefik/letsencrypt:/letsencrypt
# - /mnt/.ix-apps/app_mounts/traefik/config:/config
# restart: unless-stopped
############################
# GLUETUN
############################
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
ports:
- 51413:51413 #transmission
- 51413:51413/udp #transmission
- 6767:6767 #bazarr
- 6789:6789
- 7359:7359/udp #jellyfin
- 7878:7878 #radarr
- 8686:8686 #lidarr
- 8787:8787 #readarr
- 8920:8920 #jellyfin
- 8989:8989 #sonarr
- 9091:9091 #transmission
- 9696:9696 #prowlarr
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER}
- OPENVPN_USER=${VPN_USER}
- OPENVPN_PASSWORD=${VPN_PASSWORD}
- SERVER_COUNTRIES=Switzerland
- TZ=Europe/Brussels
restart: unless-stopped
labels:
- com.centurylinklabs.watchtower.enable=true
- autoheal=true
############################
# WATCHTOWER (automatic updates)
############################
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Brussels
- WATCHTOWER_SCHEDULE=0 0 3 * * *
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_NO_STARTUP_MESSAGE=true
- WATCHTOWER_LABEL_ENABLE=true
restart: unless-stopped
############################
# AUTOHEAL (restart unhealthy containers)
############################
autoheal:
image: willfarrell/autoheal:latest
container_name: autoheal
environment:
- AUTOHEAL_CONTAINER_LABEL=autoheal
- AUTOHEAL_INTERVAL=30
- AUTOHEAL_START_PERIOD=300
- AUTOHEAL_DEFAULT_STOP_TIMEOUT=30
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped