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
423 lines
11 KiB
JSON
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"
|
|
}
|
|
]
|
|
}
|