Compare commits

...

9 commits

Author SHA1 Message Date
bes-r
5c174cecbc Merge branch 'dev'
Some checks failed
Deploy server-up (prod) / deploy (push) Has been cancelled
2026-05-27 00:31:01 +02:00
bes-r
e5effe4089 feat: nieuwe boilerplates + hardcoded waarden variabel gemaakt
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 8s
2026-05-27 00:08:55 +02:00
bes-r
31aa2a3430 feat: boilerplates voor Unifi, ARR-stack, qBittorrent en SABnzbd
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 14s
2026-05-27 00:01:28 +02:00
bes-r
99128a5fd9 fix: docker tag van latest naar versie, niet andersom
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 21s
2026-05-26 23:36:13 +02:00
bes-r
0f3bf8527f fix: rsync --no-group + chown op server gedaan 2026-05-26 23:30:57 +02:00
bes-r
955f8d1a91 ci: retrigger na rsync installatie
Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 2s
2026-05-26 23:29:30 +02:00
bes-r
0da06d1d06 ci: retrigger na node installatie
Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 6s
2026-05-26 23:27:37 +02:00
bes-r
590760813d fix: DEPLOY_DIR naar /opt/docker/server-up
Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 1s
2026-05-26 23:24:28 +02:00
bes-r
6b1e9c8faf ci: dev/prod workflow splitsing
Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 0s
2026-05-26 22:51:46 +02:00
18 changed files with 760 additions and 18 deletions

View file

@ -0,0 +1,94 @@
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 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 }}
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

View file

@ -1,22 +1,21 @@
name: Deploy server-up name: Deploy server-up (dev)
on: on:
push: push:
branches: [main] branches: [dev]
tags: ['v*']
workflow_dispatch: workflow_dispatch:
concurrency: concurrency:
group: server-up-deploy group: server-up-deploy-dev
cancel-in-progress: false cancel-in-progress: false
jobs: jobs:
deploy: deploy:
runs-on: self-hosted runs-on: [self-hosted, dev]
timeout-minutes: 20 timeout-minutes: 20
env: env:
DEPLOY_DIR: /opt/server-up DEPLOY_DIR: /opt/docker/server-up
steps: steps:
- name: Checkout - name: Checkout
@ -37,12 +36,14 @@ jobs:
fi fi
echo "VERSION=${VERSION}" >> "$GITHUB_ENV" echo "VERSION=${VERSION}" >> "$GITHUB_ENV"
echo "CHANNEL=${CHANNEL}" >> "$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})" echo "Deploying version: ${VERSION} (${CHANNEL})"
- name: Sync code naar deploy-directory - name: Sync code naar deploy-directory
run: | run: |
set -euo pipefail set -euo pipefail
rsync -a --delete \ rsync -a --no-group --delete \
--exclude='.git/' \ --exclude='.git/' \
--exclude='.forgejo/' \ --exclude='.forgejo/' \
./ "$DEPLOY_DIR/" ./ "$DEPLOY_DIR/"
@ -55,9 +56,9 @@ jobs:
working-directory: ${{ env.DEPLOY_DIR }} working-directory: ${{ env.DEPLOY_DIR }}
run: | run: |
docker compose build --pull docker compose build --pull
# Extra tags zodat 'latest' altijd op de laatste deploy wijst # docker compose bouwt als server-up:latest; voeg versie- en channel-tags toe
docker tag "server-up:${VERSION}" server-up:latest docker tag server-up:latest "server-up:${VERSION}"
docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" docker tag server-up:latest "server-up:${CHANNEL}"
- name: Deploy - name: Deploy
working-directory: ${{ env.DEPLOY_DIR }} working-directory: ${{ env.DEPLOY_DIR }}

View file

@ -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

View file

@ -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"
}
]
}
]
}

View file

@ -6,8 +6,8 @@ services:
- "<< port_web >>:3000" - "<< port_web >>:3000"
- "<< port_ssh >>:22" - "<< port_ssh >>:22"
environment: environment:
- USER_UID=1000 - USER_UID=<< puid >>
- USER_GID=1000 - USER_GID=<< pgid >>
- FORGEJO__server__SSH_PORT=<< port_ssh >> - FORGEJO__server__SSH_PORT=<< port_ssh >>
- TZ=<< timezone >> - TZ=<< timezone >>
volumes: volumes:

View file

@ -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", "title": "Poorten",
"items": [ "items": [

View file

@ -6,8 +6,8 @@ services:
- "<< port >>:32400" - "<< port >>:32400"
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
- PUID=1000 - PUID=<< puid >>
- PGID=1000 - PGID=<< pgid >>
<% if plex_claim %> <% if plex_claim %>
- PLEX_CLAIM=<< plex_claim >> - PLEX_CLAIM=<< plex_claim >>
<% endif %> <% endif %>

View file

@ -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", "title": "Media",
"items": [ "items": [

View file

@ -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

View file

@ -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)"
}
]
}
]
}

View file

@ -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

View file

@ -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)"
}
]
}
]
}

View file

@ -6,8 +6,8 @@ services:
- "<< port >>:80" - "<< port >>:80"
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
- PUID=1000 - PUID=<< puid >>
- PGID=1000 - PGID=<< pgid >>
- APP_KEY=<< app_key >> - APP_KEY=<< app_key >>
- DB_CONNECTION=sqlite - DB_CONNECTION=sqlite
volumes: volumes:

View file

@ -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", "title": "Beveiliging",
"items": [ "items": [

View file

@ -8,8 +8,8 @@ services:
- "<< sync_port >>:22000/udp" - "<< sync_port >>:22000/udp"
environment: environment:
- TZ=<< timezone >> - TZ=<< timezone >>
- PUID=1000 - PUID=<< puid >>
- PGID=1000 - PGID=<< pgid >>
volumes: volumes:
- << data_dir >>/<< service_name >>/config:/config - << data_dir >>/<< service_name >>/config:/config
- << sync_dir >>:/data - << sync_dir >>:/data

View file

@ -57,6 +57,27 @@
"required": true "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)"
}
]
} }
] ]
} }

View file

@ -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"
- "<< port_stun >>:3478/udp"
- "<< port_discovery >>: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:

View file

@ -0,0 +1,106 @@
{
"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": "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",
"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"}
}
]
}
]
}