server-up/docs/arr-stack.md
Ramon 58d9be1f48
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 2m1s
v0.7.90-beta - ARR-stack opgesplitst, /data-mount, netwerkopties per container
- Elk *arr-onderdeel is nu ook een losse app in de store (46 nieuwe sjablonen);
  los en gebundeld komen uit één bron (tools/arr_sjablonen.py) met een test die
  bewaakt dat ze niet uiteen lopen
- Alles deelt één /data-map, zodat hardlinks werken; losse /tv-, /movies- en
  /downloads-mounts zijn eruit, UMASK=002 erbij
- Nieuwe eerste stap "Onderdelen" in het invulmenu, met kopjes per soort; de
  dubbele groepsschakelaar en de lege kaarten in Instellingen zijn weg
- Eigen IP-adres per container in plaats van per stack; containers zonder adres
  houden hun poortmapping. Ook Pangolin publiceert nu per container
- Huntarr vervangen door NeutArr (project offline na lekken, image bestaat niet
  meer), Maintainerr naar zijn nieuwe organisatie
- 31 apps toegevoegd uit het *arr-ecosysteem, alle images tegen hun registry
  gecontroleerd
- data_dir hernoemd naar appdata_dir in de hele catalogus, naast de nieuwe
  data_root; qBittorrent van poort 8080 naar 8097

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
2026-07-31 22:21:04 +02:00

4.4 KiB

De ARR-stack

Media-automatisering bestaat uit een stuk of tien tot vijftig losse programma's die elkaar aanvullen: Sonarr houdt series bij, Radarr films, Prowlarr regelt de indexers, een downloadclient haalt het binnen, Bazarr zoekt ondertitels. In de store staat elk van die programma's als losse app, én gebundeld als ARR-stack waarin je per onderdeel een schakelaar omzet.

Los of gebundeld?

Het zijn dezelfde containers. De stack is één compose-project met één instellingenscherm; los installeren geeft je per app een eigen stack die je apart kunt bijwerken, herstarten en backuppen.

Los ARR-stack
Iets bijzetten opnieuw installeren uit de store schakelaar aan, opnieuw instellen
Bijwerken per app de hele stack in één keer
Backup per app alles samen
Overzicht een tegel per app één tegel met alle containers

Weet je nog niet wat je nodig hebt, begin dan met de stack: je zet er later onderdelen bij zonder opnieuw te beginnen. Draai je er al een paar en wil je er één bij, installeer die dan los.

Eén map: /data

Alles deelt één map, die als /data in elke container komt:

/mnt/data/
├── media/
│   ├── films/
│   ├── series/
│   ├── muziek/
│   └── boeken/
├── torrents/        # blijven seeden na afloop
└── usenet/

Dit is geen smaakkwestie. Staan je downloads en je bibliotheek op verschillende mounts — /downloads en /tv bijvoorbeeld — dan ziet Sonarr twee verschillende bestandssystemen, ook al staat het op dezelfde schijf. Er kan dan geen hardlink gemaakt worden en elke voltooide download wordt gekopieerd naar je bibliotheek. Dat is traag, en je hebt de aflevering tijdelijk twee keer op je schijf staan. Verwijder je daarna de download, dan stopt het seeden.

Met één gedeelde /data-mount is het verplaatsen een hardlink: klaar in een oogwenk, geen extra ruimte, en je torrent blijft doordraaien.

Alle containers draaien met UMASK=002, zodat wat de één aanmaakt door de ander gelezen en geschreven kan worden. Zorg dat de map van de PUID/PGID is die je bij het installeren opgeeft (id -u en id -g op je server).

Downloaden via een VPN

Zet je Gluetun aan, dan gaan de downloadclients in de netwerknamespace van die container zitten: al hun verkeer loopt door de VPN, en hun webinterfaces bereik je via de poorten van Gluetun. Dat gebeurt automatisch zodra je de schakelaar omzet.

Wat er bewust niet gebeurt: de inkomende torrentpoort op de host publiceren. Achter een VPN regel je dat met de port forwarding van je aanbieder — zou je hem op de host zetten, dan komt dat verkeer langs de tunnel binnen en botsen twee torrentclients bovendien meteen op poort 6881.

Je hebt gegevens van je VPN-aanbieder nodig: bij WireGuard een privésleutel en een adres, bij OpenVPN een gebruikersnaam en wachtwoord. Die vul je in bij de stap Toegang en ze komen in .env terecht, niet in het compose-bestand.

Het invulmenu

De stack heeft negenenveertig schakelbare onderdelen, dus het formulier begint met Onderdelen: alle schakelaars bij elkaar, gegroepeerd per soort. Wat je daar aanzet, bepaalt wat je in de volgende stappen te zien krijgt.

  1. Onderdelen — wat wil je draaien
  2. Basis — mappen, tijdzone, PUID/PGID
  3. Verbinden — gedeelde netwerken, en eventueel een eigen IP-adres per container
  4. Instellingen — de poorten (staan al goed) en de VPN-instellingen
  5. Toegang — sleutels en wachtwoorden
  6. Controleren — het compose-bestand zoals het straks op schijf komt

Een eigen adres per container

Bij Verbinden kun je containers een eigen IP-adres in je LAN geven in plaats van een poort op de host. Dat gaat per container: geef Sonarr en Radarr elk een adres en laat de rest op zijn hostpoort staan. Containers zonder adres houden hun poortmapping gewoon.

Zie netwerken.md voor het aanmaken van zo'n netwerk en voor de valkuil dat de host zijn eigen macvlan-containers niet kan bereiken.

De sjablonen worden gegenereerd

Elk onderdeel bestaat twee keer: als losse app in apps/<naam>/ en als schakelaar in apps/arr-stack/. Dat soort verdubbeling loopt uit elkaar, dus beide komen uit één bron:

python3 tools/arr_sjablonen.py

tests/test_arr_sjablonen.py draait dat opnieuw en vergelijkt het met wat er in apps/ staat. Pas je een sjabloon met de hand aan, dan faalt die test — bewerk tools/arr_sjablonen.py en draai het script.