PoC-Deployment: Bank- und Händler-Mock (Scoped Mandate)¶
Stand: 2026-10-10. Beide Services laufen auf Google Cloud Run in Frankfurt (
europe-west3), Projektgen-lang-client-0501393793.
| Rolle | Öffentliche URL | Cloud-Run-Service | Quelle |
|---|---|---|---|
| Bank (Mandate Service) | https://bank.s-you.me | mandate-service |
tools/mock-bank |
| Händler (Merchant Service) | https://shop.s-you.me | merchant-service |
tools/mock-merchant |
| Dokumentation | https://docs.s-you.me | docs-site |
tools/docs-site (rendert docs/*.md, tools/DEPLOY.md, CHANGELOG.md, docs/openapi/*.yaml; Logo/Schriften von digitallabor.berlin beim Deploy geladen, nicht im Repo) |
OpenAPI 3.1: Quelle docs/openapi/{mandate,merchant}-service.yaml. Die Deploy-Scripts von Bank und Händler kopieren die jeweilige Datei als openapi.yaml in den Build (gitignored, aber per .gcloudignore im Upload); die Services liefern sie unter /openapi.yaml und verweisen in der Discovery darauf. Nach einer Spec-Änderung: betroffenen Service und docs-site neu deployen.
Wichtige Einstiegspunkte:
- Bank-Dashboard: https://bank.s-you.me/dashboard
- Bank-Discovery: https://bank.s-you.me/.well-known/mandate-service
- Händler-Dashboard (Prüf-Log + Katalog): https://shop.s-you.me/dashboard
- Händler-Katalog: https://shop.s-you.me/catalog
- Händler-Discovery (Signing-Key): https://shop.s-you.me/.well-known/merchant-service
- Händler-Log (JSON, in-memory, lebt nur mit der Instanz): https://shop.s-you.me/events
Scripts¶
| Script | Zweck |
|---|---|
mock-bank/deploy.sh |
Bank aus Quelle bauen und deployen (Cloud Build), prüft /health |
mock-merchant/deploy.sh |
Händler deployen; legt beim ersten Lauf den Signing-Key im Secret Manager an |
docs-site/deploy.sh |
Doku-Site: kopiert die Markdown-Quellen nach content/ (gitignored) und deployt; nach jeder Doku-Änderung erneut ausführen |
mock-bank/allow-public.sh |
Org-Policy lockern und allUsers als Invoker setzen (einmalig je Service) |
setup-lb.sh |
Globalen HTTPS-Load-Balancer mit Google-managed Zertifikaten anlegen — drei Hosts, idempotent (--status, --destroy) |
mock-bank/smoke_test.py URL |
24 Checks Flow B/C/D gegen eine laufende Bank |
mock-merchant/smoke_test.py URL |
20 Checks Katalog/Attestation/Fach-Scope gegen einen laufenden Händler |
Smoke-Tests ohne venv:
uv run --python 3.12 --with 'cryptography==43.0.3' --with requests \
python tools/mock-bank/smoke_test.py https://bank.s-you.me
DNS (Strato, Domain s-you.me)¶
| Typ | Name | Wert | Zweck |
|---|---|---|---|
| TXT | @ |
google-site-verification=… |
Domain-Nachweis für Google Cloud — nicht löschen |
| A | bank |
35.190.87.101 |
Load-Balancer-IP (poc-lb-ip) |
| A | shop |
35.190.87.101 |
dieselbe IP; der LB routet per Host-Header |
| A | docs |
35.190.87.101 |
dieselbe IP; Zertifikat poc-cert-v2 deckt alle drei Hosts |
www und die nackte Domain sind frei belegbar (z. B. Landingpage), die
PoC-Services hängen nur an bank und shop.
Warum Load Balancer statt Domain-Mapping¶
Cloud-Run-Domain-Mappings sind in europe-west3 nicht erlaubt (HTTP 501
UNIMPLEMENTED, geprüft 2026-10-10). Statt die Services nach Belgien zu
verschieben, sitzt ein globaler externer HTTPS-LB mit Serverless-NEGs davor.
Das ist Googles empfohlener Produktionsweg, hält die Services in Frankfurt
und bringt HTTP→HTTPS-Redirect und Zertifikatsverwaltung mit.
Kosten: ca. 15 €/Monat für die Forwarding-Rule; setup-lb.sh --destroy
baut alles wieder ab.
Betrieb¶
- Daten liegen in Firestore (Native,
europe-west3). Vor einer Demo Testmandate über das Dashboard widerrufen oder die Collection leeren. - Der Händler-Signing-Key existiert nur im Secret Manager
(
merchant-signing-key), nie im Repo oder auf Platte. - Logs:
gcloud run services logs read mandate-service --region europe-west3