|
Some checks failed
Deploy server-up (dev) / deploy (push) Has been cancelled
De koppelingscontrole in --doctor keek of het pad in /proc/self/mountinfo voorkwam. Een bind mount wijst echter naar een inode, niet naar een pad: is de map op de host vervangen nadat de container was aangemaakt, dan kijkt de container naar de oude en meestal lege map terwijl het pad nog netjes in de mountlijst staat. - --doctor telt nu aan beide kanten en vergelijkt - onderscheidt "map bestaat niet in de container" van "map is leeg" - staat er buiten wel iets en binnen niet, dan is dat een fout met de weg terug erbij (docker compose up -d --force-recreate) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy |
||
|---|---|---|
| .forgejo/workflows | ||
| apps | ||
| docs | ||
| modules | ||
| server-up | ||
| tests | ||
| tools | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| CHANGELOG.md | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| install.sh | ||
| README.md | ||
| release.ps1 | ||
| VERSION | ||
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.
Wat het doet
| App-catalogus | 286 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
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:
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:
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: --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:
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. De twee die je
waarschijnlijk meteen nodig hebt:
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 | Het installatiescript, opties, bijwerken en verwijderen |
| docs/beveiliging.md | Accounts, rollen, SSO, reverse proxy, wat wel en niet is afgedekt |
| docs/apps-maken.md | Eigen apps toevoegen: het volledige templateformaat |
| docs/netwerken.md | Stacks een eigen IP geven met macvlan of ipvlan |
| docs/backups.md | Wat er wél en niet in een backup zit, terugzetten, bewaarbeleid |
| docs/updates.md | Update-kanalen en de Forgejo-registry inrichten |
| docs/synchroniseren.md | Code van je apparaat naar de server via Forgejo |
| 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.
Bijwerken en verwijderen
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.
Ontwikkelen
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.