infra/ansible/inventories/staging/hosts.json, private addresses and compose directories from
../runbooks/overview.md.
Status: never run against staging or production (they do not exist). The node-level checks
of steps 1, 3, 4, 5 and 7 ran on the local converge on 2026-11-12 and 2026-11-13
(local-converge.md section 3); step 2’s tracker check ran against a local
gateway on 2026-11-13 (../runbooks/tracker-release.md).
Steps
-
Node health on port 80, every edge and core node:
Expected:
308for every node, whatever the Host header.503means a composite check failed or the node is drained (../runbooks/edge-node-failure.md). -
Public endpoints:
Expected:
200for the console;302for/login(tohttps://app.<input I4>/); the SHA-384 ofsdk.jsequals thesha384of version 1.1.0 inpackages/tracker/releases/manifest.json;403for Umami’s collect route, which must never be reachable from outside. - Certificates: ../runbooks/certificates.md step 1 for each node and name. Expected: Let’s Encrypt, more than 14 days left.
-
NATS from a core node:
Expected: a leader and three peers, all current. Then
platformctl nats checkas in ../runbooks/overview.md: every object"action":"unchanged"and nonats topology differs from the specerror. -
etcd and Patroni:
Expected: three
startedetcd members; oneLeaderand oneSync Standbyin statestreamingwith lag 0. -
Backups on the leader’s node:
Expected:
checkexits 0 (a WAL segment reached the repository); timers forfull,diff,verifyandretain-web. -
Exposure. From an address outside
<input I13>:Expected: every portclosed; only 80 and 443 answer. -
Clock:
chronyc trackingon each node; the offset is under 1 s (the base role also checks this at every converge). - End to end, web. As the operator, create a test project and a site in the console, put the snippet the console shows into a page served from the site’s registered origin, load it in a browser, and open the site’s dashboard through the console. Expected: the pageview appears within the 10-minute freshness budget.
-
End to end, API. Create an OTLP token on the project’s token page and run
examples/otel-go-nethttpwithPLATFORM_OTLP_ENDPOINT=https://otlp.<input I4>,PLATFORM_OTLP_TOKEN=<the token>andTENANT_OTLP_ENDPOINTpointing at any OTLP receiver you run (see its README); send a few requests to it. Expected: the requests appear in the project’s API dashboard. Remove the test project afterwards (../runbooks/tenant-removal.md). -
Monitoring: Prometheus targets all
UPand no alert firing other than those explained by missing inputs (for exampleBackupTooOldbefore the first backup). Once the probe bundle runs (probe.md), every Uptime Kuma monitor of it is up.