All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m32s
De ARR-stack installeerde altijd dezelfde zeven containers. Nu kies je per onderdeel uit twintig: - Media: sonarr, radarr, lidarr, readarr, whisparr - Indexers: prowlarr, jackett, flaresolverr, bazarr - Downloaden: qbittorrent, sabnzbd, nzbget, gluetun (VPN) - Aanvullend: jellyseerr, recyclarr, unpackerr, tdarr, autobrr, maintainerr, huntarr Standaard aan: sonarr, radarr, prowlarr, bazarr, qbittorrent, jellyseerr. Gluetun: - Staat die aan, dan draaien de downloadclients in diens netwerknamespace zonder eigen poortmapping; anders lekt hun verkeer om de VPN heen. Hun webinterfaces komen op de poorten van de Gluetun-container. - qBittorrent en SABnzbd luisteren allebei standaard op 8080 en botsten daardoor achter een gedeelde namespace. qBittorrent draait nu intern op 8090. Groepsschakelaars werkten niet: - Een `toggle` op een groep in template.json was zelf geen variabele en kreeg dus nooit een startwaarde, waardoor elk schakelbaar onderdeel standaard uit stond en een stack met schakelaars leeg binnenkwam. fields() geeft de schakelaar nu mee als synthetisch bool-veld met een instelbare standaardstand (toggle_default), en de UI toont hem alleen in de kop van de groep in plaats van er ook nog eens onder. Tests: elk onderdeel levert precies een service op als het aan staat en geen spoor als het uit staat, de downloadclients zitten achter de VPN zonder eigen poorten, en de interne poorten achter Gluetun botsen niet. Poortbotsingen met bestaande apps rechtgezet (8090 -> 8097, 8095 -> 8098); 6881 en 5055 blijven gedeeld met de losse variant van dezelfde app. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
362 lines
10 KiB
YAML
362 lines
10 KiB
YAML
# ARR-stack — kies per onderdeel of je het wilt.
|
|
#
|
|
# Aandachtspunten:
|
|
# * Zet de download- en mediamap op hetzelfde bestandssysteem, anders kopieert
|
|
# elke voltooide download in plaats van te verplaatsen (traag, dubbele opslag).
|
|
# * Draai je met Gluetun, dan zitten de downloadclients in het netwerk van die
|
|
# container en bereik je hun webinterface via de Gluetun-poorten.
|
|
services:
|
|
|
|
<%- if enable_sonarr %>
|
|
<< service_name >>-sonarr:
|
|
image: lscr.io/linuxserver/sonarr:latest
|
|
container_name: << service_name >>-sonarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/sonarr:/config
|
|
- << media_dir >>/series:/tv
|
|
- << downloads_dir >>:/downloads
|
|
ports:
|
|
- "<< port_sonarr >>:8989"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_radarr %>
|
|
<< service_name >>-radarr:
|
|
image: lscr.io/linuxserver/radarr:latest
|
|
container_name: << service_name >>-radarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/radarr:/config
|
|
- << media_dir >>/films:/movies
|
|
- << downloads_dir >>:/downloads
|
|
ports:
|
|
- "<< port_radarr >>:7878"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_lidarr %>
|
|
<< service_name >>-lidarr:
|
|
image: lscr.io/linuxserver/lidarr:latest
|
|
container_name: << service_name >>-lidarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/lidarr:/config
|
|
- << media_dir >>/muziek:/music
|
|
- << downloads_dir >>:/downloads
|
|
ports:
|
|
- "<< port_lidarr >>:8686"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_readarr %>
|
|
<< service_name >>-readarr:
|
|
image: lscr.io/linuxserver/readarr:develop
|
|
container_name: << service_name >>-readarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/readarr:/config
|
|
- << media_dir >>/boeken:/books
|
|
- << downloads_dir >>:/downloads
|
|
ports:
|
|
- "<< port_readarr >>:8787"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_whisparr %>
|
|
<< service_name >>-whisparr:
|
|
image: ghcr.io/hotio/whisparr:latest
|
|
container_name: << service_name >>-whisparr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/whisparr:/config
|
|
- << media_dir >>/volwassen:/adult
|
|
- << downloads_dir >>:/downloads
|
|
ports:
|
|
- "<< port_whisparr >>:6969"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_prowlarr %>
|
|
<< service_name >>-prowlarr:
|
|
image: lscr.io/linuxserver/prowlarr:latest
|
|
container_name: << service_name >>-prowlarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/prowlarr:/config
|
|
ports:
|
|
- "<< port_prowlarr >>:9696"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_jackett %>
|
|
<< service_name >>-jackett:
|
|
image: lscr.io/linuxserver/jackett:latest
|
|
container_name: << service_name >>-jackett
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/jackett:/config
|
|
ports:
|
|
- "<< port_jackett >>:9117"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_bazarr %>
|
|
<< service_name >>-bazarr:
|
|
image: lscr.io/linuxserver/bazarr:latest
|
|
container_name: << service_name >>-bazarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/bazarr:/config
|
|
- << media_dir >>/films:/movies
|
|
- << media_dir >>/series:/tv
|
|
ports:
|
|
- "<< port_bazarr >>:6767"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_flaresolverr %>
|
|
<< service_name >>-flaresolverr:
|
|
image: ghcr.io/flaresolverr/flaresolverr:latest
|
|
container_name: << service_name >>-flaresolverr
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
- LOG_LEVEL=info
|
|
ports:
|
|
- "<< port_flaresolverr >>:8191"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_gluetun %>
|
|
<< service_name >>-gluetun:
|
|
image: qmcgaw/gluetun:latest
|
|
container_name: << service_name >>-gluetun
|
|
cap_add:
|
|
- NET_ADMIN
|
|
devices:
|
|
- /dev/net/tun:/dev/net/tun
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
- VPN_SERVICE_PROVIDER=<< vpn_provider >>
|
|
- VPN_TYPE=<< vpn_type >>
|
|
- WIREGUARD_PRIVATE_KEY=<< wireguard_private_key >>
|
|
- WIREGUARD_ADDRESSES=<< wireguard_addresses >>
|
|
- OPENVPN_USER=<< openvpn_user >>
|
|
- OPENVPN_PASSWORD=<< openvpn_password >>
|
|
ports:
|
|
# De downloadclients delen dit netwerk, dus hun poorten staan hier.
|
|
<%- if enable_qbittorrent %>
|
|
- "<< port_qbittorrent >>:8090"
|
|
- "<< port_qbittorrent_tcp >>:6881"
|
|
- "<< port_qbittorrent_tcp >>:6881/udp"
|
|
<%- endif %>
|
|
<%- if enable_sabnzbd %>
|
|
- "<< port_sabnzbd >>:8080"
|
|
<%- endif %>
|
|
<%- if enable_nzbget %>
|
|
- "<< port_nzbget >>:6789"
|
|
<%- endif %>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/gluetun:/gluetun
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_qbittorrent %>
|
|
<< service_name >>-qbittorrent:
|
|
image: lscr.io/linuxserver/qbittorrent:latest
|
|
container_name: << service_name >>-qbittorrent
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
- WEBUI_PORT=8090
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/qbittorrent:/config
|
|
- << downloads_dir >>:/downloads
|
|
<%- if enable_gluetun %>
|
|
network_mode: "service:<< service_name >>-gluetun"
|
|
depends_on:
|
|
- << service_name >>-gluetun
|
|
<%- endif %>
|
|
<%- if not enable_gluetun %>
|
|
ports:
|
|
- "<< port_qbittorrent >>:8090"
|
|
- "<< port_qbittorrent_tcp >>:6881"
|
|
- "<< port_qbittorrent_tcp >>:6881/udp"
|
|
<%- endif %>
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_sabnzbd %>
|
|
<< service_name >>-sabnzbd:
|
|
image: lscr.io/linuxserver/sabnzbd:latest
|
|
container_name: << service_name >>-sabnzbd
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/sabnzbd:/config
|
|
- << downloads_dir >>:/downloads
|
|
<%- if enable_gluetun %>
|
|
network_mode: "service:<< service_name >>-gluetun"
|
|
depends_on:
|
|
- << service_name >>-gluetun
|
|
<%- endif %>
|
|
<%- if not enable_gluetun %>
|
|
ports:
|
|
- "<< port_sabnzbd >>:8080"
|
|
<%- endif %>
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_nzbget %>
|
|
<< service_name >>-nzbget:
|
|
image: lscr.io/linuxserver/nzbget:latest
|
|
container_name: << service_name >>-nzbget
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/nzbget:/config
|
|
- << downloads_dir >>:/downloads
|
|
<%- if enable_gluetun %>
|
|
network_mode: "service:<< service_name >>-gluetun"
|
|
depends_on:
|
|
- << service_name >>-gluetun
|
|
<%- endif %>
|
|
<%- if not enable_gluetun %>
|
|
ports:
|
|
- "<< port_nzbget >>:6789"
|
|
<%- endif %>
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_jellyseerr %>
|
|
<< service_name >>-jellyseerr:
|
|
image: fallenbagel/jellyseerr:latest
|
|
container_name: << service_name >>-jellyseerr
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
- LOG_LEVEL=info
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/jellyseerr:/app/config
|
|
ports:
|
|
- "<< port_jellyseerr >>:5055"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_recyclarr %>
|
|
<< service_name >>-recyclarr:
|
|
image: ghcr.io/recyclarr/recyclarr:latest
|
|
container_name: << service_name >>-recyclarr
|
|
user: << puid >>:<< pgid >>
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/recyclarr:/config
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_unpackerr %>
|
|
<< service_name >>-unpackerr:
|
|
image: ghcr.io/unpackerr/unpackerr:latest
|
|
container_name: << service_name >>-unpackerr
|
|
user: << puid >>:<< pgid >>
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
- UN_SONARR_0_URL=http://<< service_name >>-sonarr:8989
|
|
- UN_RADARR_0_URL=http://<< service_name >>-radarr:7878
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/unpackerr:/config
|
|
- << downloads_dir >>:/downloads
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_tdarr %>
|
|
<< service_name >>-tdarr:
|
|
image: ghcr.io/haveagitgat/tdarr:latest
|
|
container_name: << service_name >>-tdarr
|
|
environment:
|
|
- PUID=<< puid >>
|
|
- PGID=<< pgid >>
|
|
- TZ=<< timezone >>
|
|
- serverIP=0.0.0.0
|
|
- serverPort=8266
|
|
- webUIPort=8265
|
|
- internalNode=true
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/tdarr/server:/app/server
|
|
- << data_dir >>/<< service_name >>/tdarr/configs:/app/configs
|
|
- << media_dir >>:/media
|
|
- << downloads_dir >>/tdarr-cache:/temp
|
|
ports:
|
|
- "<< port_tdarr >>:8265"
|
|
- "<< port_tdarr_server >>:8266"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_autobrr %>
|
|
<< service_name >>-autobrr:
|
|
image: ghcr.io/autobrr/autobrr:latest
|
|
container_name: << service_name >>-autobrr
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/autobrr:/config
|
|
ports:
|
|
- "<< port_autobrr >>:7474"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_maintainerr %>
|
|
<< service_name >>-maintainerr:
|
|
image: ghcr.io/jorenn92/maintainerr:latest
|
|
container_name: << service_name >>-maintainerr
|
|
user: << puid >>:<< pgid >>
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/maintainerr:/opt/data
|
|
ports:
|
|
- "<< port_maintainerr >>:6246"
|
|
restart: unless-stopped
|
|
<%- endif %>
|
|
|
|
<%- if enable_huntarr %>
|
|
<< service_name >>-huntarr:
|
|
image: ghcr.io/plexguide/huntarr:latest
|
|
container_name: << service_name >>-huntarr
|
|
environment:
|
|
- TZ=<< timezone >>
|
|
volumes:
|
|
- << data_dir >>/<< service_name >>/huntarr:/config
|
|
ports:
|
|
- "<< port_huntarr >>:9705"
|
|
restart: unless-stopped
|
|
<%- endif %>
|