Architectuur & netwerk-contract¶
internet
│ 80 / 443
┌────────▼─────────┐
│ Caddy (proxy) │ ← platform
│ auto-HTTPS │
└───┬───────────┬──┘
*.zgw.<domein> │ │ portal.<domein>
┌──────────────▼──┐ ┌──▼───────────────────┐
│ zgw-stack │ │ portal-stack │
│ Open Zaak │◄───►│ Laravel ──► Operaton│
│ Notificaties │ │ +DB +Redis +workers │
│ Klant, Objects, │ └───────────────────────┘
│ Objecttypen, │
│ Open Forms │ alle containers hangen aan
│ +Postgres/Redis │ het gedeelde netwerk "edge"
└──────────────────┘
Het gedeelde netwerk¶
platform/scripts/setup.sh maakt één extern Docker-netwerk aan (default edge,
instelbaar via SHARED_NETWORK). Alle drie de stacks verwijzen ernaar als
external: true. Daardoor kunnen containers elkaar op servicenaam bereiken,
ongeacht uit welke compose-repo ze komen.
Netwerk-contract (aliassen + poorten)¶
De proxy (en het portaal) verwachten dat de stacks hun webcontainers onder deze
netwerk-aliassen en poorten aanbieden. Houd dit stabiel; wijzig je het, pas
dan ook de Caddyfile(.local) en de portal-config aan.
| Alias | Poort | Stack | Subdomein |
|---|---|---|---|
openzaak |
8000 | zgw | openzaak.zgw.<domein> |
opennotificaties |
8000 | zgw | notificaties.zgw.<domein> |
openklant |
8000 | zgw | openklant.zgw.<domein> |
objecten |
8000 | zgw | objecten.zgw.<domein> |
objecttypen |
8000 | zgw | objecttypen.zgw.<domein> |
openforms |
8000 | zgw | formulieren.zgw.<domein> |
portal |
80 | portal | portal.<domein> |
operaton |
8080 | portal | (intern; optioneel subdomein) |
Hoe de stacks communiceren¶
Er zijn twee paden, en die zijn bewust gescheiden:
- Via de publieke URL's (de subdomeinen). Het portaal praat met de
ZGW-API's via geconfigureerde base-URL's (
OZ_BASE_URL,OBJECTEN_BASE_URL, …). Open Notificaties belt het portaal terug ophttps://portal.<domein>/…. Dit pad werkt ook als de stacks op verschillende hosts draaien. - Direct over het
edge-netwerk (servicenaam:poort). Sneller en zonder de proxy, voor verkeer dat sowieso op dezelfde host blijft.
Waarom absolute URL's belangrijk zijn: ZGW-componenten slaan volledige URL's naar elkaar op in hun data (een zaak verwijst bv. naar het volledige zaaktype-URL). Daarom heeft elk component een eigen, stabiel subdomein — verander je een host achteraf, dan kloppen opgeslagen verwijzingen niet meer.
Secrets-coördinatie¶
Een paar secrets moeten identiek zijn in zgw én portal (de creds waarmee
het portaal de ZGW-API's aanroept, en het terugbel-secret voor notificaties).
platform/scripts/setup.sh genereert die één keer in integration.env en
schrijft ze naar het .env van beide stacks. Zie ../serverbeheerder/secrets.md.