What you will do
- Normal authenticated routes and APIs stay locked until setup completes once.
GET /v1/setup/preflightreports exactly what still blocks setup, including a database that is still starting.- The bootstrap administrator must rotate the provisioned password at first login by default.
- The wizard can seed starter profiles, generate secrets, and create the initial GitOps layout and repository teams.
Before you start
- Stack
- A running control plane
curl -s localhost:8080/healthz - Bootstrap admin
- NOPSAI_BOOTSTRAP_ADMIN_EMAIL and NOPSAI_BOOTSTRAP_ADMIN_PASSWORD set
- Database
- PostgreSQL reachable from the API
- Browser access
- http://localhost/ reachable from your workstation
Steps
- 01
Check preflight
Preflight tells you whether the platform can be set up right now and, if not, why.
Read preflightbash curl -s localhost:8080/v1/setup/preflight | jqExpected result- A JSON document listing outstanding blockers. An empty blocker list means setup can proceed.
- 02
Run the wizard
Open the UI and work through the setup steps: readiness, runtime, GitHub, GitOps, teams, AI, and users. Optional steps can be skipped and configured later. The GitHub step is a single button that creates the App and hands you to GitHub to choose repositories; it asks for no App ID, key, or secret.
Important- Setup apply errors include the actionable write or configuration reason. Read the message rather than retrying blindly.
VerifyGET /v1/setup/statusreports that setup has completed.
- 03
Rotate the bootstrap password
Log in as the bootstrap administrator. The forced rotation runs before you reach the application.
Verify- You can log in with the new password and reach the dashboard.
- 04
Confirm the runner registered
Open System, then the dispatcher workspace, and confirm at least one runner is connected and dispatchable.
Verify- The runner appears in the fleet table with a reachable, dispatch-enabled status.
How it works
Setup preflight is deliberately available before authentication so an operator can diagnose a stuck install without a token.
First-install setup does not force an env-file write for dispatcher TLS when a valid effective service JWT fallback is already configured.
Implementation evidence
doc/first-install-wizard.mdThe bootstrap flow, starter profiles, and production guardrails.
services/nopsai/setup_preflight.goPreflight behavior during cold starts.

