Het installatiescript kan nu allebei zelf regelen, zodat je na afloop niet meer naar de webinterface hoeft om een account te claimen en niet meer in .env hoeft te duiken om erbij te kunnen. Beheerdersaccount: - Op een terminal wordt gevraagd of je er meteen een wil, met naam en wachtwoord (twee keer, echo uit). - Automatisch via --admin NAAM plus --admin-password-file of SU_ADMIN_PASSWORD; zonder bron en zonder terminal maakt het script er zelf een van 24 tekens en toont die. - --admin-password weigert bewust: argumenten zijn zichtbaar in 'ps'. Het wachtwoord gaat via stdin naar curl, niet als argument. - Nieuw --create-admin voor een installatie die al draait. Bereikbaarheid: - Keuzemenu voor BIND (deze server / hele netwerk / eigen adres), met het gedetecteerde serveradres erbij. - Bij opnieuw installeren is de bestaande instelling het uitgangspunt, zodat enter je server niet ongemerkt terugzet op loopback. Opgeloste fouten: - Een bestaande .env bleef altijd ongemoeid, ook met --bind: de installatie leek te lukken terwijl de server op het oude adres bleef luisteren. - --update rekende met de standaardpoort in plaats van met wat er in .env staat, waardoor de wachtlus en het slotadres niet klopten. - --dry-run riep 'sudo docker' aan en vroeg dus om een wachtwoord terwijl het net beloofd had niets te doen; zonder terminal liep het daarop vast. - Ongeldig bind-adres en poort buiten 1-65535 worden nu meteen geweigerd. Getest met een pseudo-terminal voor de vragen en tegen een echt draaiende server voor het aanmaken van het account, inclusief een wachtwoord vol aanhalingstekens en backslashes, een geweigerd tweede account en een server die niet reageert. De e2e-tests slaan zichzelf over waar curl ontbreekt, zoals in het CI-image. 992 tests groen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
200 lines
6.2 KiB
Markdown
200 lines
6.2 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
|
|
--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
|
|
```
|
|
|
|
---
|
|
|
|
## 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 `/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.
|