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
Domain
Kind
Issuer / challenge
Expires
Renewal
Status
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
Zone
Name
Type
Content
Proxied
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.
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.13Caddy 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)
Worker
Routes
Version
Status
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 slug
Record
dns_provisioning_status
Provisioned at
Error
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
Esc
β΅ opens the first hit Β· Esc closes Β· π = locked function (still shown β with an explanation)