Ga naar inhoud

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:

  1. 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 op https://portal.<domein>/…. Dit pad werkt ook als de stacks op verschillende hosts draaien.
  2. 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.