server-up/apps/arr-stack/template.json
Ramon 7ae62fe78c
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m32s
v0.6.10-beta - ARR-stack met een schakelaar per onderdeel
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
2026-07-27 09:46:01 +02:00

423 lines
11 KiB
JSON

{
"kind": "compose",
"metadata": {
"name": "ARR-stack",
"description": "Media-automatisering met een schakelaar per onderdeel: Sonarr, Radarr, Lidarr, Readarr, Whisparr, Prowlarr, Jackett, Bazarr, FlareSolverr, qBittorrent, SABnzbd, NZBGet, Gluetun (VPN), Jellyseerr, Recyclarr, Unpackerr, Tdarr, Autobrr, Maintainerr en Huntarr.",
"tags": [
"media",
"automatisering",
"films",
"series",
"downloaden"
],
"icon": {
"provider": "selfhst",
"id": "sonarr"
},
"version": {
"name": "latest"
}
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Naam van de stack",
"default": "arr",
"required": true,
"description": "Wordt het voorvoegsel van elke container, bv. arr-sonarr"
},
{
"name": "data_dir",
"type": "str",
"title": "Configuratiemap",
"default": "/opt/serverup/appdata",
"required": true
},
{
"name": "media_dir",
"type": "str",
"title": "Mediamap",
"default": "/mnt/media",
"required": true,
"description": "Hier komen films/, series/, muziek/ en boeken/ onder te staan"
},
{
"name": "downloads_dir",
"type": "str",
"title": "Downloadmap",
"default": "/mnt/downloads",
"required": true,
"description": "Zet deze op hetzelfde bestandssysteem als de mediamap, anders kopieert elke download in plaats van te verplaatsen"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
},
{
"name": "puid",
"type": "int",
"title": "Gebruikers-ID (PUID)",
"default": 1000,
"required": true,
"description": "`id -u` op je host; bepaalt de eigenaar van bestanden"
},
{
"name": "pgid",
"type": "int",
"title": "Groeps-ID (PGID)",
"default": 1000,
"required": true
}
]
},
{
"title": "Sonarr — series",
"items": [
{
"name": "port_sonarr",
"type": "int",
"title": "Poort",
"default": 8989,
"required": true
}
],
"toggle": "enable_sonarr",
"toggle_default": true,
"description": "Zoekt, downloadt en hernoemt series"
},
{
"title": "Radarr — films",
"items": [
{
"name": "port_radarr",
"type": "int",
"title": "Poort",
"default": 7878,
"required": true
}
],
"toggle": "enable_radarr",
"toggle_default": true,
"description": "Zoekt, downloadt en hernoemt films"
},
{
"title": "Lidarr — muziek",
"items": [
{
"name": "port_lidarr",
"type": "int",
"title": "Poort",
"default": 8686,
"required": true
}
],
"toggle": "enable_lidarr",
"toggle_default": false
},
{
"title": "Readarr — boeken",
"items": [
{
"name": "port_readarr",
"type": "int",
"title": "Poort",
"default": 8787,
"required": true
}
],
"toggle": "enable_readarr",
"toggle_default": false,
"description": "Let op: de ontwikkeling van Readarr is stilgelegd; het draait nog wel"
},
{
"title": "Whisparr — volwassenen",
"items": [
{
"name": "port_whisparr",
"type": "int",
"title": "Poort",
"default": 6969,
"required": true
}
],
"toggle": "enable_whisparr",
"toggle_default": false
},
{
"title": "Prowlarr — indexerbeheer",
"items": [
{
"name": "port_prowlarr",
"type": "int",
"title": "Poort",
"default": 9696,
"required": true
}
],
"toggle": "enable_prowlarr",
"toggle_default": true,
"description": "Beheert je indexers centraal en duwt ze naar de andere *arr-apps"
},
{
"title": "Jackett — indexerproxy",
"items": [
{
"name": "port_jackett",
"type": "int",
"title": "Poort",
"default": 9117,
"required": true
}
],
"toggle": "enable_jackett",
"toggle_default": false,
"description": "Ouder alternatief voor Prowlarr; meestal heb je er maar één nodig"
},
{
"title": "FlareSolverr — Cloudflare omzeilen",
"items": [
{
"name": "port_flaresolverr",
"type": "int",
"title": "Poort",
"default": 8191,
"required": true
}
],
"toggle": "enable_flaresolverr",
"toggle_default": false,
"description": "Nodig voor indexers die achter een Cloudflare-controle zitten"
},
{
"title": "Bazarr — ondertitels",
"items": [
{
"name": "port_bazarr",
"type": "int",
"title": "Poort",
"default": 6767,
"required": true
}
],
"toggle": "enable_bazarr",
"toggle_default": true
},
{
"title": "qBittorrent — torrents",
"items": [
{
"name": "port_qbittorrent",
"type": "int",
"title": "Webinterface",
"default": 8097,
"required": true
},
{
"name": "port_qbittorrent_tcp",
"type": "int",
"title": "Inkomende poort",
"default": 6881,
"required": true
}
],
"toggle": "enable_qbittorrent",
"toggle_default": true,
"description": "Torrentclient met webinterface"
},
{
"title": "SABnzbd — usenet",
"items": [
{
"name": "port_sabnzbd",
"type": "int",
"title": "Poort",
"default": 8098,
"required": true
}
],
"toggle": "enable_sabnzbd",
"toggle_default": false
},
{
"title": "NZBGet — usenet (lichter)",
"items": [
{
"name": "port_nzbget",
"type": "int",
"title": "Poort",
"default": 6789,
"required": true
}
],
"toggle": "enable_nzbget",
"toggle_default": false,
"description": "Zuiniger alternatief voor SABnzbd"
},
{
"title": "Gluetun — VPN voor de downloadclient",
"items": [
{
"name": "vpn_provider",
"type": "str",
"title": "VPN-aanbieder",
"default": "mullvad",
"required": true,
"description": "Bijvoorbeeld mullvad, nordvpn, protonvpn of surfshark"
},
{
"name": "vpn_type",
"type": "enum",
"title": "Protocol",
"default": "wireguard",
"required": true,
"config": {
"options": [
"wireguard",
"openvpn"
]
}
},
{
"name": "wireguard_private_key",
"type": "str",
"title": "WireGuard privésleutel",
"default": "",
"required": false,
"config": {
"placeholder": "alleen bij wireguard"
}
},
{
"name": "wireguard_addresses",
"type": "str",
"title": "WireGuard adressen",
"default": "",
"required": false,
"config": {
"placeholder": "10.64.0.2/32"
}
},
{
"name": "openvpn_user",
"type": "str",
"title": "OpenVPN gebruiker",
"default": "",
"required": false
},
{
"name": "openvpn_password",
"type": "str",
"title": "OpenVPN wachtwoord",
"default": "",
"required": false
}
],
"toggle": "enable_gluetun",
"toggle_default": false,
"description": "Leidt al je downloadverkeer door een VPN. De downloadclients delen dan het netwerk van deze container, dus hun poorten komen hier te liggen."
},
{
"title": "Jellyseerr — verzoeken",
"items": [
{
"name": "port_jellyseerr",
"type": "int",
"title": "Poort",
"default": 5055,
"required": true
}
],
"toggle": "enable_jellyseerr",
"toggle_default": true,
"description": "Laat huisgenoten films en series aanvragen"
},
{
"title": "Recyclarr — TRaSH-instellingen",
"items": [],
"toggle": "enable_recyclarr",
"toggle_default": false,
"description": "Synchroniseert kwaliteitsprofielen uit de TRaSH-gidsen naar Sonarr en Radarr"
},
{
"title": "Unpackerr — archieven uitpakken",
"items": [],
"toggle": "enable_unpackerr",
"toggle_default": false,
"description": "Pakt gedownloade rar-archieven automatisch uit"
},
{
"title": "Tdarr — hercoderen",
"items": [
{
"name": "port_tdarr",
"type": "int",
"title": "Webinterface",
"default": 8265,
"required": true
},
{
"name": "port_tdarr_server",
"type": "int",
"title": "Serverpoort",
"default": 8266,
"required": true
}
],
"toggle": "enable_tdarr",
"toggle_default": false,
"description": "Zet je bibliotheek om naar een zuiniger formaat"
},
{
"title": "Autobrr — automatisch grijpen",
"items": [
{
"name": "port_autobrr",
"type": "int",
"title": "Poort",
"default": 7474,
"required": true
}
],
"toggle": "enable_autobrr",
"toggle_default": false,
"description": "Reageert direct op aankondigingen in plaats van periodiek te zoeken"
},
{
"title": "Maintainerr — opruimen",
"items": [
{
"name": "port_maintainerr",
"type": "int",
"title": "Poort",
"default": 6246,
"required": true
}
],
"toggle": "enable_maintainerr",
"toggle_default": false,
"description": "Ruimt media op volgens regels die je zelf instelt"
},
{
"title": "Huntarr — gaten opvullen",
"items": [
{
"name": "port_huntarr",
"type": "int",
"title": "Poort",
"default": 9705,
"required": true
}
],
"toggle": "enable_huntarr",
"toggle_default": false,
"description": "Zoekt gericht naar ontbrekende en te verbeteren afleveringen"
}
]
}