install-server.sh generates restricted credential files under secrets/, records their NAME_FILE paths in .env, and binds host ports to loopback. It prompts when a terminal is available and applies the same safe defaults automatically in headless CI or agent environments. The source Compose path remains available for development and accepts direct .env values.
Architecture at a glance
Seven services:
All services run on a private
observal-net bridge network. Named volumes (pgdata, chdata, redisdata, grafanadata, apidata) hold persistent data.
Deployment tiers
Choose the deployment model that fits your team:
Start here:
Then configure and operate:
Production checklist
Before putting Observal in front of real users:- Protect
SECRET_KEY: server-package setup generates it insecrets/; source deployments must set a strong direct value orSECRET_KEY_FILE. - Protect database passwords: server-package setup generates restricted PostgreSQL and ClickHouse credential files; source deployments must replace the
.env.exampledefaults. - Scope
CORS_ALLOWED_ORIGINSto your real frontend host. - Configure SSO in Admin → SSO, including
deployment.sso_onlyif you want SSO-only login. - Tune rate limits (
RATE_LIMIT_AUTH,RATE_LIMIT_AUTH_STRICT). - Set
DATA_RETENTION_DAYSto match your retention policy (default 90 days). - Back up the JWT key volume (
apidata): losing it invalidates every session. - Remove demo accounts: remove
DEMO_*variables and generated demo password files before a real deployment, then delete any already-seeded demo users.

