Before
WORKING_MODE=productionENCRYPT_KEYgenerated, backed up, never rotated casuallyRAG_WEBHOOK_SECRETchanged from its defaultFRONTEND_URLSrestricted to the real originsPUBLIC_BASE_URLset to the public HTTPS URL — webhook registration uses it- A database dump taken, since migrations run forward at boot
Network surface
Only expose what needs exposing. Internal services — collectors, ETL, schedulers — bind to loopback and stay behind the reverse proxy.After
Verify three things separately, because they fail independently:1
Installed
The package and its extras are present in the environment.
2
Loaded
Extensions named in
TH2_EXTENSIONS actually loaded. Installing a brick without
naming it leaves the service healthy and silently short of a capability — see
Editions.3
Started
The expected module is the one running. A hard-coded module path in a deploy script
survives a rename and starts the wrong thing.