- 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
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.
- Onderdelen — wat wil je draaien
- Basis — mappen, tijdzone, PUID/PGID
- Verbinden — gedeelde netwerken, en eventueel een eigen IP-adres per container
- Instellingen — de poorten (staan al goed) en de VPN-instellingen
- Toegang — sleutels en wachtwoorden
- 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.