Skip to content

First run

These steps apply to Installation Methods 1–3 (Docker Compose). Method 4 (local development) already includes its own root key and Superadmin steps inline, so skip this page if that’s what you used.

  1. Build and start everything (already done per method, repeated here for reference: the web container’s entrypoint runs migrations and collectstatic automatically on every start):

    Terminal window
    docker compose up -d --build # or: docker compose --profile tailscale up -d --build
  2. Generate the instance root key. Do this once, before creating any engagements:

    Terminal window
    docker compose exec web python manage.py generate_root_key

    Copy the printed value into secrets/root_key.txt (see secrets/README.md), then restart so it picks it up:

    Terminal window
    docker compose up -d web
  3. Create the first Superadmin. There are two ways to do this, so pick one:

    • Via the web UI (recommended): visit /setup/ on whichever address applies to your method (e.g. https://<your-domain>/setup/, or http://localhost:8000/setup/ for Method 3) and fill in the form. This page only ever works before any Superadmin exists on the instance; once you’ve created one, it redirects to the login page instead.

    • Via the CLI, useful for scripted or automated deployments:

      Terminal window
      docker compose exec web python manage.py bootstrap_superadmin --username admin --email admin@example.com

      You’ll be prompted for a password (14+ characters).

    Either way, on first login you’ll be walked through TOTP MFA enrollment (QR code plus confirmation), which is required for every local account, with no way to skip it.

  4. Visit /login/ (or you’re probably already there from step 3).