Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 3s
- Beheer per container: de stackkaart klapt uit naar de losse containers, met start/stop/herstart, logs en live CPU-/geheugengebruik per container. De containernaam wordt getoetst aan compose_ps van díé stack, zodat de route geen willekeurige container op de host kan raken. - Stacks met een eigen IP-adres (macvlan/ipvlan): netwerkbeheer onder Instellingen → Netwerken, netwerkkeuze in de installatiemodal met voorstel voor het eerstvolgende vrije adres, en automatische omzetting van het gerenderde compose-bestand (poortmappings eruit, ipv4_address erin). De templates in apps/ blijven ongewijzigd. - Toegekende IP's worden vastgehouden in .serverup.json en getoond op de stackkaart, zodat een volgende installatie ze niet opnieuw uitdeelt. - Vrije poort voorstellen bij installeren: next_free_port() bestond al maar werd nergens gebruikt. Bezette poorten worden in de UI gemeld. - Genereerknop voor velden die op een geheim wijzen (token/password/secret), lokaal gegenereerd via crypto.getRandomValues. - Compose valideren met `docker compose config` vóór het wegschrijven, zowel bij de editor als na het renderen bij installatie. Ontbreekt de compose-CLI, dan blokkeert dat een installatie niet. - Uitloggen in de zijbalk; gebruikersbeheer en wachtwoord wijzigen onder Instellingen → Beveiliging. - docs/netwerken.md (incl. de shim-interface die de host nodig heeft om zijn eigen macvlan-containers te bereiken) en docs/beveiliging.md toegevoegd. - CHANGELOG bijgewerkt; testsuite uitgebreid naar 112 tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
134 lines
5 KiB
Markdown
134 lines
5 KiB
Markdown
# Stacks een eigen IP-adres geven (macvlan / ipvlan)
|
|
|
|
Standaard publiceert een stack poorten op de host: Vaultwarden op `8222`, Mealie
|
|
op `9925`, enzovoort. Dat werkt, maar levert op den duur een lange lijst
|
|
poortnummers op die je moet onthouden, en twee apps die allebei poort 8080 willen
|
|
gaan niet samen.
|
|
|
|
Met een **macvlan**- of **ipvlan**-netwerk krijgt een stack een eigen IP-adres in
|
|
je LAN. De app draait dan gewoon op zijn eigen standaardpoort:
|
|
|
|
| Zonder | Met eigen IP |
|
|
|--------|--------------|
|
|
| `http://192.168.1.10:8222` | `http://192.168.1.240` |
|
|
| `http://192.168.1.10:9925` | `http://192.168.1.241` |
|
|
|
|
Je kunt er ook per app op firewallen, en een DNS-naam aan koppelen.
|
|
|
|
---
|
|
|
|
## ⚠️ Lees dit eerst: de host bereikt zijn eigen containers niet
|
|
|
|
Dit is de bekendste valkuil van macvlan. De Docker-host kan **niet** bij een
|
|
container die op een macvlan-netwerk draait, en andersom ook niet. Alle andere
|
|
apparaten in je netwerk kunnen dat wél.
|
|
|
|
Draait Server Up op dezelfde machine als de containers, dan zie je dus:
|
|
|
|
- vanaf je laptop: `http://192.168.1.240` werkt
|
|
- vanaf de server zelf: `curl http://192.168.1.240` loopt vast
|
|
|
|
Heb je dat nodig (bijvoorbeeld voor een healthcheck of een reverse proxy die op
|
|
de host draait), maak dan een shim-interface aan op de host:
|
|
|
|
```bash
|
|
# Eenmalig; vervang eth0 en de adressen door die van jouw netwerk.
|
|
ip link add shim link eth0 type macvlan mode bridge
|
|
ip addr add 192.168.1.239/32 dev shim
|
|
ip link set shim up
|
|
ip route add 192.168.1.240/28 dev shim
|
|
```
|
|
|
|
Zet dat in een systemd-unit of in `/etc/network/interfaces`, anders is het na een
|
|
herstart weg.
|
|
|
|
**ipvlan (l2)** heeft dit probleem niet op dezelfde manier, maar vereist wel dat
|
|
je switch en router er goed mee omgaan. Werkt macvlan niet, probeer dan ipvlan.
|
|
|
|
---
|
|
|
|
## Stap 1 — Bepaal je netwerkgegevens
|
|
|
|
Je hebt vier dingen nodig:
|
|
|
|
| Wat | Voorbeeld | Hoe kom je eraan |
|
|
|-----|-----------|------------------|
|
|
| Host-interface | `eth0` | `ip -br link` op de server |
|
|
| Subnet | `192.168.1.0/24` | Je router; hetzelfde subnet als de server |
|
|
| Gateway | `192.168.1.1` | `ip route \| grep default` |
|
|
| IP-range | `192.168.1.240/28` | Een blok dat je **buiten je DHCP-bereik** houdt |
|
|
|
|
De IP-range is optioneel maar sterk aanbevolen. Zonder range mag Docker het hele
|
|
subnet gebruiken en kan het een adres uitdelen dat je DHCP-server ook aan een
|
|
telefoon geeft. `192.168.1.240/28` reserveert `.240` t/m `.255` — zestien
|
|
adressen. Zet dat bereik in je router buiten de DHCP-pool.
|
|
|
|
## Stap 2 — Netwerk aanmaken in Server Up
|
|
|
|
Ga naar **Instellingen → Netwerken → Netwerk** en vul de gegevens in. Server Up
|
|
maakt het Docker-netwerk aan en onthoudt de definitie.
|
|
|
|
Hetzelfde met de hand zou zijn:
|
|
|
|
```bash
|
|
docker network create -d macvlan \
|
|
--subnet 192.168.1.0/24 \
|
|
--gateway 192.168.1.1 \
|
|
--ip-range 192.168.1.240/28 \
|
|
-o parent=eth0 \
|
|
lan
|
|
```
|
|
|
|
## Stap 3 — Een stack installeren op een eigen IP
|
|
|
|
Kies in de installatiemodal bij **Netwerk** je netwerk in plaats van "Poorten op
|
|
de host". Server Up stelt het eerstvolgende vrije adres voor; je kunt het
|
|
overschrijven.
|
|
|
|
Bij het installeren gebeurt er dit met het compose-bestand:
|
|
|
|
```yaml
|
|
# vóór # ná
|
|
services: services:
|
|
vaultwarden: vaultwarden:
|
|
image: vaultwarden/server image: vaultwarden/server
|
|
ports: networks:
|
|
- "8222:80" lan:
|
|
ipv4_address: 192.168.1.240
|
|
networks:
|
|
lan:
|
|
external: true
|
|
```
|
|
|
|
De poortmapping verdwijnt — die heeft geen functie meer. Vaultwarden luistert op
|
|
poort 80 en is bereikbaar op `http://192.168.1.240`.
|
|
|
|
Bestaat een stack uit meerdere containers, dan krijgt de container die poorten
|
|
publiceerde het vaste adres; de rest komt zonder vast adres in hetzelfde netwerk,
|
|
zodat ze elkaar op servicenaam blijven vinden.
|
|
|
|
---
|
|
|
|
## Adresbeheer
|
|
|
|
Server Up bewaart het toegekende adres in `.serverup.json` in de stackmap. Zo
|
|
blijft het gereserveerd, ook als de stack gestopt is, en krijgt een volgende
|
|
installatie het volgende vrije adres voorgesteld.
|
|
|
|
Wil je het adres van een bestaande stack wijzigen, pas dan het compose-bestand
|
|
aan via **compose bewerken** en werk `ipv4_address` bij.
|
|
|
|
## Verwijderen
|
|
|
|
Een netwerk kan pas weg als er geen containers meer op draaien. Stop eerst de
|
|
betreffende stacks; Server Up weigert het anders met een melding.
|
|
|
|
## Problemen oplossen
|
|
|
|
| Symptoom | Oorzaak |
|
|
|----------|---------|
|
|
| `network ... not found` bij het starten | Netwerk verwijderd terwijl de stack er nog naar verwijst — maak het opnieuw aan |
|
|
| Container krijgt geen verbinding | Verkeerde `parent`-interface, of de interface zit in een bond/bridge |
|
|
| Adres al in gebruik | Het adres valt binnen je DHCP-bereik; verklein de DHCP-pool of kies een andere range |
|
|
| Vanaf de server niet bereikbaar, vanaf laptop wel | Verwacht gedrag — zie de shim-interface bovenaan |
|
|
| Werkt niet op WiFi | Klopt: macvlan werkt niet over een draadloze interface |
|