PROTOTYPE Clickable mockup Β· simulates the finished app β—ƒ Product overview
Petanque Life Operator Console
Production OP

Domains, TLS & CDN

Fleet view of certificates, DNS zones, domain verification, edge workers, the Caddy reverse proxy for CMS traffic (*.web.petanque.life + custom domains) and Loopia auto-provisioning of platform subdomains. Tenant admins point their own domain at CNAME target proxy.web.petanque.life from Admin β†’ Tema & CMS.

214
certificates in fleet
1
renewal failing
48
CMS sites on proxy
99.99%
proxy uptime 30 d

ACME / Let's Encrypt certificate fleet

DomainKindIssuer / challengeExpiresRenewalStatus
skanebf.se custom domain (CMS) Let's Encrypt Β· HTTP-01 (Caddy on-demand) 2026-08-21 auto (30 d before) active
*.web.petanque.life wildcard Let's Encrypt Β· DNS-01 2026-09-02 auto active
nordvikbk.web.petanque.life platform subdomain covered by wildcard β€” β€” active
boule-beziers.fr custom domain (CMS) Let's Encrypt Β· HTTP-01 2026-07-09 auto β€” renewal failing renewal_failed

CMS traffic terminates TLS on the Caddy proxy (on-demand HTTP-01, cert cache in the caddy_data volume). Issuance is gated by GET /public/domains/cert-allowed?domain=… β€” 200 only when the hostname matches an active CmsSite subdomain/domain or a verified custom domain (abuse guard).

State β€” renewal failing

⚠
boule-beziers.fr β€” HTTP-01 challenge unreachable (expires in 6 days)
The federation's A record no longer points at the proxy. Contact tenant or re-run verification; auto-renew retries every 6 h.

Cloudflare DNS zones & records

ZoneNameTypeContentProxied
petanque.life api A 20.112.84.10 yes
petanque.life proxy.web A 20.238.51.13 (vm-petanque-proxy) no
web.petanque.life nordvikbk A 20.238.51.13 no
petanque.life @ MX 10 mail.protection.example β€”
petanque.life _dmarc TXT v=DMARC1; p=quarantine β€”

Zone CRUD + A/AAAA/CNAME/MX/TXT record management per tenant zone.

Add DNS record

Domain verification queue (TXT / CNAME methods Β· wildcard certificates)

DomainTenantMethodTokenStatus
skanebf.se Svenska BoulefΓΆrbundet TXT pl-verify=8f2a… verified
boule-beziers.fr FFPJP (FR) CNAME β†’ proxy.web.petanque.life β€” verified
bergenboule.no Norges Forbund TXT pl-verify=1c9d… pending

Verification gates certificate issuance for custom domains. Wildcard certificates (*.web.petanque.life) are managed separately via DNS-01.

Caddy reverse proxy β€” vm-petanque-proxy
up Azure VM B1s Β· static IP 20.238.51.13 Caddy 2.x in Docker Β· cert volume caddy_data
On-demand TLS via Let's Encrypt HTTP-01 for unlimited CMS sites in front of swa-petanque-web (header_up Host preserved). Stable CNAME target for federations' own domains: proxy.web.petanque.life. Replaces Cloudflare for SaaS (kept dormant as fallback).
Cloudflare Workers (edge computing)
WorkerRoutesVersionStatus
edge-redirects petanque.life/r/* v14 deployed
img-resize cdn.petanque.life/i/* v8 deployed
ab-router (paused) web.petanque.life/* v3 paused

Deployment management per worker: deploy Β· rollback Β· pause.

Loopia DNS auto-provisioning β€” platform subdomains (per CmsSite lifecycle)

Site slugRecorddns_provisioning_statusProvisioned atError
nordvikbk nordvikbk.web.petanque.life β†’ 20.238.51.13 active 2026-06-12 10:03 β€” β€”
sjostadpk sjostadpk.web.petanque.life β†’ 20.238.51.13 active 2026-06-20 14:41 β€” β€”
granholmpk granholmpk.web.petanque.life failed β€” Loopia XML-RPC timeout β€” retry with repair-dns
proxy reserved slug disabled β€” blocked (reserved: proxy, _acme-challenge, test) β€”

Create/rename/delete of a CmsSite provisions the A record via Loopia XML-RPC. Transient API failures never roll back site creation β€” the site lands as failed and repair-dns retries idempotently. Reserved slugs are blocked: proxy, _acme-challenge, test.

State β€” no pending verifications

βœ“
Verification queue is empty
New custom domains appear here until their TXT/CNAME proof resolves.

State β€” loading zone list