server-up/README.md
Ramon 42bd87047a
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 12m38s
v0.8.20-beta - Prometheus startte niet, en 23 apps erbij
- apps/prometheus was kapot: het koppelde een lege map op /etc/prometheus en
  startte met --config.file naar een bestand dat er nooit kwam. Er zit nu een
  startconfiguratie bij, met koppelvelden naar node-exporter en cAdvisor
- De meeste apps van deze ronde zijn de ontbrekende helft van wat er al stond:
  node-exporter, cAdvisor en Alertmanager maken Prometheus bruikbaar; Loki en
  Alloy bewaren logs waar Dozzle alleen live meekijkt; Unbound zoekt DNS zelf op
  in plaats van door te vragen aan Google of Cloudflare
- Domeinen die ontbraken: evcc (energie), Healthchecks (cronbewaking),
  Infisical (geheimen voor applicaties), Music Assistant, pgAdmin
- Verder Crafty, Manyfold, ErsatzTV, FitTrackee, ComfyUI, Omada, en de zwaardere
  Zabbix, Graylog, Wazuh, NetBox, Seafile en OpenCloud. Van 218 naar 241 apps
- Nieuw tools/controleer_images.py: controleert of elk image echt bestaat. De
  ad-hoc versie draaide met zestien verzoeken tegelijk en meldde negen
  ontbrekende images die alle negen wel bestonden -- registries knijpen af, en
  dat is niet te onderscheiden van een ontbrekend image. Nu vier tegelijk met
  opnieuw proberen, en als stap in de drie workflows

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
2026-08-01 04:06:26 +02:00

155 lines
6.3 KiB
Markdown

# 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](docs/beveiliging.md).
---
## Wat het doet
| | |
|---|---|
| **App-catalogus** | 241 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
```bash
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:
```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 --dry-run # toont wat het zou doen, zonder iets te wijzigen
sh install.sh
```
Handmatig kan ook:
```bash
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](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:
```bash
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`](.env.example). De twee die je
waarschijnlijk meteen nodig hebt:
```bash
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](docs/installeren.md) | Het installatiescript, opties, bijwerken en verwijderen |
| [docs/beveiliging.md](docs/beveiliging.md) | Accounts, rollen, SSO, reverse proxy, wat wel en niet is afgedekt |
| [docs/apps-maken.md](docs/apps-maken.md) | Eigen apps toevoegen: het volledige templateformaat |
| [docs/netwerken.md](docs/netwerken.md) | Stacks een eigen IP geven met macvlan of ipvlan |
| [docs/backups.md](docs/backups.md) | Wat er wél en niet in een backup zit, terugzetten, bewaarbeleid |
| [docs/updates.md](docs/updates.md) | Update-kanalen en de Forgejo-registry inrichten |
| [docs/synchroniseren.md](docs/synchroniseren.md) | Code van je apparaat naar de server via Forgejo |
| [docs/forgejo-actions-setup.md](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](docs/apps-maken.md).
## Bijwerken en verwijderen
```bash
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](docs/updates.md).
## Ontwikkelen
```bash
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.