From 31aa2a343040c0f7b5d050bcda523cd324146e92 Mon Sep 17 00:00:00 2001 From: bes-r Date: Wed, 27 May 2026 00:01:28 +0200 Subject: [PATCH] feat: boilerplates voor Unifi, ARR-stack, qBittorrent en SABnzbd --- apps/arr-stack/files/compose.yaml | 99 +++++++++++++++++++ apps/arr-stack/template.json | 132 ++++++++++++++++++++++++++ apps/qbittorrent/files/compose.yaml | 17 ++++ apps/qbittorrent/template.json | 83 ++++++++++++++++ apps/sabnzbd/files/compose.yaml | 14 +++ apps/sabnzbd/template.json | 75 +++++++++++++++ apps/unifi-network/files/compose.yaml | 37 ++++++++ apps/unifi-network/template.json | 90 ++++++++++++++++++ 8 files changed, 547 insertions(+) create mode 100644 apps/arr-stack/files/compose.yaml create mode 100644 apps/arr-stack/template.json create mode 100644 apps/qbittorrent/files/compose.yaml create mode 100644 apps/qbittorrent/template.json create mode 100644 apps/sabnzbd/files/compose.yaml create mode 100644 apps/sabnzbd/template.json create mode 100644 apps/unifi-network/files/compose.yaml create mode 100644 apps/unifi-network/template.json diff --git a/apps/arr-stack/files/compose.yaml b/apps/arr-stack/files/compose.yaml new file mode 100644 index 0000000..049f146 --- /dev/null +++ b/apps/arr-stack/files/compose.yaml @@ -0,0 +1,99 @@ +services: + << service_name >>-radarr: + image: lscr.io/linuxserver/radarr:latest + container_name: << service_name >>-radarr + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/radarr:/config + - << media_dir >>/films:/movies + - << downloads_dir >>:/downloads + ports: + - "<< port_radarr >>:7878" + restart: unless-stopped + + << service_name >>-sonarr: + image: lscr.io/linuxserver/sonarr:latest + container_name: << service_name >>-sonarr + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/sonarr:/config + - << media_dir >>/series:/tv + - << downloads_dir >>:/downloads + ports: + - "<< port_sonarr >>:8989" + restart: unless-stopped + + << service_name >>-lidarr: + image: lscr.io/linuxserver/lidarr:latest + container_name: << service_name >>-lidarr + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/lidarr:/config + - << media_dir >>/muziek:/music + - << downloads_dir >>:/downloads + ports: + - "<< port_lidarr >>:8686" + restart: unless-stopped + + << service_name >>-readarr: + image: lscr.io/linuxserver/readarr:develop + container_name: << service_name >>-readarr + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/readarr:/config + - << media_dir >>/boeken:/books + - << downloads_dir >>:/downloads + ports: + - "<< port_readarr >>:8787" + restart: unless-stopped + + << service_name >>-prowlarr: + image: lscr.io/linuxserver/prowlarr:latest + container_name: << service_name >>-prowlarr + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/prowlarr:/config + ports: + - "<< port_prowlarr >>:9696" + restart: unless-stopped + + << service_name >>-bazarr: + image: lscr.io/linuxserver/bazarr:latest + container_name: << service_name >>-bazarr + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/bazarr:/config + - << media_dir >>/films:/movies + - << media_dir >>/series:/tv + ports: + - "<< port_bazarr >>:6767" + restart: unless-stopped + + << service_name >>-jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: << service_name >>-jellyseerr + environment: + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/jellyseerr:/app/config + ports: + - "<< port_jellyseerr >>:5055" + restart: unless-stopped diff --git a/apps/arr-stack/template.json b/apps/arr-stack/template.json new file mode 100644 index 0000000..0af6830 --- /dev/null +++ b/apps/arr-stack/template.json @@ -0,0 +1,132 @@ +{ + "kind": "compose", + "metadata": { + "name": "ARR-stack", + "description": "Complete media-automatiseringsstack: Radarr (films), Sonarr (series), Lidarr (muziek), Readarr (boeken), Prowlarr (indexers), Bazarr (ondertitels) en Jellyseerr (verzoeken).", + "tags": ["media", "automatisering", "radarr", "sonarr", "prowlarr", "bazarr", "jellyseerr"], + "icon": {"provider": "selfhst", "id": "radarr"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam (prefix)", + "default": "arr", + "required": true, + "description": "Prefix voor alle containers in de stack, bijv. 'arr' geeft arr-radarr, arr-sonarr, etc." + }, + { + "name": "data_dir", + "type": "str", + "title": "Config directory", + "default": "/opt/serverup/appdata", + "required": true, + "description": "Basismap voor configuratiebestanden van alle ARR-apps" + }, + { + "name": "media_dir", + "type": "str", + "title": "Media directory", + "default": "/mnt/media", + "required": true, + "description": "Map voor films, series en muziek. Moet ook zichtbaar zijn voor de download-client." + }, + { + "name": "downloads_dir", + "type": "str", + "title": "Downloads directory", + "default": "/mnt/downloads", + "required": true, + "description": "Map waar de download-client bestanden neerzet (qBittorrent of SABnzbd). Moet overeenkomen met het pad in de download-client." + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Gebruiker", + "items": [ + { + "name": "puid", + "type": "int", + "title": "PUID", + "default": 1000, + "required": true, + "description": "User ID van de systeemgebruiker (id -u)" + }, + { + "name": "pgid", + "type": "int", + "title": "PGID", + "default": 1000, + "required": true, + "description": "Group ID van de systeemgebruiker (id -g)" + } + ] + }, + { + "title": "Poorten", + "items": [ + { + "name": "port_radarr", + "type": "int", + "title": "Radarr poort", + "default": 7878, + "required": true + }, + { + "name": "port_sonarr", + "type": "int", + "title": "Sonarr poort", + "default": 8989, + "required": true + }, + { + "name": "port_lidarr", + "type": "int", + "title": "Lidarr poort", + "default": 8686, + "required": true + }, + { + "name": "port_readarr", + "type": "int", + "title": "Readarr poort", + "default": 8787, + "required": true + }, + { + "name": "port_prowlarr", + "type": "int", + "title": "Prowlarr poort", + "default": 9696, + "required": true + }, + { + "name": "port_bazarr", + "type": "int", + "title": "Bazarr poort", + "default": 6767, + "required": true + }, + { + "name": "port_jellyseerr", + "type": "int", + "title": "Jellyseerr poort", + "default": 5055, + "required": true, + "description": "Webinterface voor gebruikers om films en series aan te vragen" + } + ] + } + ] +} diff --git a/apps/qbittorrent/files/compose.yaml b/apps/qbittorrent/files/compose.yaml new file mode 100644 index 0000000..613aa03 --- /dev/null +++ b/apps/qbittorrent/files/compose.yaml @@ -0,0 +1,17 @@ +services: + << service_name >>: + image: lscr.io/linuxserver/qbittorrent:latest + container_name: << service_name >> + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + - WEBUI_PORT=<< port_ui >> + volumes: + - << data_dir >>/<< service_name >>/config:/config + - << downloads_dir >>:/downloads + ports: + - "<< port_ui >>:<< port_ui >>" + - "<< port_torrent >>:6881" + - "<< port_torrent >>:6881/udp" + restart: unless-stopped diff --git a/apps/qbittorrent/template.json b/apps/qbittorrent/template.json new file mode 100644 index 0000000..e8e544d --- /dev/null +++ b/apps/qbittorrent/template.json @@ -0,0 +1,83 @@ +{ + "kind": "compose", + "metadata": { + "name": "qBittorrent", + "description": "Open-source torrent-client met webinterface. Werkt goed samen met de ARR-stack.", + "tags": ["downloaden", "torrents", "media"], + "icon": {"provider": "selfhst", "id": "qbittorrent"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "qbittorrent", + "required": true + }, + { + "name": "port_ui", + "type": "int", + "title": "Web UI poort", + "default": 8080, + "required": true, + "description": "Poort voor de webinterface" + }, + { + "name": "port_torrent", + "type": "int", + "title": "Torrent poort", + "default": 6881, + "required": true, + "description": "Poort voor torrent-verbindingen (TCP en UDP). Zet deze poort open in je firewall/router voor betere download-snelheid." + }, + { + "name": "data_dir", + "type": "str", + "title": "Config directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "downloads_dir", + "type": "str", + "title": "Downloads directory", + "default": "/mnt/downloads", + "required": true, + "description": "Map waar downloads worden opgeslagen. Gebruik hetzelfde pad als in Radarr/Sonarr." + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Gebruiker", + "items": [ + { + "name": "puid", + "type": "int", + "title": "PUID", + "default": 1000, + "required": true, + "description": "User ID van de systeemgebruiker (id -u)" + }, + { + "name": "pgid", + "type": "int", + "title": "PGID", + "default": 1000, + "required": true, + "description": "Group ID van de systeemgebruiker (id -g)" + } + ] + } + ] +} diff --git a/apps/sabnzbd/files/compose.yaml b/apps/sabnzbd/files/compose.yaml new file mode 100644 index 0000000..34d4768 --- /dev/null +++ b/apps/sabnzbd/files/compose.yaml @@ -0,0 +1,14 @@ +services: + << service_name >>: + image: lscr.io/linuxserver/sabnzbd:latest + container_name: << service_name >> + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/config:/config + - << downloads_dir >>:/downloads + ports: + - "<< port >>:8080" + restart: unless-stopped diff --git a/apps/sabnzbd/template.json b/apps/sabnzbd/template.json new file mode 100644 index 0000000..fde1301 --- /dev/null +++ b/apps/sabnzbd/template.json @@ -0,0 +1,75 @@ +{ + "kind": "compose", + "metadata": { + "name": "SABnzbd", + "description": "Usenet download-client met webinterface. Werkt samen met de ARR-stack voor automatisch downloaden via Usenet.", + "tags": ["downloaden", "usenet", "nzb", "media"], + "icon": {"provider": "selfhst", "id": "sabnzbd"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "sabnzbd", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web UI poort", + "default": 8081, + "required": true, + "description": "Poort voor de webinterface" + }, + { + "name": "data_dir", + "type": "str", + "title": "Config directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "downloads_dir", + "type": "str", + "title": "Downloads directory", + "default": "/mnt/downloads", + "required": true, + "description": "Map waar downloads worden opgeslagen. Gebruik hetzelfde pad als in Radarr/Sonarr." + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Gebruiker", + "items": [ + { + "name": "puid", + "type": "int", + "title": "PUID", + "default": 1000, + "required": true, + "description": "User ID van de systeemgebruiker (id -u)" + }, + { + "name": "pgid", + "type": "int", + "title": "PGID", + "default": 1000, + "required": true, + "description": "Group ID van de systeemgebruiker (id -g)" + } + ] + } + ] +} diff --git a/apps/unifi-network/files/compose.yaml b/apps/unifi-network/files/compose.yaml new file mode 100644 index 0000000..fc7673d --- /dev/null +++ b/apps/unifi-network/files/compose.yaml @@ -0,0 +1,37 @@ +services: + << service_name >>: + image: lscr.io/linuxserver/unifi-network-application:latest + container_name: << service_name >> + environment: + - PUID=<< puid >> + - PGID=<< pgid >> + - TZ=<< timezone >> + - MONGO_USER=unifi + - MONGO_PASS=<< mongo_password >> + - MONGO_HOST=<< service_name >>-mongo + - MONGO_PORT=27017 + - MONGO_DBNAME=unifi + volumes: + - << data_dir >>/<< service_name >>/config:/config + ports: + - "<< port_ui >>:8443" + - "<< port_inform >>:8080" + - "3478:3478/udp" + - "10001:10001/udp" + depends_on: + - << service_name >>-mongo + restart: unless-stopped + + << service_name >>-mongo: + image: mongo:4.4 + container_name: << service_name >>-mongo + environment: + - MONGO_INITDB_ROOT_USERNAME=unifi + - MONGO_INITDB_ROOT_PASSWORD=<< mongo_password >> + - MONGO_INITDB_DATABASE=unifi + volumes: + - << service_name >>_mongodata:/data/db + restart: unless-stopped + +volumes: + << service_name >>_mongodata: diff --git a/apps/unifi-network/template.json b/apps/unifi-network/template.json new file mode 100644 index 0000000..4d585ee --- /dev/null +++ b/apps/unifi-network/template.json @@ -0,0 +1,90 @@ +{ + "kind": "compose", + "metadata": { + "name": "Unifi Network Application", + "description": "Unifi netwerkconfiguratie en -beheer. Beheert access points, switches en gateways van Ubiquiti.", + "tags": ["netwerk", "unifi", "ubiquiti", "wifi"], + "icon": {"provider": "selfhst", "id": "unifi"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "unifi", + "required": true + }, + { + "name": "port_ui", + "type": "int", + "title": "Web UI poort (HTTPS)", + "default": 8443, + "required": true, + "description": "Poort voor de Unifi-webinterface" + }, + { + "name": "port_inform", + "type": "int", + "title": "Inform poort", + "default": 8080, + "required": true, + "description": "Poort waarop Unifi-apparaten inchecken. Moet bereikbaar zijn voor alle access points en switches." + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true, + "description": "Basismap voor configuratie en database" + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Gebruiker", + "items": [ + { + "name": "puid", + "type": "int", + "title": "PUID", + "default": 1000, + "required": true, + "description": "User ID van de systeemgebruiker die de container beheert (whoami → id -u)" + }, + { + "name": "pgid", + "type": "int", + "title": "PGID", + "default": 1000, + "required": true, + "description": "Group ID van de systeemgebruiker (id -g)" + } + ] + }, + { + "title": "Database", + "items": [ + { + "name": "mongo_password", + "type": "str", + "title": "MongoDB wachtwoord", + "default": "unifi_mongo_pass", + "required": true, + "description": "Wachtwoord voor de interne MongoDB database", + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +}