First run
A fresh install has no accounts and nothing configured. The first request lands on /setup, and
the app serves nothing else until the flow finishes.
The flow
Section titled “The flow”-
Controller or agent. Agents are set up from their own host and paired later; choosing here just says which this is.
-
Create the first administrator, or configure an OAuth provider instead of a local account.
-
Sign in. Deliberately before anything else is entered - a mistyped password or a wrong OAuth client secret is otherwise only discovered after the whole configuration is filled in.
-
Settings. Everything that used to live in
.env, pre-filled from whatever the environment already provides, each field showing where its value came from. Save writes them to the database and opens the dashboard.
The stage is derived from what exists rather than tracked as a counter, so a half-finished setup resumes where it left off and the back button cannot desynchronise it. Every screen shows where it sits in the flow, and the stepper reads the same stages the redirects do, so the two cannot disagree.
- Migrate
- Account
- Sign in
- Settings
Migrate an existing installation
A database from a previous version is on this host. Migrating copies the parts you choose into PostgreSQL. The original file is not modified.Or start fresh
The sign-in step is the ordinary sign-in screen: the username first, then the password. There is a live one under signing in.
What it decides for you
Section titled “What it decides for you”Setup switches on the dashboard host, so the instance is already reverse-proxying something - itself - before you have created anything. It comes up on HTTP; HTTPS is a check you run once the domain reaches you.
Finishing restarts the application
Section titled “Finishing restarts the application”Saving the last step stores configuration the running process resolved before any of it existed: settings were cached and the enabled identity providers listed at boot, against a database that had neither. So setup restarts the application rather than handing you a process still answering from the empty one, and the screen waits for it to go away and come back. Coming back is also what applies the Caddy configuration, which is how the dashboard host you just created starts answering.
If you gave the dashboard host a domain, that is where you land once it has been confirmed to reach this deployment - otherwise you stay on the address you set up at, which always works. Your session belongs to the address you signed in at, so the new domain asks you to sign in again. A deployment with nothing supervising the container never comes back on its own: the screen says so, and gives you the command to restart it by hand.
Two things skip the flow
Section titled “Two things skip the flow”- An existing pre-3.0 installation. A SQLite database found on the host is offered for migration before account creation, because you want its accounts rather than a new one alongside them. Secrets are re-encrypted under this deployment’s own key. Starting it asks for confirmation first, restating what will be copied: the rows keep their original identifiers in a database that has to be empty, the application restarts, and leaving the accounts behind means setup goes on to create a first administrator.
- A deployment that predates the flow. If
ADMIN_USERNAME/ADMIN_PASSWORDorOAUTH_ENABLEDalready configure a way in, setup is marked complete at startup and never shown.