- bij de installatie wordt gevraagd onder welk account Server Up draait: een nieuw systeemaccount 'serverup', het account waarmee je werkt, een bestaand account, of root zoals voorheen (--user NAAM slaat de vraag over) - nieuw docker-entrypoint.sh: start als root, zet /data, stacks en backups klaar, en zakt met setpriv af naar SU_UID:SU_GID met de capabilities die nodig blijven (chown, dac_override, fowner - alle drie al in Docker's standaardset) - appdata blijft daarbij bewust ongemoeid; die mappen zijn van de apps zelf - de gid van de docker-socket wordt uit de socket zelf gelezen, zodat het account niet in de docker-groep hoeft (dat zou root op de host geven) - installatieformulier vult PUID/PGID met de ids waaronder Server Up draait in plaats van de 1000 die 44 sjablonen blind noemen - een onleesbaar bestand laat de rest van de backup niet meer sneuvelen; wat ontbreekt komt in het log en in de metadata (skipped) - terugzetten herstelt het eigenaarschap van appdata, dat tarfile met filter="data" laat vallen - CI controleert in een echte container dat setpriv bestaat, dat er wordt afgezakt, dat de socket-gid meekomt, dat /data schrijfbaar is en dat SU_UID=0 root laat blijven - SU_UID=0 in .env is de ontsnappingsklep naar het oude gedrag Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
8.8 KiB
Installeren
In één regel
curl -fsSL https://git.ramonbesselink.nl/bes-r/server-up/raw/branch/main/install.sh | sh
Dat installeert Server Up in /opt/server-up, bereikbaar op
http://localhost:5000.
Liever eerst zien wat je uitvoert? Verstandig — je haalt een script binnen dat root-rechten gebruikt:
curl -fsSL https://git.ramonbesselink.nl/bes-r/server-up/raw/branch/main/install.sh -o install.sh
less install.sh
sh install.sh
Wil je alleen weten wát het zou doen, zonder dat er iets verandert:
sh install.sh --dry-run
Wat het script doet
- Controleert of je op Linux zit en of
curlentaraanwezig zijn - Kijkt of Docker draait — zo niet, biedt het aan die te installeren via het officiële script van docker.com (het vraagt eerst)
- Kloont de repo naar
/opt/server-up(of pakt het tar-archief uit als git ontbreekt) - Maakt
.envaan op basis van.env.example, met jouw poort en bind-adres - Bouwt het image en start de container
- Wacht tot
/healthzantwoordt en toont waar je terecht kunt
Het gebruikt alleen sudo waar dat nodig is. Kun je zelf al in de doelmap
schrijven én docker aanroepen, dan blijft alles onder je eigen account.
Opties
--dir PAD Installatiemap (standaard: /opt/server-up)
--port POORT Poort voor de webinterface (standaard: 5000)
--bind ADRES Waarop de poort luistert (standaard: 127.0.0.1)
--branch NAAM Branch om te installeren (standaard: main)
--token TOKEN Toegangstoken, als je repo niet openbaar is
--user NAAM Account waaronder Server Up draait ('serverup' wordt zo nodig
aangemaakt; 'root' is de oude situatie)
--admin NAAM Maak meteen een beheerdersaccount met deze naam
--admin-password-file PAD
Lees het wachtwoord uit een bestand
--create-admin Alleen het account aanmaken, bij een draaiende installatie
--update Bijwerken naar de nieuwste versie
--uninstall Stoppen en verwijderen (gegevens blijven staan)
--yes Niets vragen
--dry-run Alleen tonen wat er zou gebeuren
Voorbeelden
# Standaard: vraagt waarop het moet luisteren en of je een account wil
sh install.sh
# Bereikbaar op je netwerk, andere poort
sh install.sh --bind 0.0.0.0 --port 8080
# Volledig automatisch, met account
SU_ADMIN_PASSWORD='een-lang-wachtwoord' sh install.sh --admin ramon --yes
# Ergens anders neerzetten
sh install.sh --dir /srv/server-up
# De beta-branch, zonder vragen
sh install.sh --branch dev --yes
# Uit een repo die niet openbaar is
sh install.sh --token jouw-forgejo-token
Onder welk account het draait
Bij de installatie wordt gevraagd onder welk account Server Up moet draaien:
Onder welk account moet Server Up draaien?
Het draait nu nog als root; dat hoeft niet voor alles.
1) Een nieuw account 'serverup' aanmaken — aanbevolen
Systeemaccount zonder shell en zonder wachtwoord.
2) ramon — het account waarmee je nu werkt
3) Een bestaand account kiezen
4) Als root draaien — zoals voorheen
Met --user NAAM of --yes sla je de vraag over; dan wordt het serverup. De
keuze komt als SU_UID/SU_GID in je .env en blijft bij een --update staan.
Zet dat account niet in de docker-groep. Dat geeft het root op je machine
en is niet nodig — de container regelt de toegang tot de socket zelf. Wat dit
wel en niet oplevert staat in beveiliging.md.
Waar je gegevens staan
--dir bepaalt waar Server Up zélf staat. Waar je stacks, appdata en backups
komen is een aparte keuze: dat is BASE_DIR in .env, standaard
/opt/serverup. Alles valt daaronder:
/opt/serverup/stacks de compose-bestanden van je apps
/opt/serverup/appdata de gegevens van je apps
/opt/serverup/backups de backups
Wil je alles onder /srv, zet dat dan vóór de eerste installatie in .env:
echo 'BASE_DIR=/srv/serverup' >> .env
docker compose up -d
Die map wordt in de container op hetzelfde pad gemount, zodat de paden in je
compose-bestanden op de host kloppen. Server Up kan daardoor alleen bij paden
onder BASE_DIR. Vul je in de interface een map buiten die boom in, dan zegt
hij welke regel je in .env moet zetten in plaats van stilletjes naar een map
binnen de container te schrijven — die je op de host nooit terugziet.
Later verhuizen
Staat er al data, dan is .env aanpassen niet genoeg: je stacks blijven naar
hun oude appdata-map wijzen. Ga naar Instellingen → Paden, vul de nieuwe
hoofdmap in en klik op Alles overnemen. Server Up:
- stopt de draaiende stacks
- kopieert alles naar de nieuwe plek, met een voortgangsbalk
- controleert of aantal en omvang kloppen
- schrijft de paden in elke stack om (
docker-compose.yml,.env, metadata) - start de stacks weer op de nieuwe plek
- en ruimt pas daarna het oude op
Klopt de controle niet, dan blijft het origineel staan en krijg je de fout te
zien. Ligt de nieuwe map buiten de huidige BASE_DIR, zet die dan eerst in
.env en draai docker compose up -d; daarna kun je verhuizen.
Het beheerdersaccount
Server Up beheert de Docker-daemon, en wie containers kan starten kan willekeurige mappen van de host mounten. Zolang er nog geen account is, kan iedereen die de pagina bereikt het claimen — dus hoe korter dat venster, hoe beter. Het script kan het account daarom meteen aanmaken.
Op een terminal vraagt het script erom. Automatisch kan het ook:
# Wachtwoord uit een bestand
sh install.sh --admin ramon --admin-password-file /root/su-ww --yes
# Of uit een omgevingsvariabele
SU_ADMIN_PASSWORD='een-lang-wachtwoord' sh install.sh --admin ramon --yes
Geef je geen wachtwoord en is er geen terminal, dan maakt het script er zelf een van 24 tekens en zet die op het scherm. Schrijf die meteen over — hij staat nergens anders.
Het wachtwoord kan niet als optie mee. Opdrachtregelargumenten zijn voor elke gebruiker op de server zichtbaar met
psen blijven in je shell-geschiedenis staan.--admin-passwordweigert daarom met een verwijzing naar de twee manieren hierboven.
Ging het aanmaken mis, of heb je het overgeslagen? Dan kan het achteraf, zolang er nog geen account bestaat:
sh /opt/server-up/install.sh --create-admin --admin ramon
Eist minstens 10 tekens, net als de webinterface.
Bereikbaarheid
Het script vraagt waarop de webinterface moet luisteren:
| Keuze | BIND |
Wanneer |
|---|---|---|
| Alleen deze server | 127.0.0.1 |
Standaard en veiligst. Erbij via een SSH-tunnel of een reverse proxy op dezelfde machine. |
| Het hele netwerk | 0.0.0.0 |
Direct bereikbaar op het adres van je server. Zet er een reverse proxy met TLS voor. |
| Een specifiek adres | zelf opgeven | Bijvoorbeeld alleen je beheernetwerk. |
Achteraf wijzigen kan met dezelfde optie; die wordt ook doorgevoerd in een
.env die er al staat:
sh /opt/server-up/install.sh --update --bind 0.0.0.0
Wat je niet expliciet meegeeft blijft staan zoals het was, zodat een --update
je instellingen niet terugzet. Pas BIND daarom aan in .env of via deze optie
— niet in docker-compose.yml, want dat bestand komt uit de repo en wordt
bij elke update overschreven.
Zie beveiliging.md voor de reverse proxy, rollen en SSO.
Bijwerken
sh /opt/server-up/install.sh --update
Haalt de nieuwste versie op, bouwt opnieuw en herstart. Je .env blijft staan,
net als je stacks en gegevens.
Draait Server Up vanaf een registry-image, dan kun je ook bijwerken vanuit de interface zelf — zie updates.md.
Verwijderen
sh /opt/server-up/install.sh --uninstall
Stopt en verwijdert de container. Je gegevens blijven staan: het
docker-volume su-data (instellingen, accounts, auditlog) en je stackmappen
onder BASE_DIR (standaard /opt/serverup). Het script vertelt daarna hoe je
die alsnog opruimt.
Handmatig, zonder script
git clone https://git.ramonbesselink.nl/bes-r/server-up.git /opt/server-up
cd /opt/server-up
cp .env.example .env
$EDITOR .env
docker compose up -d --build
Als er iets misgaat
| Melding | Wat er aan de hand is |
|---|---|
Geen root en geen sudo |
Draai als root, of kies met --dir een map waar je zelf in mag schrijven |
Docker is geïnstalleerd maar de daemon reageert niet |
systemctl start docker |
De docker-compose-plugin ontbreekt |
Installeer docker-compose-plugin via je pakketbeheerder |
Ophalen mislukt. Is de repo openbaar? |
Gebruik --token met een Forgejo-token dat de repo mag lezen |
| Reageert niet binnen anderhalve minuut | docker compose -f /opt/server-up/docker-compose.yml logs --tail=50 |
Laadt de interface zonder opmaak, dan is het downloaden van de front-end- bestanden tijdens de build misgegaan. Server Up meldt dat bij het opstarten in zijn eigen log; opnieuw bouwen lost het meestal op.