v0.7.90-beta - ARR-stack opgesplitst, /data-mount, netwerkopties per container
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 2m1s

- 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
This commit is contained in:
Ramon 2026-07-31 22:21:04 +02:00
parent ea9b1eb668
commit 58d9be1f48
283 changed files with 8163 additions and 794 deletions

View file

@ -1,3 +1,59 @@
# v0.7.90-beta — De ARR-stack uit elkaar, en netwerkopties per container
**Elk *arr-onderdeel is nu een losse app.** Wie alleen Sonarr wil, hoefde eerst
de hele ARR-stack te nemen. Er staan nu zesenveertig losse sjablonen in de store
— Sonarr, Radarr, Prowlarr, Bazarr, Gluetun, en alles daaromheen — en de
gecombineerde stack blijft bestaan als "alles in één keer". Het zijn dezelfde
containers: beide verpakkingen komen uit één bron (`tools/arr_sjablonen.py`) en
een test draait die opnieuw en vergelijkt het resultaat, zodat ze niet stilletjes
uit elkaar groeien. Die test vond meteen zijn eerste geval: los koppelde
qBittorrent zijn interne poort aan de hostpoort die jij koos, wat niet meer klopt
zodra hij achter een VPN zit.
**Hardlinks werkten niet, en dat was niet zichtbaar.** Elke app kreeg losse
mounts — `/tv`, `/movies`, `/downloads`. Voor Sonarr zijn dat twee verschillende
bestandssystemen, ook al staat alles op dezelfde schijf, dus werd élke voltooide
download naar je bibliotheek *gekopieerd* in plaats van gelinkt: traag, tijdelijk
alles dubbel, en je torrent stopte met seeden zodra je opruimde. De beschrijving
waarschuwde wel voor "zet ze op hetzelfde bestandssysteem", maar de mounts maakten
het alsnog onmogelijk. Alles deelt nu één map die als `/data` binnenkomt, met
`UMASK=002` zodat de apps bij elkaars bestanden kunnen.
**Negentien lege kaarten.** De schakelaar van een onderdeel stond hard in de stap
*Instellingen*, terwijl je hem ook in de kop van zijn eigen groep in *Basis* zag
staan: elk onderdeel had twee schakelaars in twee schermen, en *Instellingen*
bestond voor het grootste deel uit kaarten zonder inhoud. Er is nu een eerste
stap **Onderdelen** waar alle schakelaars bij elkaar staan, gegroepeerd per soort
— bij negenenveertig onderdelen scheelt dat nogal. Wat je uitzet verdwijnt uit de
volgende stappen in plaats van als lege kaart te blijven staan.
**Een eigen IP-adres ging per stack, niet per container.** Bij een app met één
container klopt dat. Bij een stack met twintig webinterfaces kreeg de eerste
container het adres en raakten **alle andere hun poortmappings kwijt** zonder er
iets voor terug te krijgen — daarna waren ze nergens meer te bereiken. Je wijst
nu per container een adres toe; wie er geen krijgt, houdt gewoon zijn poort.
Hetzelfde gold voor Pangolin, dat één URL per stack maakte op de eerste poort die
het tegenkwam: dat gaat nu ook per container.
**Huntarr is eruit.** Het project werd in februari 2026 offline gehaald nadat er
onder meer authenticatie-bypasses en API-sleutels in platte tekst waren gevonden;
de auteur heeft de repo verwijderd. Het image dat in het sjabloon stond bestaat
niet meer — een controle langs alle registries bevestigde dat. Vervangen door
NeutArr, de fork van de laatste schone versie. In diezelfde ronde bleek
Maintainerr verhuisd naar een andere organisatie.
**Nieuw in de catalogus:** Overseerr, Cleanuparr, Decluttarr, Janitorr,
cross-seed, Configarr, Profilarr, Byparr, Kometa, Tautulli, Jellystat, Wizarr,
SuggestArr, Trailarr, Lingarr, NZBHydra2, Deluge, Transmission, slskd, Soularr,
Mylar3, Kapowarr, Pulsarr, Prefetcharr, Posterizarr, Notifiarr, Exportarr,
Autopulse, Requestrr, Homarr en NeutArr. Alle images zijn tegen hun registry
gecontroleerd.
**Twee mappen die allebei "data" heetten.** `data_dir` was de map waar een app
zijn eigen spullen bewaart; daar kwam nu een gedeelde `/data` naast. Die heten nu
`appdata_dir` en `data_root`, in alle sjablonen. En qBittorrent stond standaard op
poort 8080, samen met zes andere apps; die staat nu op 8097.
# v0.7.80-beta — De knop Volgende, tijdzones, en netwerken per groepje # v0.7.80-beta — De knop Volgende, tijdzones, en netwerken per groepje
**De knop Volgende deed niets.** Alpine haalt een boolean-attribuut alleen weg **De knop Volgende deed niets.** Alpine haalt een boolean-attribuut alleen weg

View file

@ -1 +1 @@
0.7.80-beta 0.7.90-beta

View file

@ -5,5 +5,5 @@ services:
ports: ports:
- "<< port >>:5006" - "<< port >>:5006"
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/data - << appdata_dir >>/<< service_name >>/data:/data
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -7,6 +7,6 @@ services:
- "<< port_dns >>:53/tcp" - "<< port_dns >>:53/tcp"
- "<< port_dns >>:53/udp" - "<< port_dns >>:53/udp"
volumes: volumes:
- << data_dir >>/<< service_name >>/work:/opt/adguardhome/work - << appdata_dir >>/<< service_name >>/work:/opt/adguardhome/work
- << data_dir >>/<< service_name >>/conf:/opt/adguardhome/conf - << appdata_dir >>/<< service_name >>/conf:/opt/adguardhome/conf
restart: unless-stopped restart: unless-stopped

View file

@ -33,9 +33,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -1,43 +1,29 @@
# ARR-stack — kies per onderdeel of je het wilt. # ARR-stack — kies per onderdeel of je het wilt.
# #
# Aandachtspunten: # Alles deelt één map, gekoppeld als /data. Dat is geen smaakkwestie:
# * Zet de download- en mediamap op hetzelfde bestandssysteem, anders kopieert # staan je downloads en je bibliotheek op verschillende mounts, dan kan
# elke voltooide download in plaats van te verplaatsen (traag, dubbele opslag). # Sonarr geen hardlink maken en kopieert elke voltooide download naar je
# * Draai je met Gluetun, dan zitten de downloadclients in het netwerk van die # bibliotheek. Traag, en je hebt alles tijdelijk dubbel op de schijf.
# container en bereik je hun webinterface via de Gluetun-poorten. #
# /data/media/{films,series,muziek,boeken} je bibliotheek
# /data/torrents/ torrents (blijven seeden)
# /data/usenet/ usenet-downloads
#
# Draai je met Gluetun, dan zitten de downloadclients in het netwerk van
# die container en bereik je hun webinterface via de Gluetun-poorten.
services: services:
<%- if enable_sonarr %> <%- if enable_kapowarr %>
<< service_name >>-sonarr: << service_name >>-kapowarr:
image: lscr.io/linuxserver/sonarr:latest image: mrcas/kapowarr:latest
container_name: << service_name >>-sonarr container_name: << service_name >>-kapowarr
environment: environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/sonarr:/config - << appdata_dir >>/<< service_name >>/kapowarr:/app/db
- << media_dir >>/series:/tv - << data_root >>:/data
- << downloads_dir >>:/downloads
ports: ports:
- "<< port_sonarr >>:8989" - "<< port_kapowarr >>:5656"
restart: unless-stopped
<%- endif %>
<%- if enable_radarr %>
<< 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 restart: unless-stopped
<%- endif %> <%- endif %>
@ -49,15 +35,49 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/lidarr:/config - << appdata_dir >>/<< service_name >>/lidarr:/config
- << media_dir >>/muziek:/music - << data_root >>:/data
- << downloads_dir >>:/downloads
ports: ports:
- "<< port_lidarr >>:8686" - "<< port_lidarr >>:8686"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_mylar3 %>
<< service_name >>-mylar3:
image: lscr.io/linuxserver/mylar3:latest
container_name: << service_name >>-mylar3
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/mylar3:/config
- << data_root >>:/data
ports:
- "<< port_mylar3 >>:8090"
restart: unless-stopped
<%- endif %>
<%- if enable_radarr %>
<< service_name >>-radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: << service_name >>-radarr
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/radarr:/config
- << data_root >>:/data
ports:
- "<< port_radarr >>:7878"
restart: unless-stopped
<%- endif %>
<%- if enable_readarr %> <%- if enable_readarr %>
<< service_name >>-readarr: << service_name >>-readarr:
image: lscr.io/linuxserver/readarr:develop image: lscr.io/linuxserver/readarr:develop
@ -66,15 +86,32 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/readarr:/config - << appdata_dir >>/<< service_name >>/readarr:/config
- << media_dir >>/boeken:/books - << data_root >>:/data
- << downloads_dir >>:/downloads
ports: ports:
- "<< port_readarr >>:8787" - "<< port_readarr >>:8787"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_sonarr %>
<< service_name >>-sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: << service_name >>-sonarr
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/sonarr:/config
- << data_root >>:/data
ports:
- "<< port_sonarr >>:8989"
restart: unless-stopped
<%- endif %>
<%- if enable_whisparr %> <%- if enable_whisparr %>
<< service_name >>-whisparr: << service_name >>-whisparr:
image: ghcr.io/hotio/whisparr:latest image: ghcr.io/hotio/whisparr:latest
@ -83,27 +120,39 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/whisparr:/config - << appdata_dir >>/<< service_name >>/whisparr:/config
- << media_dir >>/volwassen:/adult - << data_root >>:/data
- << downloads_dir >>:/downloads
ports: ports:
- "<< port_whisparr >>:6969" - "<< port_whisparr >>:6969"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_prowlarr %> <%- if enable_byparr %>
<< service_name >>-prowlarr: << service_name >>-byparr:
image: lscr.io/linuxserver/prowlarr:latest image: ghcr.io/thephaseless/byparr:latest
container_name: << service_name >>-prowlarr container_name: << service_name >>-byparr
environment: environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/prowlarr:/config - << appdata_dir >>/<< service_name >>/byparr:/config
ports: ports:
- "<< port_prowlarr >>:9696" - "<< port_byparr >>:8191"
restart: unless-stopped
<%- endif %>
<%- if enable_flaresolverr %>
<< service_name >>-flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: << service_name >>-flaresolverr
environment:
- TZ=<< timezone >>
- LOG_LEVEL=info
volumes:
- << appdata_dir >>/<< service_name >>/flaresolverr:/config
ports:
- "<< port_flaresolverr >>:8191"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
@ -115,88 +164,58 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/jackett:/config - << appdata_dir >>/<< service_name >>/jackett:/config
ports: ports:
- "<< port_jackett >>:9117" - "<< port_jackett >>:9117"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_bazarr %> <%- if enable_nzbhydra2 %>
<< service_name >>-bazarr: << service_name >>-nzbhydra2:
image: lscr.io/linuxserver/bazarr:latest image: lscr.io/linuxserver/nzbhydra2:latest
container_name: << service_name >>-bazarr container_name: << service_name >>-nzbhydra2
environment: environment:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/bazarr:/config - << appdata_dir >>/<< service_name >>/nzbhydra2:/config
- << media_dir >>/films:/movies
- << media_dir >>/series:/tv
ports: ports:
- "<< port_bazarr >>:6767" - "<< port_nzbhydra2 >>:5076"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_flaresolverr %> <%- if enable_prowlarr %>
<< service_name >>-flaresolverr: << service_name >>-prowlarr:
image: ghcr.io/flaresolverr/flaresolverr:latest image: lscr.io/linuxserver/prowlarr:latest
container_name: << service_name >>-flaresolverr container_name: << service_name >>-prowlarr
environment:
- TZ=<< timezone >>
- LOG_LEVEL=info
ports:
- "<< port_flaresolverr >>:8191"
restart: unless-stopped
<%- endif %>
<%- if enable_gluetun %>
<< service_name >>-gluetun:
image: qmcgaw/gluetun:latest
container_name: << service_name >>-gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- TZ=<< timezone >>
- VPN_SERVICE_PROVIDER=<< vpn_provider >>
- VPN_TYPE=<< vpn_type >>
- WIREGUARD_PRIVATE_KEY=<< wireguard_private_key >>
- WIREGUARD_ADDRESSES=<< wireguard_addresses >>
- OPENVPN_USER=<< openvpn_user >>
- OPENVPN_PASSWORD=<< openvpn_password >>
ports:
# De downloadclients delen dit netwerk, dus hun poorten staan hier.
<%- if enable_qbittorrent %>
- "<< port_qbittorrent >>:8090"
- "<< port_qbittorrent_tcp >>:6881"
- "<< port_qbittorrent_tcp >>:6881/udp"
<%- endif %>
<%- if enable_sabnzbd %>
- "<< port_sabnzbd >>:8080"
<%- endif %>
<%- if enable_nzbget %>
- "<< port_nzbget >>:6789"
<%- endif %>
volumes:
- << data_dir >>/<< service_name >>/gluetun:/gluetun
restart: unless-stopped
<%- endif %>
<%- if enable_qbittorrent %>
<< service_name >>-qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: << service_name >>-qbittorrent
environment: environment:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- WEBUI_PORT=8090 - UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/qbittorrent:/config - << appdata_dir >>/<< service_name >>/prowlarr:/config
- << downloads_dir >>:/downloads ports:
- "<< port_prowlarr >>:9696"
restart: unless-stopped
<%- endif %>
<%- if enable_deluge %>
<< service_name >>-deluge:
image: lscr.io/linuxserver/deluge:latest
container_name: << service_name >>-deluge
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/deluge:/config
- << data_root >>:/data
<%- if enable_gluetun %> <%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun" network_mode: "service:<< service_name >>-gluetun"
depends_on: depends_on:
@ -204,32 +223,9 @@ services:
<%- endif %> <%- endif %>
<%- if not enable_gluetun %> <%- if not enable_gluetun %>
ports: ports:
- "<< port_qbittorrent >>:8090" - "<< port_deluge >>:8112"
- "<< port_qbittorrent_tcp >>:6881" - "<< port_deluge_torrent >>:6881"
- "<< port_qbittorrent_tcp >>:6881/udp" - "<< port_deluge_torrent >>:6881/udp"
<%- endif %>
restart: unless-stopped
<%- endif %>
<%- if enable_sabnzbd %>
<< service_name >>-sabnzbd:
image: lscr.io/linuxserver/sabnzbd:latest
container_name: << service_name >>-sabnzbd
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
volumes:
- << data_dir >>/<< service_name >>/sabnzbd:/config
- << downloads_dir >>:/downloads
<%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun"
depends_on:
- << service_name >>-gluetun
<%- endif %>
<%- if not enable_gluetun %>
ports:
- "<< port_sabnzbd >>:8080"
<%- endif %> <%- endif %>
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
@ -242,9 +238,10 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/nzbget:/config - << appdata_dir >>/<< service_name >>/nzbget:/config
- << downloads_dir >>:/downloads - << data_root >>:/data
<%- if enable_gluetun %> <%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun" network_mode: "service:<< service_name >>-gluetun"
depends_on: depends_on:
@ -257,44 +254,134 @@ services:
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_jellyseerr %> <%- if enable_qbittorrent %>
<< service_name >>-jellyseerr: << service_name >>-qbittorrent:
image: fallenbagel/jellyseerr:latest image: lscr.io/linuxserver/qbittorrent:latest
container_name: << service_name >>-jellyseerr container_name: << service_name >>-qbittorrent
environment: environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- LOG_LEVEL=info - UMASK=002
- WEBUI_PORT=8090
volumes: volumes:
- << data_dir >>/<< service_name >>/jellyseerr:/app/config - << appdata_dir >>/<< service_name >>/qbittorrent:/config
- << data_root >>:/data
<%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun"
depends_on:
- << service_name >>-gluetun
<%- endif %>
<%- if not enable_gluetun %>
ports: ports:
- "<< port_jellyseerr >>:5055" - "<< port_qbittorrent >>:8090"
- "<< port_qbittorrent_torrent >>:6881"
- "<< port_qbittorrent_torrent >>:6881/udp"
<%- endif %>
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_recyclarr %> <%- if enable_sabnzbd %>
<< service_name >>-recyclarr: << service_name >>-sabnzbd:
image: ghcr.io/recyclarr/recyclarr:latest image: lscr.io/linuxserver/sabnzbd:latest
container_name: << service_name >>-recyclarr container_name: << service_name >>-sabnzbd
user: << puid >>:<< pgid >>
environment: environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
volumes: volumes:
- << data_dir >>/<< service_name >>/recyclarr:/config - << appdata_dir >>/<< service_name >>/sabnzbd:/config
- << data_root >>:/data
<%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun"
depends_on:
- << service_name >>-gluetun
<%- endif %>
<%- if not enable_gluetun %>
ports:
- "<< port_sabnzbd >>:8080"
<%- endif %>
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_unpackerr %> <%- if enable_slskd %>
<< service_name >>-unpackerr: << service_name >>-slskd:
image: ghcr.io/unpackerr/unpackerr:latest image: slskd/slskd:latest
container_name: << service_name >>-unpackerr container_name: << service_name >>-slskd
user: << puid >>:<< pgid >>
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
- UN_SONARR_0_URL=http://<< service_name >>-sonarr:8989 - SLSKD_REMOTE_CONFIGURATION=true
- UN_RADARR_0_URL=http://<< service_name >>-radarr:7878
volumes: volumes:
- << data_dir >>/<< service_name >>/unpackerr:/config - << appdata_dir >>/<< service_name >>/slskd:/app
- << downloads_dir >>:/downloads - << data_root >>:/data
<%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun"
depends_on:
- << service_name >>-gluetun
<%- endif %>
<%- if not enable_gluetun %>
ports:
- "<< port_slskd >>:5030"
- "<< port_slskd_listen >>:50300"
<%- endif %>
restart: unless-stopped
<%- endif %>
<%- if enable_transmission %>
<< service_name >>-transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: << service_name >>-transmission
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/transmission:/config
- << data_root >>:/data
<%- if enable_gluetun %>
network_mode: "service:<< service_name >>-gluetun"
depends_on:
- << service_name >>-gluetun
<%- endif %>
<%- if not enable_gluetun %>
ports:
- "<< port_transmission >>:9091"
- "<< port_transmission_torrent >>:51413"
- "<< port_transmission_torrent >>:51413/udp"
<%- endif %>
restart: unless-stopped
<%- endif %>
<%- if enable_bazarr %>
<< service_name >>-bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: << service_name >>-bazarr
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/bazarr:/config
- << data_root >>:/data
ports:
- "<< port_bazarr >>:6767"
restart: unless-stopped
<%- endif %>
<%- if enable_lingarr %>
<< service_name >>-lingarr:
image: lingarr/lingarr:latest
container_name: << service_name >>-lingarr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/lingarr:/app/config
- << data_root >>:/data
ports:
- "<< port_lingarr >>:9876"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
@ -306,57 +393,453 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
- UMASK=002
- serverIP=0.0.0.0 - serverIP=0.0.0.0
- serverPort=8266 - serverPort=8266
- webUIPort=8265 - webUIPort=8265
- internalNode=true - internalNode=true
volumes: volumes:
- << data_dir >>/<< service_name >>/tdarr/server:/app/server - << appdata_dir >>/<< service_name >>/tdarr:/app/server
- << data_dir >>/<< service_name >>/tdarr/configs:/app/configs - << data_root >>:/data
- << media_dir >>:/media - << appdata_dir >>/<< service_name >>/tdarr-configs:/app/configs
- << downloads_dir >>/tdarr-cache:/temp
ports: ports:
- "<< port_tdarr >>:8265" - "<< port_tdarr >>:8265"
- "<< port_tdarr_server >>:8266" - "<< port_tdarr_server >>:8266"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_autobrr %> <%- if enable_unpackerr %>
<< service_name >>-autobrr: << service_name >>-unpackerr:
image: ghcr.io/autobrr/autobrr:latest image: ghcr.io/unpackerr/unpackerr:latest
container_name: << service_name >>-autobrr container_name: << service_name >>-unpackerr
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UN_SONARR_0_URL=<< sonarr_url >>
- UN_SONARR_0_API_KEY=<< sonarr_apikey >>
- UN_RADARR_0_URL=<< radarr_url >>
- UN_RADARR_0_API_KEY=<< radarr_apikey >>
volumes:
- << appdata_dir >>/<< service_name >>/unpackerr:/config
- << data_root >>:/data
restart: unless-stopped
<%- endif %>
<%- if enable_jellyseerr %>
<< service_name >>-jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: << service_name >>-jellyseerr
environment:
- TZ=<< timezone >>
- LOG_LEVEL=info
volumes:
- << appdata_dir >>/<< service_name >>/jellyseerr:/app/config
ports:
- "<< port_jellyseerr >>:5055"
restart: unless-stopped
<%- endif %>
<%- if enable_overseerr %>
<< service_name >>-overseerr:
image: sctx/overseerr:latest
container_name: << service_name >>-overseerr
environment:
- TZ=<< timezone >>
- LOG_LEVEL=info
volumes:
- << appdata_dir >>/<< service_name >>/overseerr:/app/config
ports:
- "<< port_overseerr >>:5055"
restart: unless-stopped
<%- endif %>
<%- if enable_prefetcharr %>
<< service_name >>-prefetcharr:
image: phueber/prefetcharr:latest
container_name: << service_name >>-prefetcharr
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/autobrr:/config - << appdata_dir >>/<< service_name >>/prefetcharr:/config
restart: unless-stopped
<%- endif %>
<%- if enable_pulsarr %>
<< service_name >>-pulsarr:
image: lakker/pulsarr:latest
container_name: << service_name >>-pulsarr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/pulsarr:/app/data
ports: ports:
- "<< port_autobrr >>:7474" - "<< port_pulsarr >>:3003"
restart: unless-stopped
<%- endif %>
<%- if enable_requestrr %>
<< service_name >>-requestrr:
image: thomst08/requestrr:latest
container_name: << service_name >>-requestrr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/requestrr:/root/config
ports:
- "<< port_requestrr >>:4545"
restart: unless-stopped
<%- endif %>
<%- if enable_suggestarr %>
<< service_name >>-suggestarr:
image: ciuse99/suggestarr:latest
container_name: << service_name >>-suggestarr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/suggestarr:/app/config
ports:
- "<< port_suggestarr >>:5000"
restart: unless-stopped
<%- endif %>
<%- if enable_wizarr %>
<< service_name >>-wizarr:
image: ghcr.io/wizarrrr/wizarr:latest
container_name: << service_name >>-wizarr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/wizarr:/data/database
ports:
- "<< port_wizarr >>:5690"
restart: unless-stopped
<%- endif %>
<%- if enable_cleanuparr %>
<< service_name >>-cleanuparr:
image: ghcr.io/cleanuparr/cleanuparr:latest
container_name: << service_name >>-cleanuparr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/cleanuparr:/config
- << data_root >>:/data
ports:
- "<< port_cleanuparr >>:11011"
restart: unless-stopped
<%- endif %>
<%- if enable_crossseed %>
<< service_name >>-crossseed:
image: ghcr.io/cross-seed/cross-seed:latest
container_name: << service_name >>-crossseed
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/crossseed:/config
- << data_root >>:/data
command: daemon
ports:
- "<< port_crossseed >>:2468"
restart: unless-stopped
<%- endif %>
<%- if enable_decluttarr %>
<< service_name >>-decluttarr:
image: ghcr.io/manimatter/decluttarr:latest
container_name: << service_name >>-decluttarr
environment:
- TZ=<< timezone >>
- SONARR_URL=<< sonarr_url >>
- SONARR_KEY=<< sonarr_apikey >>
- RADARR_URL=<< radarr_url >>
- RADARR_KEY=<< radarr_apikey >>
- LOG_LEVEL=INFO
volumes:
- << appdata_dir >>/<< service_name >>/decluttarr:/config
restart: unless-stopped
<%- endif %>
<%- if enable_janitorr %>
<< service_name >>-janitorr:
image: ghcr.io/schaka/janitorr:native-stable
container_name: << service_name >>-janitorr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/janitorr:/config
- << data_root >>:/data
ports:
- "<< port_janitorr >>:8978"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_maintainerr %> <%- if enable_maintainerr %>
<< service_name >>-maintainerr: << service_name >>-maintainerr:
image: ghcr.io/jorenn92/maintainerr:latest image: ghcr.io/maintainerr/maintainerr:latest
container_name: << service_name >>-maintainerr container_name: << service_name >>-maintainerr
user: << puid >>:<< pgid >>
environment: environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/maintainerr:/opt/data - << appdata_dir >>/<< service_name >>/maintainerr:/opt/data
ports: ports:
- "<< port_maintainerr >>:6246" - "<< port_maintainerr >>:6246"
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>
<%- if enable_huntarr %> <%- if enable_neutarr %>
<< service_name >>-huntarr: << service_name >>-neutarr:
image: ghcr.io/plexguide/huntarr:latest image: iampuid0/neutarr:latest
container_name: << service_name >>-huntarr container_name: << service_name >>-neutarr
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/huntarr:/config - << appdata_dir >>/<< service_name >>/neutarr:/config
ports: ports:
- "<< port_huntarr >>:9705" - "<< port_neutarr >>:9705"
restart: unless-stopped
<%- endif %>
<%- if enable_configarr %>
<< service_name >>-configarr:
image: ghcr.io/raydak-labs/configarr:latest
container_name: << service_name >>-configarr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/configarr:/app/config
restart: unless-stopped
<%- endif %>
<%- if enable_profilarr %>
<< service_name >>-profilarr:
image: santiagosayshey/profilarr:latest
container_name: << service_name >>-profilarr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/profilarr:/config
ports:
- "<< port_profilarr >>:6868"
restart: unless-stopped
<%- endif %>
<%- if enable_recyclarr %>
<< service_name >>-recyclarr:
image: ghcr.io/recyclarr/recyclarr:latest
container_name: << service_name >>-recyclarr
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/recyclarr:/config
restart: unless-stopped
<%- endif %>
<%- if enable_kometa %>
<< service_name >>-kometa:
image: kometateam/kometa:latest
container_name: << service_name >>-kometa
environment:
- TZ=<< timezone >>
- KOMETA_RUN=false
volumes:
- << appdata_dir >>/<< service_name >>/kometa:/config
- << data_root >>:/data
restart: unless-stopped
<%- endif %>
<%- if enable_posterizarr %>
<< service_name >>-posterizarr:
image: ghcr.io/fscorrupt/posterizarr:latest
container_name: << service_name >>-posterizarr
environment:
- TZ=<< timezone >>
- RUN_TIME=disabled
volumes:
- << appdata_dir >>/<< service_name >>/posterizarr:/config
- << data_root >>:/data
restart: unless-stopped
<%- endif %>
<%- if enable_trailarr %>
<< service_name >>-trailarr:
image: nandyalu/trailarr:latest
container_name: << service_name >>-trailarr
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/trailarr:/config
- << data_root >>:/data
ports:
- "<< port_trailarr >>:7889"
restart: unless-stopped
<%- endif %>
<%- if enable_autopulse %>
<< service_name >>-autopulse:
image: ghcr.io/dan-online/autopulse:latest
container_name: << service_name >>-autopulse
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/autopulse:/app/config
ports:
- "<< port_autopulse >>:2875"
restart: unless-stopped
<%- endif %>
<%- if enable_exportarr %>
<< service_name >>-exportarr:
image: ghcr.io/onedr0p/exportarr:latest
container_name: << service_name >>-exportarr
environment:
- TZ=<< timezone >>
- URL=<< arr_url >>
- APIKEY=<< arr_apikey >>
- PORT=<< port_exportarr >>
volumes:
- << appdata_dir >>/<< service_name >>/exportarr:/config
command: << arr_soort >>
ports:
- "<< port_exportarr >>:9707"
restart: unless-stopped
<%- endif %>
<%- if enable_homarr %>
<< service_name >>-homarr:
image: ghcr.io/homarr-labs/homarr:latest
container_name: << service_name >>-homarr
environment:
- TZ=<< timezone >>
- SECRET_ENCRYPTION_KEY=<< homarr_encryption_key >>
volumes:
- << appdata_dir >>/<< service_name >>/homarr:/appdata
ports:
- "<< port_homarr >>:7575"
restart: unless-stopped
<%- endif %>
<%- if enable_jellystat %>
<< service_name >>-jellystat:
image: cyfershepard/jellystat:latest
container_name: << service_name >>-jellystat
environment:
- TZ=<< timezone >>
- POSTGRES_USER=jellystat
- POSTGRES_PASSWORD=<< db_password >>
- POSTGRES_IP=<< service_name >>-jellystat-db
- POSTGRES_PORT=5432
- JWT_SECRET=<< jwt_secret >>
volumes:
- << appdata_dir >>/<< service_name >>/jellystat:/app/backend/backup-data
ports:
- "<< port_jellystat >>:3000"
depends_on:
- << service_name >>-jellystat-db
restart: unless-stopped
<< service_name >>-jellystat-db:
image: postgres:16-alpine
container_name: << service_name >>-jellystat-db
environment:
- POSTGRES_USER=jellystat
- POSTGRES_PASSWORD=<< db_password >>
- POSTGRES_DB=jfstat
volumes:
- << appdata_dir >>/<< service_name >>-jellystat-db:/var/lib/postgresql/data
restart: unless-stopped
<%- endif %>
<%- if enable_notifiarr %>
<< service_name >>-notifiarr:
image: golift/notifiarr:latest
container_name: << service_name >>-notifiarr
environment:
- TZ=<< timezone >>
- DN_API_KEY=<< notifiarr_apikey >>
volumes:
- << appdata_dir >>/<< service_name >>/notifiarr:/config
ports:
- "<< port_notifiarr >>:5454"
restart: unless-stopped
<%- endif %>
<%- if enable_tautulli %>
<< service_name >>-tautulli:
image: lscr.io/linuxserver/tautulli:latest
container_name: << service_name >>-tautulli
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>/tautulli:/config
ports:
- "<< port_tautulli >>:8181"
restart: unless-stopped
<%- endif %>
<%- if enable_soularr %>
<< service_name >>-soularr:
image: mrusse08/soularr:latest
container_name: << service_name >>-soularr
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>/soularr:/data
- << data_root >>:/data
restart: unless-stopped
<%- endif %>
<%- if enable_gluetun %>
<< service_name >>-gluetun:
image: qmcgaw/gluetun:latest
container_name: << service_name >>-gluetun
environment:
- TZ=<< timezone >>
- VPN_SERVICE_PROVIDER=<< vpn_provider >>
- VPN_TYPE=<< vpn_type >>
- SERVER_COUNTRIES=<< vpn_landen >>
- WIREGUARD_PRIVATE_KEY=<< wireguard_private_key >>
- WIREGUARD_ADDRESSES=<< wireguard_addresses >>
- OPENVPN_USER=<< openvpn_user >>
- OPENVPN_PASSWORD=<< openvpn_password >>
volumes:
- << appdata_dir >>/<< service_name >>/gluetun:/gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
# De downloadclients delen dit netwerk, dus hun webinterfaces
# staan hier. Inkomende torrentpoorten niet: die regelt je
# VPN-aanbieder met port forwarding.
<%- if enable_deluge %>
- "<< port_deluge >>:8112"
<%- endif %>
<%- if enable_nzbget %>
- "<< port_nzbget >>:6789"
<%- endif %>
<%- if enable_qbittorrent %>
- "<< port_qbittorrent >>:8090"
<%- endif %>
<%- if enable_sabnzbd %>
- "<< port_sabnzbd >>:8080"
<%- endif %>
<%- if enable_slskd %>
- "<< port_slskd >>:5030"
<%- endif %>
<%- if enable_transmission %>
- "<< port_transmission >>:9091"
<%- endif %>
restart: unless-stopped restart: unless-stopped
<%- endif %> <%- endif %>

File diff suppressed because it is too large Load diff

View file

@ -8,6 +8,6 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << media_dir >>:/audiobooks - << media_dir >>:/audiobooks
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
- << data_dir >>/<< service_name >>/metadata:/metadata - << appdata_dir >>/<< service_name >>/metadata:/metadata
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -11,5 +11,5 @@ services:
- AUTHELIA_STORAGE_ENCRYPTION_KEY=<< storage_key >> - AUTHELIA_STORAGE_ENCRYPTION_KEY=<< storage_key >>
volumes: volumes:
# Zet hier configuration.yml en users_database.yml neer voor de eerste start. # Zet hier configuration.yml en users_database.yml neer voor de eerste start.
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,11 @@
services:
<< service_name >>:
image: ghcr.io/dan-online/autopulse:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>:/app/config
ports:
- "<< port >>:2875"
restart: unless-stopped

View file

@ -0,0 +1,57 @@
{
"kind": "compose",
"metadata": {
"name": "Autopulse",
"description": "Laat Plex of Jellyfin meteen een nieuwe aflevering zien, in plaats van te wachten op de volgende scan.",
"tags": [
"media",
"automatisering"
],
"icon": {
"provider": "selfhst",
"id": "autopulse"
},
"version": {
"name": "latest"
},
"categories": [
"media"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "autopulse",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Poort",
"default": 2875,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -12,5 +12,5 @@ services:
- ALLOWED_HOSTS=<< allowed_hosts >> - ALLOWED_HOSTS=<< allowed_hosts >>
- CSRF_TRUSTED_ORIGINS=http://<< allowed_hosts >> - CSRF_TRUSTED_ORIGINS=http://<< allowed_hosts >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/app/data - << appdata_dir >>/<< service_name >>/config:/app/data
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -10,8 +10,8 @@ services:
- PGID=<< pgid >> - PGID=<< pgid >>
- PORT=8000 - PORT=8000
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/app/data - << appdata_dir >>/<< service_name >>/data:/app/data
- << data_dir >>/<< service_name >>/logs:/app/logs - << appdata_dir >>/<< service_name >>/logs:/app/logs
cap_add: cap_add:
- NET_BIND_SERVICE - NET_BIND_SERVICE
stop_grace_period: 30s stop_grace_period: 30s

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -8,5 +8,5 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
- BASEROW_PUBLIC_URL=<< public_url >> - BASEROW_PUBLIC_URL=<< public_url >>
volumes: volumes:
- << data_dir >>/<< service_name >>:/baserow/data - << appdata_dir >>/<< service_name >>:/baserow/data
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,15 @@
services:
<< service_name >>:
image: lscr.io/linuxserver/bazarr:latest
container_name: << service_name >>
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>:/config
- << data_root >>:/data
ports:
- "<< port >>:6767"
restart: unless-stopped

86
apps/bazarr/template.json Normal file
View file

@ -0,0 +1,86 @@
{
"kind": "compose",
"metadata": {
"name": "Bazarr",
"description": "Zoekt en downloadt ondertitels bij wat Sonarr en Radarr al hebben binnengehaald.",
"tags": [
"media",
"ondertitels"
],
"icon": {
"provider": "selfhst",
"id": "bazarr"
},
"version": {
"name": "latest"
},
"categories": [
"media"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "bazarr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 6767,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "data_root",
"type": "str",
"title": "Gedeelde datamap",
"default": "/mnt/data",
"required": true,
"description": "Eén map met je media én je downloads, gekoppeld als /data",
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Gebruiker",
"items": [
{
"name": "puid",
"type": "int",
"title": "Gebruikers-ID (PUID)",
"default": 1000,
"required": true,
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
},
{
"name": "pgid",
"type": "int",
"title": "Groeps-ID (PGID)",
"default": 1000,
"required": true
}
]
}
]
}

View file

@ -7,7 +7,7 @@ services:
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/beszel_data - << appdata_dir >>/<< service_name >>/data:/beszel_data
restart: unless-stopped restart: unless-stopped
<< service_name >>-agent: << service_name >>-agent:

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -15,7 +15,7 @@ services:
- DB_PASSWORD=<< db_password >> - DB_PASSWORD=<< db_password >>
- DB_DATABASE=bookstack - DB_DATABASE=bookstack
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
depends_on: depends_on:
- << service_name >>-db - << service_name >>-db
restart: unless-stopped restart: unless-stopped
@ -32,5 +32,5 @@ services:
- MYSQL_USER=bookstack - MYSQL_USER=bookstack
- MYSQL_PASSWORD=<< db_password >> - MYSQL_PASSWORD=<< db_password >>
volumes: volumes:
- << data_dir >>/<< service_name >>/db:/config - << appdata_dir >>/<< service_name >>/db:/config
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,11 @@
services:
<< service_name >>:
image: ghcr.io/thephaseless/byparr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>:/config
ports:
- "<< port >>:8191"
restart: unless-stopped

59
apps/byparr/template.json Normal file
View file

@ -0,0 +1,59 @@
{
"kind": "compose",
"metadata": {
"name": "Byparr",
"description": "Nieuwer alternatief voor FlareSolverr, gebouwd op SeleniumBase. Spreekt dezelfde API, dus je kunt het er zo voor in de plaats zetten.",
"tags": [
"indexers",
"downloaden",
"proxy"
],
"icon": {
"provider": "selfhst",
"id": "byparr"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "byparr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Poort",
"default": 8119,
"required": true,
"description": "Byparr luistert intern op 8191, net als FlareSolverr"
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -10,7 +10,7 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
# Zet hier je Caddyfile neer; Caddy regelt de certificaten daarna zelf. # Zet hier je Caddyfile neer; Caddy regelt de certificaten daarna zelf.
- << data_dir >>/<< service_name >>/Caddyfile:/etc/caddy/Caddyfile - << appdata_dir >>/<< service_name >>/Caddyfile:/etc/caddy/Caddyfile
- << service_name >>_data:/data - << service_name >>_data:/data
- << service_name >>_config:/config - << service_name >>_config:/config
restart: unless-stopped restart: unless-stopped

View file

@ -40,9 +40,9 @@
"help": "Caddy vraagt zelf certificaten aan bij Let's Encrypt en heeft daarvoor poort 80 nodig, ook als je alles via HTTPS aanbiedt." "help": "Caddy vraagt zelf certificaten aan bij Let's Encrypt en heeft daarvoor poort 80 nodig, ook als je alles via HTTPS aanbiedt."
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -9,6 +9,6 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
- << books_dir >>:/books - << books_dir >>:/books
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -9,5 +9,5 @@ services:
- CHANGEDETECTION_PASSWORD=<< password >> - CHANGEDETECTION_PASSWORD=<< password >>
<% endif %> <% endif %>
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/datastore - << appdata_dir >>/<< service_name >>/data:/datastore
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -0,0 +1,12 @@
services:
<< service_name >>:
image: ghcr.io/cleanuparr/cleanuparr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>:/config
- << data_root >>:/data
ports:
- "<< port >>:11011"
restart: unless-stopped

View file

@ -0,0 +1,67 @@
{
"kind": "compose",
"metadata": {
"name": "Cleanuparr",
"description": "Ruimt dode en kwaadaardige torrents op, en downloads waar niemand meer naar verwijst.",
"tags": [
"downloaden",
"onderhoud"
],
"icon": {
"provider": "selfhst",
"id": "cleanuparr"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden",
"beheer"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "cleanuparr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 11011,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "data_root",
"type": "str",
"title": "Gedeelde datamap",
"default": "/mnt/data",
"required": true,
"description": "Eén map met je media én je downloads, gekoppeld als /data",
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -0,0 +1,9 @@
services:
<< service_name >>:
image: ghcr.io/raydak-labs/configarr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>:/app/config
restart: unless-stopped

View file

@ -0,0 +1,51 @@
{
"kind": "compose",
"metadata": {
"name": "Configarr",
"description": "Zelfde idee als Recyclarr, maar met eigen aanpassingen bovenop de TRaSH-gidsen.",
"tags": [
"media",
"configuratie"
],
"icon": {
"provider": "selfhst",
"id": "configarr"
},
"version": {
"name": "latest"
},
"categories": [
"media",
"beheer"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "configarr",
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -0,0 +1,13 @@
services:
<< service_name >>:
image: ghcr.io/cross-seed/cross-seed:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>:/config
- << data_root >>:/data
command: daemon
ports:
- "<< port >>:2468"
restart: unless-stopped

View file

@ -0,0 +1,66 @@
{
"kind": "compose",
"metadata": {
"name": "cross-seed",
"description": "Zoekt dezelfde bestanden bij andere trackers, zodat je één download op meerdere plekken kunt seeden.",
"tags": [
"torrents",
"downloaden"
],
"icon": {
"provider": "selfhst",
"id": "cross-seed"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "crossseed",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Poort",
"default": 2468,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "data_root",
"type": "str",
"title": "Gedeelde datamap",
"default": "/mnt/data",
"required": true,
"description": "Eén map met je media én je downloads, gekoppeld als /data",
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -0,0 +1,14 @@
services:
<< service_name >>:
image: ghcr.io/manimatter/decluttarr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
- SONARR_URL=<< sonarr_url >>
- SONARR_KEY=<< sonarr_apikey >>
- RADARR_URL=<< radarr_url >>
- RADARR_KEY=<< radarr_apikey >>
- LOG_LEVEL=INFO
volumes:
- << appdata_dir >>/<< service_name >>:/config
restart: unless-stopped

View file

@ -0,0 +1,100 @@
{
"kind": "compose",
"metadata": {
"name": "Decluttarr",
"description": "Houdt de downloadwachtrij schoon: gooit weg wat vastloopt of niet meer nodig is.",
"tags": [
"downloaden",
"onderhoud"
],
"icon": {
"provider": "selfhst",
"id": "decluttarr"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden",
"beheer"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "decluttarr",
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Koppelingen",
"items": [
{
"name": "sonarr_url",
"type": "str",
"title": "Sonarr",
"default": "http://sonarr:8989",
"required": false,
"connect": {
"app": "sonarr",
"scheme": "http",
"port": 8989
},
"help": "Adres van Sonarr. Laat leeg als je Sonarr niet gebruikt."
},
{
"name": "sonarr_apikey",
"type": "str",
"title": "Sonarr API-sleutel",
"default": "",
"required": false,
"secret": true,
"description": "Te vinden in Sonarr onder Settings → General"
},
{
"name": "radarr_url",
"type": "str",
"title": "Radarr",
"default": "http://radarr:7878",
"required": false,
"connect": {
"app": "radarr",
"scheme": "http",
"port": 7878
},
"help": "Adres van Radarr. Laat leeg als je Radarr niet gebruikt."
},
{
"name": "radarr_apikey",
"type": "str",
"title": "Radarr API-sleutel",
"default": "",
"required": false,
"secret": true,
"description": "Te vinden in Radarr onder Settings → General"
}
]
}
]
}

View file

@ -0,0 +1,17 @@
services:
<< service_name >>:
image: lscr.io/linuxserver/deluge:latest
container_name: << service_name >>
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>:/config
- << data_root >>:/data
ports:
- "<< port >>:8112"
- "<< port_torrent >>:6881"
- "<< port_torrent >>:6881/udp"
restart: unless-stopped

95
apps/deluge/template.json Normal file
View file

@ -0,0 +1,95 @@
{
"kind": "compose",
"metadata": {
"name": "Deluge",
"description": "Lichte torrentclient met webinterface en een uitgebreid plugin-systeem.",
"tags": [
"torrents",
"downloaden"
],
"icon": {
"provider": "selfhst",
"id": "deluge"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "deluge",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 8113,
"required": true,
"description": "Standaard 8112; hier verplaatst omdat die poort al bezet is"
},
{
"name": "port_torrent",
"type": "int",
"title": "Inkomende poort",
"default": 6882,
"required": true,
"description": "Zet deze poort open in je router voor betere snelheden"
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "data_root",
"type": "str",
"title": "Gedeelde datamap",
"default": "/mnt/data",
"required": true,
"description": "Eén map met je media én je downloads, gekoppeld als /data",
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Gebruiker",
"items": [
{
"name": "puid",
"type": "int",
"title": "Gebruikers-ID (PUID)",
"default": 1000,
"required": true,
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
},
{
"name": "pgid",
"type": "int",
"title": "Groeps-ID (PGID)",
"default": 1000,
"required": true
}
]
}
]
}

View file

@ -9,7 +9,7 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
- << source_dir >>:/source:ro - << source_dir >>:/source:ro
- << backup_dir >>:/backups - << backup_dir >>:/backups
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -7,6 +7,6 @@ services:
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,15 @@
services:
<< service_name >>:
image: ghcr.io/onedr0p/exportarr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
- URL=<< arr_url >>
- APIKEY=<< arr_apikey >>
- PORT=<< port >>
volumes:
- << appdata_dir >>/<< service_name >>:/config
command: << arr_soort >>
ports:
- "<< port >>:9707"
restart: unless-stopped

View file

@ -0,0 +1,101 @@
{
"kind": "compose",
"metadata": {
"name": "Exportarr",
"description": "Zet de cijfers van één *arr-app om in Prometheus-metrics, zodat je er in Grafana naar kunt kijken.",
"tags": [
"monitoring",
"metrics"
],
"icon": {
"provider": "selfhst",
"id": "prometheus"
},
"version": {
"name": "latest"
},
"categories": [
"monitoring"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "exportarr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Metrics-poort",
"default": 9707,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Welke app meten we?",
"items": [
{
"name": "arr_soort",
"type": "enum",
"title": "Soort",
"default": "sonarr",
"required": true,
"config": {
"options": [
"sonarr",
"radarr",
"lidarr",
"readarr",
"prowlarr"
]
},
"description": "Eén Exportarr meet één app; draai er meerdere voor meerdere apps"
},
{
"name": "arr_url",
"type": "str",
"title": "Adres van die app",
"default": "http://sonarr:8989",
"required": true,
"connect": {
"app": "sonarr",
"scheme": "http",
"port": 8989
},
"help": "Het adres waarop Exportarr de *arr-app kan bereiken."
},
{
"name": "arr_apikey",
"type": "str",
"title": "API-sleutel",
"default": "",
"required": true,
"secret": true,
"description": "Te vinden in de app onder Settings → General"
}
]
}
]
}

View file

@ -6,6 +6,6 @@ services:
- "<< port >>:80" - "<< port >>:80"
volumes: volumes:
- << files_dir >>:/srv - << files_dir >>:/srv
- << data_dir >>/<< service_name >>/filebrowser.db:/database/filebrowser.db - << appdata_dir >>/<< service_name >>/filebrowser.db:/database/filebrowser.db
- << data_dir >>/<< service_name >>/.filebrowser.json:/.filebrowser.json - << appdata_dir >>/<< service_name >>/.filebrowser.json:/.filebrowser.json
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true, "required": true,
"description": "Map voor configuratie en database" "description": "Map voor configuratie en database"

View file

@ -14,7 +14,7 @@ services:
- DB_USERNAME=firefly - DB_USERNAME=firefly
- DB_PASSWORD=<< db_password >> - DB_PASSWORD=<< db_password >>
volumes: volumes:
- << data_dir >>/<< service_name >>/upload:/var/www/html/storage/upload - << appdata_dir >>/<< service_name >>/upload:/var/www/html/storage/upload
depends_on: depends_on:
- << service_name >>-db - << service_name >>-db
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,12 @@
services:
<< service_name >>:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
- LOG_LEVEL=info
volumes:
- << appdata_dir >>/<< service_name >>:/config
ports:
- "<< port >>:8191"
restart: unless-stopped

View file

@ -0,0 +1,58 @@
{
"kind": "compose",
"metadata": {
"name": "FlareSolverr",
"description": "Haalt pagina's op die achter een Cloudflare-controle zitten, zodat je indexers er alsnog bij kunnen.",
"tags": [
"indexers",
"downloaden",
"proxy"
],
"icon": {
"provider": "selfhst",
"id": "flaresolverr"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "flaresolverr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Poort",
"default": 8191,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -7,5 +7,5 @@ services:
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>:/opt/focalboard/data - << appdata_dir >>/<< service_name >>:/opt/focalboard/data
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -11,7 +11,7 @@ services:
- FORGEJO__server__SSH_PORT=<< port_ssh >> - FORGEJO__server__SSH_PORT=<< port_ssh >>
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/data - << appdata_dir >>/<< service_name >>/data:/data
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
restart: unless-stopped restart: unless-stopped

View file

@ -32,9 +32,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -8,6 +8,6 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
- CRON_MIN=*/20 - CRON_MIN=*/20
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/var/www/FreshRSS/data - << appdata_dir >>/<< service_name >>/data:/var/www/FreshRSS/data
- << data_dir >>/<< service_name >>/extensions:/var/www/FreshRSS/extensions - << appdata_dir >>/<< service_name >>/extensions:/var/www/FreshRSS/extensions
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -9,8 +9,8 @@ services:
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
- << data_dir >>/<< service_name >>/media:/media/frigate - << appdata_dir >>/<< service_name >>/media:/media/frigate
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
# Opnamebuffer in geheugen; voorkomt slijtage van je SSD # Opnamebuffer in geheugen; voorkomt slijtage van je SSD
- type: tmpfs - type: tmpfs

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -24,7 +24,7 @@ services:
- database__connection__password=<< db_password >> - database__connection__password=<< db_password >>
- database__connection__database=ghost - database__connection__database=ghost
volumes: volumes:
- << data_dir >>/<< service_name >>/content:/var/lib/ghost/content - << appdata_dir >>/<< service_name >>/content:/var/lib/ghost/content
depends_on: depends_on:
- << service_name >>-db - << service_name >>-db
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -0,0 +1,20 @@
services:
<< service_name >>:
image: qmcgaw/gluetun:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
- VPN_SERVICE_PROVIDER=<< vpn_provider >>
- VPN_TYPE=<< vpn_type >>
- SERVER_COUNTRIES=<< vpn_landen >>
- WIREGUARD_PRIVATE_KEY=<< wireguard_private_key >>
- WIREGUARD_ADDRESSES=<< wireguard_addresses >>
- OPENVPN_USER=<< openvpn_user >>
- OPENVPN_PASSWORD=<< openvpn_password >>
volumes:
- << appdata_dir >>/<< service_name >>:/gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
restart: unless-stopped

146
apps/gluetun/template.json Normal file
View file

@ -0,0 +1,146 @@
{
"kind": "compose",
"metadata": {
"name": "Gluetun",
"description": "VPN-container waar je andere containers doorheen laat lopen. Zet je downloadclient erachter met `network_mode: service:gluetun`.",
"tags": [
"vpn",
"netwerk",
"privacy"
],
"icon": {
"provider": "selfhst",
"id": "gluetun"
},
"version": {
"name": "latest"
},
"categories": [
"netwerk",
"beveiliging"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "gluetun",
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "VPN",
"items": [
{
"name": "vpn_provider",
"type": "str",
"title": "VPN-aanbieder",
"default": "mullvad",
"required": true,
"description": "Bijvoorbeeld mullvad, nordvpn, protonvpn, airvpn of surfshark"
},
{
"name": "vpn_type",
"type": "enum",
"title": "Protocol",
"default": "wireguard",
"required": true,
"config": {
"options": [
"wireguard",
"openvpn"
]
}
},
{
"name": "vpn_landen",
"type": "str",
"title": "Landen",
"default": "Netherlands",
"required": false,
"description": "Komma-gescheiden; leeg laten kiest willekeurig"
},
{
"name": "wireguard_private_key",
"type": "str",
"title": "WireGuard privésleutel",
"default": "",
"required": false,
"secret": true,
"needs": [
{
"name": "vpn_type",
"value": "wireguard"
}
],
"config": {
"placeholder": "alleen bij wireguard"
}
},
{
"name": "wireguard_addresses",
"type": "str",
"title": "WireGuard adressen",
"default": "",
"required": false,
"needs": [
{
"name": "vpn_type",
"value": "wireguard"
}
],
"config": {
"placeholder": "10.64.0.2/32"
}
},
{
"name": "openvpn_user",
"type": "str",
"title": "OpenVPN gebruiker",
"default": "",
"required": false,
"needs": [
{
"name": "vpn_type",
"value": "openvpn"
}
]
},
{
"name": "openvpn_password",
"type": "str",
"title": "OpenVPN wachtwoord",
"default": "",
"required": false,
"secret": true,
"needs": [
{
"name": "vpn_type",
"value": "openvpn"
}
]
}
]
}
]
}

View file

@ -7,5 +7,5 @@ services:
environment: environment:
- GOTIFY_DEFAULTUSER_PASS=<< default_password >> - GOTIFY_DEFAULTUSER_PASS=<< default_password >>
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/app/data - << appdata_dir >>/<< service_name >>/data:/app/data
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -8,5 +8,5 @@ services:
- GF_SECURITY_ADMIN_USER=<< admin_user >> - GF_SECURITY_ADMIN_USER=<< admin_user >>
- GF_SECURITY_ADMIN_PASSWORD=<< admin_password >> - GF_SECURITY_ADMIN_PASSWORD=<< admin_password >>
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/var/lib/grafana - << appdata_dir >>/<< service_name >>/data:/var/lib/grafana
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -9,5 +9,5 @@ services:
- PUID=<< puid >> - PUID=<< puid >>
- PGID=<< pgid >> - PGID=<< pgid >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -11,7 +11,7 @@ services:
- CMD_URL_ADDPORT=false - CMD_URL_ADDPORT=false
- CMD_ALLOW_ANONYMOUS=false - CMD_ALLOW_ANONYMOUS=false
volumes: volumes:
- << data_dir >>/<< service_name >>/uploads:/hedgedoc/public/uploads - << appdata_dir >>/<< service_name >>/uploads:/hedgedoc/public/uploads
depends_on: depends_on:
- << service_name >>-db - << service_name >>-db
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,12 @@
services:
<< service_name >>:
image: ghcr.io/homarr-labs/homarr:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
- SECRET_ENCRYPTION_KEY=<< homarr_encryption_key >>
volumes:
- << appdata_dir >>/<< service_name >>:/appdata
ports:
- "<< port >>:7575"
restart: unless-stopped

72
apps/homarr/template.json Normal file
View file

@ -0,0 +1,72 @@
{
"kind": "compose",
"metadata": {
"name": "Homarr",
"description": "Startpagina die je *arr-apps, downloadclients en mediaserver op één scherm laat zien, met live cijfers per app.",
"tags": [
"dashboard",
"overzicht"
],
"icon": {
"provider": "selfhst",
"id": "homarr"
},
"version": {
"name": "latest"
},
"categories": [
"beheer"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "homarr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 7575,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Toegang",
"items": [
{
"name": "homarr_encryption_key",
"type": "str",
"title": "Versleutelingssleutel",
"default": "",
"required": true,
"secret": true,
"generate": "auto",
"description": "64 tekens; versleutelt de opgeslagen API-sleutels van je apps"
}
]
}
]
}

View file

@ -7,5 +7,5 @@ services:
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -12,5 +12,5 @@ services:
- PORT=3000 - PORT=3000
- NODE_ENV=production - NODE_ENV=production
volumes: volumes:
- << data_dir >>/<< service_name >>:/app/data - << appdata_dir >>/<< service_name >>:/app/data
restart: unless-stopped restart: unless-stopped

View file

@ -42,9 +42,9 @@
"description": "Poort waarop de MCP-server bereikbaar is" "description": "Poort waarop de MCP-server bereikbaar is"
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
} }

View file

@ -9,5 +9,5 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
- HOMEBRIDGE_CONFIG_UI_PORT=<< port >> - HOMEBRIDGE_CONFIG_UI_PORT=<< port >>
volumes: volumes:
- << data_dir >>/<< service_name >>:/homebridge - << appdata_dir >>/<< service_name >>:/homebridge
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -8,7 +8,7 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
- HOMEPAGE_ALLOWED_HOSTS=<< allowed_hosts >> - HOMEPAGE_ALLOWED_HOSTS=<< allowed_hosts >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/app/config - << appdata_dir >>/<< service_name >>/config:/app/config
# Alleen-lezen socket voor de Docker-widget die containers toont # Alleen-lezen socket voor de Docker-widget die containers toont
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -12,7 +12,7 @@ services:
- REDIS_HOSTNAME=<< service_name >>-redis - REDIS_HOSTNAME=<< service_name >>-redis
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/upload:/usr/src/app/upload - << appdata_dir >>/<< service_name >>/upload:/usr/src/app/upload
depends_on: depends_on:
- << service_name >>-redis - << service_name >>-redis
- << service_name >>-postgres - << service_name >>-postgres

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Upload directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true, "required": true,
"description": "Basismap voor foto-uploads en database", "description": "Basismap voor foto-uploads en database",

View file

@ -12,6 +12,6 @@ services:
- DOCKER_INFLUXDB_INIT_ORG=<< org >> - DOCKER_INFLUXDB_INIT_ORG=<< org >>
- DOCKER_INFLUXDB_INIT_BUCKET=<< bucket >> - DOCKER_INFLUXDB_INIT_BUCKET=<< bucket >>
volumes: volumes:
- << data_dir >>/<< service_name >>/data:/var/lib/influxdb2 - << appdata_dir >>/<< service_name >>/data:/var/lib/influxdb2
- << data_dir >>/<< service_name >>/config:/etc/influxdb2 - << appdata_dir >>/<< service_name >>/config:/etc/influxdb2
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,14 @@
services:
<< service_name >>:
image: lscr.io/linuxserver/jackett:latest
container_name: << service_name >>
environment:
- PUID=<< puid >>
- PGID=<< pgid >>
- TZ=<< timezone >>
- UMASK=002
volumes:
- << appdata_dir >>/<< service_name >>:/config
ports:
- "<< port >>:9117"
restart: unless-stopped

View file

@ -0,0 +1,78 @@
{
"kind": "compose",
"metadata": {
"name": "Jackett",
"description": "Vertaalt trackers naar één API voor je *arr-apps. Ouder alternatief voor Prowlarr; meestal heb je er maar één nodig.",
"tags": [
"media",
"indexers",
"downloaden"
],
"icon": {
"provider": "selfhst",
"id": "jackett"
},
"version": {
"name": "latest"
},
"categories": [
"downloaden"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "jackett",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 9117,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Gebruiker",
"items": [
{
"name": "puid",
"type": "int",
"title": "Gebruikers-ID (PUID)",
"default": 1000,
"required": true,
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
},
{
"name": "pgid",
"type": "int",
"title": "Groeps-ID (PGID)",
"default": 1000,
"required": true
}
]
}
]
}

View file

@ -0,0 +1,12 @@
services:
<< service_name >>:
image: ghcr.io/schaka/janitorr:native-stable
container_name: << service_name >>
environment:
- TZ=<< timezone >>
volumes:
- << appdata_dir >>/<< service_name >>:/config
- << data_root >>:/data
ports:
- "<< port >>:8978"
restart: unless-stopped

View file

@ -0,0 +1,68 @@
{
"kind": "compose",
"metadata": {
"name": "Janitorr",
"description": "Ruimt oude media op voordat je schijf volloopt, met regels per bibliotheek.",
"tags": [
"media",
"opruimen",
"opslag"
],
"icon": {
"provider": "selfhst",
"id": "janitorr"
},
"version": {
"name": "latest"
},
"categories": [
"media",
"opslag"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "janitorr",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 8978,
"required": true
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "data_root",
"type": "str",
"title": "Gedeelde datamap",
"default": "/mnt/data",
"required": true,
"description": "Eén map met je media én je downloads, gekoppeld als /data",
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
}
]
}

View file

@ -7,7 +7,9 @@ services:
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << appdata_dir >>/<< service_name >>/config:/config
- << data_dir >>/<< service_name >>/cache:/cache - << appdata_dir >>/<< service_name >>/cache:/cache
- << media_dir >>:/media:ro # Alleen de bibliotheek, alleen-lezen: een mediaserver hoeft niet bij je
# downloads te kunnen en hoeft er zeker niets in te schrijven.
- << data_root >>/media:/data/media:ro
restart: unless-stopped restart: unless-stopped

View file

@ -39,9 +39,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true, "required": true,
"description": "Basismap voor configuratie en cache" "description": "Basismap voor configuratie en cache"
@ -59,12 +59,13 @@
"title": "Media", "title": "Media",
"items": [ "items": [
{ {
"name": "media_dir", "name": "data_root",
"type": "str", "type": "str",
"title": "Media directory", "title": "Gedeelde datamap",
"default": "/mnt/media", "default": "/mnt/data",
"required": true, "required": true,
"description": "Map met je films, series en muziek (wordt read-only gemount)" "description": "Je media staat onder /data/media en wordt alleen-lezen gekoppeld",
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
} }
] ]
} }

View file

@ -8,5 +8,5 @@ services:
- TZ=<< timezone >> - TZ=<< timezone >>
- LOG_LEVEL=info - LOG_LEVEL=info
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/app/config - << appdata_dir >>/<< service_name >>/config:/app/config
restart: unless-stopped restart: unless-stopped

View file

@ -38,9 +38,9 @@
"required": true "required": true
}, },
{ {
"name": "data_dir", "name": "appdata_dir",
"type": "str", "type": "str",
"title": "Data directory", "title": "Appdata-map",
"default": "/opt/serverup/appdata", "default": "/opt/serverup/appdata",
"required": true "required": true
}, },

View file

@ -0,0 +1,28 @@
services:
<< service_name >>:
image: cyfershepard/jellystat:latest
container_name: << service_name >>
environment:
- TZ=<< timezone >>
- POSTGRES_USER=jellystat
- POSTGRES_PASSWORD=<< db_password >>
- POSTGRES_IP=<< service_name >>-db
- POSTGRES_PORT=5432
- JWT_SECRET=<< jwt_secret >>
volumes:
- << appdata_dir >>/<< service_name >>:/app/backend/backup-data
ports:
- "<< port >>:3000"
depends_on:
- << service_name >>-db
restart: unless-stopped
<< service_name >>-db:
image: postgres:16-alpine
container_name: << service_name >>-db
environment:
- POSTGRES_USER=jellystat
- POSTGRES_PASSWORD=<< db_password >>
- POSTGRES_DB=jfstat
volumes:
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
restart: unless-stopped

View file

@ -0,0 +1,84 @@
{
"kind": "compose",
"metadata": {
"name": "Jellystat",
"description": "Kijkstatistieken voor Jellyfin: wie keek wat, hoe lang en hoe vaak. Brengt zijn eigen database mee.",
"tags": [
"media",
"statistiek",
"monitoring"
],
"icon": {
"provider": "selfhst",
"id": "jellystat"
},
"version": {
"name": "latest"
},
"categories": [
"media",
"monitoring"
]
},
"variables": [
{
"title": "Algemeen",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Servicenaam",
"default": "jellystat",
"required": true
},
{
"name": "port",
"type": "int",
"title": "Webinterface",
"default": 8118,
"required": true,
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
},
{
"name": "appdata_dir",
"type": "str",
"title": "Appdata-map",
"default": "/opt/serverup/appdata",
"required": true,
"description": "Basismap voor de instellingen van deze app"
},
{
"name": "timezone",
"type": "str",
"title": "Tijdzone",
"default": "Europe/Amsterdam",
"required": true
}
]
},
{
"title": "Database",
"items": [
{
"name": "db_password",
"type": "str",
"title": "Databasewachtwoord",
"default": "",
"required": true,
"secret": true,
"generate": "auto"
},
{
"name": "jwt_secret",
"type": "str",
"title": "JWT-sleutel",
"default": "",
"required": true,
"secret": true,
"generate": "auto",
"description": "Ondertekent de inlogsessies"
}
]
}
]
}

Some files were not shown because too many files have changed in this diff Show more