From 6b1e9c8faf9562d70717eac2538c9345ece7d882 Mon Sep 17 00:00:00 2001 From: bes-r Date: Tue, 26 May 2026 22:51:46 +0200 Subject: [PATCH 1/8] ci: dev/prod workflow splitsing --- .forgejo/workflows/deploy-prod.yml | 93 ++++++++++++++++++++++++++++++ .forgejo/workflows/deploy.yml | 11 ++-- 2 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 .forgejo/workflows/deploy-prod.yml diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml new file mode 100644 index 0000000..8ac5a12 --- /dev/null +++ b/.forgejo/workflows/deploy-prod.yml @@ -0,0 +1,93 @@ +name: Deploy server-up (prod) + +on: + push: + branches: [main] + tags: ['v*'] + workflow_dispatch: + +concurrency: + group: server-up-deploy-prod + cancel-in-progress: false + +jobs: + deploy: + runs-on: [self-hosted, prod] + timeout-minutes: 20 + + env: + DEPLOY_DIR: /opt/server-up + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Bepaal versie + id: version + run: | + set -euo pipefail + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION="${GITHUB_REF_NAME}" + CHANNEL="release" + else + VERSION="main-${GITHUB_SHA:0:8}" + CHANNEL="main" + fi + echo "VERSION=${VERSION}" >> "$GITHUB_ENV" + echo "CHANNEL=${CHANNEL}" >> "$GITHUB_ENV" + echo "SU_VERSION=${VERSION}" >> "$GITHUB_ENV" + echo "Deploying version: ${VERSION} (${CHANNEL})" + + - name: Sync code naar deploy-directory + run: | + set -euo pipefail + rsync -a --delete \ + --exclude='.git/' \ + --exclude='.forgejo/' \ + ./ "$DEPLOY_DIR/" + + - name: Schrijf VERSION-bestand + working-directory: ${{ env.DEPLOY_DIR }} + run: echo "${VERSION}" > VERSION + + - name: Build image + working-directory: ${{ env.DEPLOY_DIR }} + run: | + docker compose build --pull + docker tag "server-up:${VERSION}" server-up:latest + docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" + + - name: Deploy + working-directory: ${{ env.DEPLOY_DIR }} + run: | + set -euo pipefail + docker compose up -d --remove-orphans + docker compose ps + + - name: Wachten op healthcheck + run: | + set -euo pipefail + for i in {1..40}; do + status=$(docker inspect --format '{{.State.Health.Status}}' server-up 2>/dev/null || echo "starting") + echo "poll $i: $status" + if [ "$status" = "healthy" ]; then + echo "server-up is healthy als versie ${VERSION}" + exit 0 + fi + sleep 3 + done + echo "server-up werd niet healthy in tijd — logs:" + cd "$DEPLOY_DIR" && docker compose logs --tail=200 + exit 1 + + - name: Oude images opruimen (behoud laatste 5) + if: success() + run: | + docker images server-up --format '{{.Tag}} {{.ID}}' \ + | grep -vE '^(latest|release|main) ' \ + | tail -n +6 \ + | awk '{print $2}' \ + | xargs -r docker rmi -f || true + docker image prune -f diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index bbd3b07..4f1c0ff 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -1,18 +1,17 @@ -name: Deploy server-up +name: Deploy server-up (dev) on: push: - branches: [main] - tags: ['v*'] + branches: [dev] workflow_dispatch: concurrency: - group: server-up-deploy + group: server-up-deploy-dev cancel-in-progress: false jobs: deploy: - runs-on: self-hosted + runs-on: [self-hosted, dev] timeout-minutes: 20 env: @@ -37,6 +36,8 @@ jobs: fi echo "VERSION=${VERSION}" >> "$GITHUB_ENV" echo "CHANNEL=${CHANNEL}" >> "$GITHUB_ENV" + # SU_VERSION wordt door docker compose gebruikt als build-arg + echo "SU_VERSION=${VERSION}" >> "$GITHUB_ENV" echo "Deploying version: ${VERSION} (${CHANNEL})" - name: Sync code naar deploy-directory From 590760813d6aec4c23300711afba048f52b94840 Mon Sep 17 00:00:00 2001 From: bes-r Date: Tue, 26 May 2026 23:24:28 +0200 Subject: [PATCH 2/8] fix: DEPLOY_DIR naar /opt/docker/server-up --- .forgejo/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 4f1c0ff..69ea530 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -15,7 +15,7 @@ jobs: timeout-minutes: 20 env: - DEPLOY_DIR: /opt/server-up + DEPLOY_DIR: /opt/docker/server-up steps: - name: Checkout From 0da06d1d06209ff5ea082b00d038c8ea5ea80fe5 Mon Sep 17 00:00:00 2001 From: bes-r Date: Tue, 26 May 2026 23:27:37 +0200 Subject: [PATCH 3/8] ci: retrigger na node installatie From 955f8d1a9153e8eb9e64dd6062b4d63773472176 Mon Sep 17 00:00:00 2001 From: bes-r Date: Tue, 26 May 2026 23:29:30 +0200 Subject: [PATCH 4/8] ci: retrigger na rsync installatie From 0f3bf8527fd5523207be8ad268b172c1e775f284 Mon Sep 17 00:00:00 2001 From: bes-r Date: Tue, 26 May 2026 23:30:57 +0200 Subject: [PATCH 5/8] fix: rsync --no-group + chown op server gedaan --- .forgejo/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 69ea530..7950f49 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -43,7 +43,7 @@ jobs: - name: Sync code naar deploy-directory run: | set -euo pipefail - rsync -a --delete \ + rsync -a --no-group --delete \ --exclude='.git/' \ --exclude='.forgejo/' \ ./ "$DEPLOY_DIR/" From 99128a5fd9dc05b70bfe49808938f80f1f8d9d64 Mon Sep 17 00:00:00 2001 From: bes-r Date: Tue, 26 May 2026 23:36:13 +0200 Subject: [PATCH 6/8] fix: docker tag van latest naar versie, niet andersom --- .forgejo/workflows/deploy-prod.yml | 5 +++-- .forgejo/workflows/deploy.yml | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index 8ac5a12..77724ef 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -56,8 +56,9 @@ jobs: working-directory: ${{ env.DEPLOY_DIR }} run: | docker compose build --pull - docker tag "server-up:${VERSION}" server-up:latest - docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" + # docker compose bouwt als server-up:latest; voeg versie- en channel-tags toe + docker tag server-up:latest "server-up:${VERSION}" + docker tag server-up:latest "server-up:${CHANNEL}" - name: Deploy working-directory: ${{ env.DEPLOY_DIR }} diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 7950f49..2095f76 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -56,9 +56,9 @@ jobs: working-directory: ${{ env.DEPLOY_DIR }} run: | docker compose build --pull - # Extra tags zodat 'latest' altijd op de laatste deploy wijst - docker tag "server-up:${VERSION}" server-up:latest - docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" + # docker compose bouwt als server-up:latest; voeg versie- en channel-tags toe + docker tag server-up:latest "server-up:${VERSION}" + docker tag server-up:latest "server-up:${CHANNEL}" - name: Deploy working-directory: ${{ env.DEPLOY_DIR }} From 31aa2a343040c0f7b5d050bcda523cd324146e92 Mon Sep 17 00:00:00 2001 From: bes-r Date: Wed, 27 May 2026 00:01:28 +0200 Subject: [PATCH 7/8] 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"} + } + ] + } + ] +} From e5effe4089d5855ca905e7dd75071e91a4e6ef68 Mon Sep 17 00:00:00 2001 From: bes-r Date: Wed, 27 May 2026 00:08:55 +0200 Subject: [PATCH 8/8] feat: nieuwe boilerplates + hardcoded waarden variabel gemaakt --- apps/forgejo/files/compose.yaml | 4 ++-- apps/forgejo/template.json | 21 +++++++++++++++++++++ apps/plex/files/compose.yaml | 4 ++-- apps/plex/template.json | 21 +++++++++++++++++++++ apps/speedtest-tracker/files/compose.yaml | 4 ++-- apps/speedtest-tracker/template.json | 21 +++++++++++++++++++++ apps/syncthing/files/compose.yaml | 4 ++-- apps/syncthing/template.json | 21 +++++++++++++++++++++ apps/unifi-network/files/compose.yaml | 4 ++-- apps/unifi-network/template.json | 16 ++++++++++++++++ 10 files changed, 110 insertions(+), 10 deletions(-) diff --git a/apps/forgejo/files/compose.yaml b/apps/forgejo/files/compose.yaml index 643e5be..f19ac12 100644 --- a/apps/forgejo/files/compose.yaml +++ b/apps/forgejo/files/compose.yaml @@ -6,8 +6,8 @@ services: - "<< port_web >>:3000" - "<< port_ssh >>:22" environment: - - USER_UID=1000 - - USER_GID=1000 + - USER_UID=<< puid >> + - USER_GID=<< pgid >> - FORGEJO__server__SSH_PORT=<< port_ssh >> - TZ=<< timezone >> volumes: diff --git a/apps/forgejo/template.json b/apps/forgejo/template.json index 5e1dd23..9d97cc1 100644 --- a/apps/forgejo/template.json +++ b/apps/forgejo/template.json @@ -34,6 +34,27 @@ } ] }, + { + "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": [ diff --git a/apps/plex/files/compose.yaml b/apps/plex/files/compose.yaml index e3b377e..37afbd8 100644 --- a/apps/plex/files/compose.yaml +++ b/apps/plex/files/compose.yaml @@ -6,8 +6,8 @@ services: - "<< port >>:32400" environment: - TZ=<< timezone >> - - PUID=1000 - - PGID=1000 + - PUID=<< puid >> + - PGID=<< pgid >> <% if plex_claim %> - PLEX_CLAIM=<< plex_claim >> <% endif %> diff --git a/apps/plex/template.json b/apps/plex/template.json index 6a2ab02..558ea25 100644 --- a/apps/plex/template.json +++ b/apps/plex/template.json @@ -42,6 +42,27 @@ } ] }, + { + "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": "Media", "items": [ diff --git a/apps/speedtest-tracker/files/compose.yaml b/apps/speedtest-tracker/files/compose.yaml index 0b55822..3f0aa8f 100644 --- a/apps/speedtest-tracker/files/compose.yaml +++ b/apps/speedtest-tracker/files/compose.yaml @@ -6,8 +6,8 @@ services: - "<< port >>:80" environment: - TZ=<< timezone >> - - PUID=1000 - - PGID=1000 + - PUID=<< puid >> + - PGID=<< pgid >> - APP_KEY=<< app_key >> - DB_CONNECTION=sqlite volumes: diff --git a/apps/speedtest-tracker/template.json b/apps/speedtest-tracker/template.json index 217f564..cedc133 100644 --- a/apps/speedtest-tracker/template.json +++ b/apps/speedtest-tracker/template.json @@ -41,6 +41,27 @@ } ] }, + { + "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": "Beveiliging", "items": [ diff --git a/apps/syncthing/files/compose.yaml b/apps/syncthing/files/compose.yaml index bdb3cde..58e89c2 100644 --- a/apps/syncthing/files/compose.yaml +++ b/apps/syncthing/files/compose.yaml @@ -8,8 +8,8 @@ services: - "<< sync_port >>:22000/udp" environment: - TZ=<< timezone >> - - PUID=1000 - - PGID=1000 + - PUID=<< puid >> + - PGID=<< pgid >> volumes: - << data_dir >>/<< service_name >>/config:/config - << sync_dir >>:/data diff --git a/apps/syncthing/template.json b/apps/syncthing/template.json index 12ad339..de4acf9 100644 --- a/apps/syncthing/template.json +++ b/apps/syncthing/template.json @@ -57,6 +57,27 @@ "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 index fc7673d..174bb2a 100644 --- a/apps/unifi-network/files/compose.yaml +++ b/apps/unifi-network/files/compose.yaml @@ -16,8 +16,8 @@ services: ports: - "<< port_ui >>:8443" - "<< port_inform >>:8080" - - "3478:3478/udp" - - "10001:10001/udp" + - "<< port_stun >>:3478/udp" + - "<< port_discovery >>:10001/udp" depends_on: - << service_name >>-mongo restart: unless-stopped diff --git a/apps/unifi-network/template.json b/apps/unifi-network/template.json index 4d585ee..bca8882 100644 --- a/apps/unifi-network/template.json +++ b/apps/unifi-network/template.json @@ -34,6 +34,22 @@ "required": true, "description": "Poort waarop Unifi-apparaten inchecken. Moet bereikbaar zijn voor alle access points en switches." }, + { + "name": "port_stun", + "type": "int", + "title": "STUN poort (UDP)", + "default": 3478, + "required": true, + "description": "Gebruikt voor NAT traversal. Vereist voor correct functioneren van Unifi-apparaten." + }, + { + "name": "port_discovery", + "type": "int", + "title": "Discovery poort (UDP)", + "default": 10001, + "required": true, + "description": "Gebruikt om Unifi-apparaten op het lokale netwerk automatisch te ontdekken." + }, { "name": "data_dir", "type": "str",