Dockermanager om dockerapplicaties te downloaden en beheren vanaf een Git met eventuele boilerplates.
Find a file
Ramon 952e7ddb7a
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m27s
v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren
Aanleiding: Homepage weigerde met "Host validation failed" omdat de
standaardwaarde van allowed_hosts poort 3001 noemde terwijl het poortveld op
3002 stond. Alle 96 sjablonen zijn daarop nagelopen.

Systemisch:
- De dobbelsteenknop, waar zeventien apps in hun uitleg naar verwijzen,
  verscheen nooit: hij hing af van een veld 'secret' dat fields() niet
  meestuurde. Wachtwoorden stonden daardoor leesbaar in het formulier.
- 27 velden die je toch nooit zelf typt (databasewachtwoorden, JWT- en
  versleutelingssleutels) worden nu voorgevuld met een willekeurige waarde.
  Inlogwachtwoorden krijgen alleen een knop, want die moet je noteren.
- De knop hangt nu aan 'generate' in plaats van aan 'secret': voor een
  WireGuard-privésleutel of een token uit een andere app is een verzonnen
  waarde juist fout.
- required werd nergens gecontroleerd. Je kon installeren met een leeg
  databasewachtwoord of een lege sleutel. Nu geweigerd bij installeren en bij
  herconfigureren, met vermelding van de lege velden. Velden achter een
  uitgeschakelde groepsschakelaar tellen niet mee.
- Wachtwoorden werden uitgeschreven in het installatielog; nu gemaskeerd.

Losse fouten:
- homepage: allowed_hosts stond op localhost:3001, nu * met uitleg.
- baserow, hedgedoc, ntfy: URL in de standaardwaarde wees naar een poort waar
  niets luistert.
- Vast wachtwoord in acht sjablonen weggehaald: ghost, immich, miniflux,
  paperless-ngx, unifi-network en vikunja kregen allemaal dezelfde
  database-wachtwoorden; grafana en gotify stonden op 'admin'.
- data_dir bij keycloak, metube, miniflux en teslamate stond in het formulier
  maar kwam nergens terecht (die apps gebruiken een Docker-volume).
- puid/pgid bij freshrss: het image kent ze niet.
- prometheus gaf de gevraagde tijdzone niet door.

Nieuw tests/test_app_templates.py: rendert elke app met zijn standaardwaarden
en controleert ongedefinieerde variabelen, velden zonder werking,
niet-gedeclareerde volumes, depends_on, dubbele containernamen,
poortconflicten, poortnummers in standaardwaarden en vaste wachtwoorden.
2236 tests groen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
2026-07-28 20:08:07 +02:00
.forgejo/workflows ci: deploy mag niet stranden op een .env van een andere gebruiker 2026-07-27 00:46:30 +02:00
apps v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren 2026-07-28 20:08:07 +02:00
docs v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren 2026-07-28 20:08:07 +02:00
modules Initial commit: Server Up v0.3.0 2026-05-09 13:55:29 +00:00
server-up v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren 2026-07-28 20:08:07 +02:00
tests v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren 2026-07-28 20:08:07 +02:00
.env.example .env.example toevoegen met alle instellingen erin 2026-07-26 23:35:11 +02:00
.gitattributes v0.4.60 - VERSION leesfix (LF) 2026-06-06 22:26:22 +02:00
.gitignore v0.5.00-beta - authenticatie + beveiligingsfixes 2026-07-26 14:40:05 +02:00
CHANGELOG.md v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren 2026-07-28 20:08:07 +02:00
docker-compose.yml ci: .env aanmaken vanuit .env.example bij de deploy 2026-07-26 23:57:34 +02:00
Dockerfile v0.5.00-beta - authenticatie + beveiligingsfixes 2026-07-26 14:40:05 +02:00
install.sh v0.7.40-beta - beheerdersaccount en bind meteen klaarzetten 2026-07-27 21:13:06 +02:00
README.md v0.7.40-beta - beheerdersaccount en bind meteen klaarzetten 2026-07-27 21:13:06 +02:00
release.ps1 v0.3.1 - UI restyle, inklapbaar menu, taalmodule 2026-06-02 23:25:30 +02:00
VERSION v0.7.60-beta - app-instellingen nagelopen op fouten bij het installeren 2026-07-28 20:08:07 +02:00

Server Up

Zelfgehoste beheerinterface voor Docker: apps installeren uit een catalogus, stacks starten en stoppen, backups maken en terugzetten, en containers een eigen IP-adres in je netwerk geven.

⚠️ Toegang tot Server Up staat gelijk aan root op de host. De applicatie beheert de Docker-daemon, en wie containers kan starten kan willekeurige mappen van de host mounten. Behandel de interface navenant: maak direct een account aan, zet hem niet zonder reverse proxy met TLS op internet, en lees docs/beveiliging.md.


Wat het doet

App-catalogus 96 kant-en-klare apps, ingedeeld in categorieën met kleur. Zoeken, filteren en installeren met een formulier in plaats van YAML.
Stacks beheren Starten, stoppen, bijwerken en herstarten — per stack of per losse container, met logs en live CPU-/geheugengebruik.
Apps koppelen Stacks komen op een gedeeld netwerk, zodat ze elkaar op naam bereiken. Een veld dat naar een andere app verwijst toont een keuzelijst met wat je al draait.
Eigen IP per stack Met macvlan of ipvlan krijgt een app een eigen adres in je LAN in plaats van poorten op de host.
Backups Handmatig, gepland, en automatisch vóór een update of verwijdering. Met terugzetten en een bewaarbeleid.
Updates Voor Server Up zelf (stable of beta) en voor de images van je geïnstalleerde stacks.
Toegang Lokale accounts met rollen (beheerder, operator, alleen lezen), of SSO via een reverse proxy.

Wat je nodig hebt

  • Een Linux-server met Docker en de compose-plugin
  • Toegang tot /var/run/docker.sock
  • Ongeveer 300 MB schijfruimte voor de applicatie zelf

Installeren

curl -fsSL https://git.ramonbesselink.nl/bes-r/server-up/raw/branch/main/install.sh | sh

Dat controleert je systeem, installeert Docker als het ontbreekt, zet Server Up in /opt/server-up en start het. Onderweg vraagt het waarop de interface moet luisteren en of het meteen een beheerdersaccount voor je aanmaakt — die twee vragen komen vooraf, zodat je kunt weglopen terwijl het image gebouwd wordt.

Liever eerst lezen wat je uitvoert — verstandig, want het script gebruikt root-rechten:

curl -fsSL https://git.ramonbesselink.nl/bes-r/server-up/raw/branch/main/install.sh -o install.sh
less install.sh
sh install.sh --dry-run     # toont wat het zou doen, zonder iets te wijzigen
sh install.sh

Handmatig kan ook:

git clone https://git.ramonbesselink.nl/bes-r/server-up.git /opt/server-up
cd /opt/server-up
cp .env.example .env
docker compose up -d --build

Alle opties staan in docs/installeren.md: --dir, --port, --bind, --branch, --token, --admin, --create-admin, --update, --uninstall.

Het beheerdersaccount

Zolang er nog geen account is, kan iedereen die de pagina bereikt het claimen — de container waarschuwt daar bij het opstarten ook voor. Laat het script het daarom meteen aanmaken:

sh install.sh --admin ramon                       # vraagt om een wachtwoord
SU_ADMIN_PASSWORD='...' sh install.sh --admin ramon --yes    # zonder vragen

Zonder wachtwoordbron en zonder terminal maakt het script er zelf een en toont die. Overgeslagen of misgegaan? sh /opt/server-up/install.sh --create-admin --admin ramon doet het achteraf. Een wachtwoord als opdrachtregeloptie wordt geweigerd: dat is zichtbaar in ps.

Instellingen

Alles staat met uitleg in .env.example. De twee die je waarschijnlijk meteen nodig hebt:

BIND=127.0.0.1     # 0.0.0.0 om er van buiten de server bij te kunnen
PORT=5000

De poort bindt standaard op 127.0.0.1. Zet hem pas open als er een reverse proxy met TLS voor staat. Achteraf wijzigen kan met sh /opt/server-up/install.sh --update --bind 0.0.0.0; pas het anders aan in .env en niet in docker-compose.yml, want dat bestand komt uit de repo en wordt bij elke update overschreven.

Documentatie

Document Waarover
docs/installeren.md Het installatiescript, opties, bijwerken en verwijderen
docs/beveiliging.md Accounts, rollen, SSO, reverse proxy, wat wel en niet is afgedekt
docs/apps-maken.md Eigen apps toevoegen: het volledige templateformaat
docs/netwerken.md Stacks een eigen IP geven met macvlan of ipvlan
docs/backups.md Wat er wél en niet in een backup zit, terugzetten, bewaarbeleid
docs/updates.md Update-kanalen en de Forgejo-registry inrichten
docs/synchroniseren.md Code van je apparaat naar de server via Forgejo
docs/forgejo-actions-setup.md Runners instellen

Eigen apps toevoegen

Wijs Server Up naar je eigen git-repo met app-sjablonen (Instellingen → App Store → Repository), of voeg een map toe onder apps/:

apps/mijn-app/
├── template.json          metadata en de vragen bij het installeren
└── files/
    └── compose.yaml       het compose-bestand met << variabelen >>

Het volledige formaat staat in docs/apps-maken.md.

Bijwerken en verwijderen

sh /opt/server-up/install.sh --update      # nieuwste versie ophalen en herstarten
sh /opt/server-up/install.sh --uninstall   # stoppen; je gegevens blijven staan

Draait Server Up vanaf een registry-image, dan kan bijwerken ook met een knop in de interface — zie docs/updates.md.

Ontwikkelen

python3 -m venv venv && venv/bin/pip install -r server-up/requirements.txt pytest
venv/bin/python -m pytest tests -q          # de volledige suite
cd server-up && SU_DEV=1 python app.py      # lokaal draaien op poort 5000

De testsuite draait ook over alle app-sjablonen: elke app moet renderen naar geldige compose-YAML, met gedeclareerde volumes en zonder onvervangen variabelen. Voeg je een app toe, dan wordt die automatisch meegenomen.

De deploy-workflows draaien de tests in een container (python:3.12-slim), dus op de runner is verder niets nodig dan Docker.

Licentie en bijdragen

Zie CHANGELOG.md voor de geschiedenis. Werk op de dev-branch en bump VERSION bij elke wijziging; een test bewaakt dat er een changelog-sectie bij hoort.