Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 2m8s
- 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
271 lines
8.8 KiB
Markdown
271 lines
8.8 KiB
Markdown
# Installeren
|
|
|
|
## In één regel
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
sh install.sh --dry-run
|
|
```
|
|
|
|
---
|
|
|
|
## Wat het script doet
|
|
|
|
1. Controleert of je op Linux zit en of `curl` en `tar` aanwezig zijn
|
|
2. Kijkt of Docker draait — zo niet, biedt het aan die te installeren via het
|
|
officiële script van docker.com (het vraagt eerst)
|
|
3. Kloont de repo naar `/opt/server-up` (of pakt het tar-archief uit als git
|
|
ontbreekt)
|
|
4. Maakt `.env` aan op basis van `.env.example`, met jouw poort en bind-adres
|
|
5. Bouwt het image en start de container
|
|
6. Wacht tot `/healthz` antwoordt 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
|
|
|
|
```bash
|
|
# 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](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`:
|
|
|
|
```bash
|
|
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:
|
|
|
|
1. stopt de draaiende stacks
|
|
2. kopieert alles naar de nieuwe plek, met een voortgangsbalk
|
|
3. controleert of aantal en omvang kloppen
|
|
4. schrijft de paden in elke stack om (`docker-compose.yml`, `.env`, metadata)
|
|
5. start de stacks weer op de nieuwe plek
|
|
6. **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:
|
|
|
|
```bash
|
|
# 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 `ps` en blijven in je
|
|
> shell-geschiedenis staan. `--admin-password` weigert 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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](beveiliging.md) voor de reverse proxy, rollen en SSO.
|
|
|
|
---
|
|
|
|
## Bijwerken
|
|
|
|
```bash
|
|
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](updates.md).
|
|
|
|
---
|
|
|
|
## Verwijderen
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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.
|