# 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.