server-up/apps/arr-stack/template.json
Ramon 4450b3c171
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m16s
v0.7.00-beta - apps koppelen, eenvoudiger instellen, geavanceerde opties verborgen
Apps onderling verbinden:
- Elke stack draaide als eigen compose-project met een eigen netwerk, waardoor
  stacks elkaar niet op naam konden bereiken. Bij installeren staat nu
  "Verbinden met andere apps" aan: de stack komt op een gedeeld bridge-netwerk
  (SHARED_NETWORK, standaard "serverup") dat op aanvraag wordt aangemaakt.
- compose_transform.add_shared_network() hangt elke service eraan en laat
  bestaande netwerken staan, dus het werkt samen met een macvlan-adres.
- Nieuw /api/apps/connectable geeft de geinstalleerde apps met hun
  containernamen, zodat de installatiemodal kan laten kiezen.

Kiezen in plaats van typen:
- Een veld met "connect": {"app": "mosquitto", "scheme": "mqtt", "port": 1883}
  toont een keuzelijst met wat er al draait, met handmatig invullen als
  terugval. Toegepast op zigbee2mqtt -> mosquitto en open-webui -> ollama.
- Is de doel-app nog niet geinstalleerd, dan zegt het veld dat.

Uitleg per instelling:
- Info-icoon per veld opent een blok met de volledige uitleg plus de
  standaardwaarde. Uitgeschreven voor de instellingen die de meeste vragen
  oproepen (downloadmap vs mediamap, shm_size bij frigate, poort 80 bij caddy,
  PUID bij de arr-stack, GPU bij ollama, publiek adres bij wg-easy).

Geavanceerde opties:
- advanced: true op een veld of groep zet het achter een uitklapblok met
  teller. Toegepast op wachtwoorden, PUID/PGID, USB-paden en bewaartermijnen
  van 28 apps.
- Test bewaakt dat elke app zichtbare velden overhoudt en dat koppelvelden naar
  een bestaande app verwijzen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
2026-07-27 13:52:17 +02:00

425 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",
"help": "Zet deze map op hetzelfde bestandssysteem als je mediamap. Staan ze op verschillende schijven of volumes, dan kopieert elke voltooide download in plaats van te verplaatsen: traag, en je hebt alles tijdelijk dubbel."
},
{
"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",
"help": "Het gebruikersnummer waaronder de containers draaien. Klopt dit niet met de eigenaar van je mediamap, dan kunnen de apps er niet in schrijven. Vind het met `id -u` op je server."
},
{
"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"
}
]
}