server-up/docs/pangolin.md
Ramon ea9b1eb668
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 2m10s
v0.7.80-beta - Volgende-knop, tijdzones, netwerken per groepje, Pangolin
De knop Volgende deed niets. Alpine haalt een boolean-attribuut alleen weg bij
null, undefined of false; het getal 0 zet het juist AAN. Mijn
:disabled="stepMissing().length" gaf bij een ingevuld formulier 0 en zette de
knop dus permanent uit. De logica klopte, de binding niet — met losse logica
niet te vinden, dus er draait nu een test die de echte modal met Alpine in een
DOM rendert en erop klikt.

Tijdzones:
- Nieuwe instelling TIMEZONE, standaard die van de server (TZ, /etc/timezone,
  /etc/localtime). In alle 77 sjablonen stond Europe/Amsterdam hard ingevuld.
- Apps zonder tijdzoneveld krijgen TZ er automatisch bij; die draaiden in UTC.

Poorten:
- _bezette_poorten() telt nu ook mee waar de host zelf op luistert, gelezen uit
  /proc/net/tcp in een hulpcontainer met --network host. Een nginx buiten
  Docker zag Server Up eerder niet.
- GET /api/ports/check geeft vrij/bezet plus een alternatief, en meldt of de
  host echt gecontroleerd kon worden.

Netwerken:
- APP_NETWORKS: meerdere gedeelde bridge-netwerken in plaats van één waar élke
  app aan hing. Per app kies je welke; aanmaken kan vanuit het invulmenu, met
  eigen naam of een voorstel (su-<appnaam>).
- add_shared_network() accepteert een lijst; één naam blijft werken.
- GET /api/networks/<n>/ip-check controleert subnet, bereik, Docker-toewijzing
  en de ARP-tabel van de host (vangt een fysiek apparaat met DHCP-adres) en
  stelt een vrij adres voor.

Pangolin (nieuw, core/pangolin.py):
- Publieke URL per app via een tunnel, zonder poorten open te zetten.
- De API veranderde in 1.9 (resource hing onder een site, staat nu los); beide
  routes worden geprobeerd en bij een fout krijg je beide meldingen.
- API-sleutel is write-only. Getest tegen een nagebouwde API, niet tegen een
  echte server.

Nieuw: docs/pangolin.md; docs/netwerken.md uitgebreid. 2369 tests groen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
2026-07-28 22:25:38 +02:00

78 lines
3.2 KiB
Markdown

# Pangolin — een publiek adres voor je apps
[Pangolin](https://github.com/fosrl/pangolin) is een reverse proxy met tunnel:
je apps blijven thuis draaien en krijgen toch een adres op internet, zónder dat
je poorten hoeft open te zetten in je router. Server Up kan die adressen voor je
aanmaken, zodat je dat niet per app in de Pangolin-interface hoeft te doen.
> **Server Up installeert Pangolin niet.** Je hebt een draaiende Pangolin-server
> nodig (in de cloud of op een VPS) en een Newt-site die vanaf je thuisnetwerk
> naar buiten verbindt. Server Up praat alleen met de API.
---
## Instellen
Onder **Instellingen → Pangolin**:
| Veld | Waar vind je dat |
|---|---|
| Adres | De URL van je Pangolin-server, bijvoorbeeld `https://pangolin.voorbeeld.nl` |
| API-sleutel | In Pangolin onder **Settings → API Keys**. Geef hem rechten om resources en targets te maken. |
| Organisatie-id | Staat in de URL als je in Pangolin bent ingelogd |
| Site | Wordt opgehaald zodra de sleutel werkt; dit is je Newt-verbinding |
| Domein | Wordt opgehaald zodra de sleutel werkt |
Klik daarna op **Verbinding testen**. Lukt het, dan staat er hoeveel sites er
gevonden zijn. De API-sleutel is write-only: je kunt hem instellen, maar de API
geeft hem nooit terug.
---
## Een URL aanmaken
Open **Inloggegevens** op de stackkaart en klik op **Publieke URL aanmaken**.
Server Up doet dan twee dingen:
1. een *resource* aanmaken — het publieke adres, standaard `<stacknaam>.<domein>`;
2. een *target* aanmaken — waar dat adres naartoe wijst.
Het doel wordt afgeleid: heeft de stack een eigen IP-adres (macvlan), dan dat;
anders het adres van de host met de gepubliceerde poort. De URL wordt bij de
stack bewaard en daarna in het paneel getoond.
---
## Als het misgaat
**"De API-sleutel wordt geweigerd (401)"** — de sleutel is verlopen of heeft te
weinig rechten.
**"Organisatie niet gevonden (404)"** — het organisatie-id klopt niet. Het is de
korte naam uit de URL, niet de weergavenaam.
**"Geen site gevonden; installeer eerst Newt"** — Pangolin heeft een tunnel naar
je netwerk nodig. Zet Newt op je thuisserver en koppel die als site.
**"Aanmaken mislukt"** met twee HTTP-codes — de API van Pangolin is in versie
1.9 veranderd: een resource hing eerst onder een site
(`PUT /org/<org>/site/<site>/resource`) en staat sindsdien los
(`PUT /org/<org>/resource`). Server Up probeert allebei en toont beide
foutmeldingen, zodat je ziet welke route jouw versie verwacht. Zie
[fosrl/pangolin#1344](https://github.com/fosrl/pangolin/issues/1344).
---
## Wat er níét gebeurt
- Server Up beheert de URL niet verder: verwijder je de stack, dan blijft de
resource in Pangolin staan. Ruim die daar zelf op.
- Er wordt geen authenticatie voor de resource ingesteld. Wil je dat het adres
niet voor de hele wereld open staat, zet dan in Pangolin zelf een
toegangsregel of SSO op die resource.
- Meerdere targets per resource (load balancing) valt hierbuiten.
> **Deze integratie is getest tegen een nagebouwde API, niet tegen een echte
> Pangolin-server.** Dat de juiste verzoeken verstuurd worden ligt vast in de
> tests; of jouw versie ze accepteert, blijkt bij de eerste poging. De
> foutmeldingen zijn daarom zo volledig mogelijk gehouden.