What you will do
- The checked-in Compose file is for local evaluation and development, not production.
- The UI is published on http://localhost/ and the API on http://localhost:8080.
- The Docker runner needs Docker socket access because it creates agent and step containers. Treat the runner host as a trusted execution boundary. See Runners and the dispatcher.
- Compose fails fast if the required bootstrap secrets are missing, so set them in
.envbefore starting. Requirements lists all seven.
Before you start
- Repository
- A current checkout of the NopsAI repository
git rev-parse --short HEAD - Runtime
- Docker 26+ with Compose v2
docker compose version - Ports
- 80, 8080, 9091, and 5432 free on the workstation
- Permission
- Local Docker access for the current user
docker ps
Steps
- 01
Set the required bootstrap secrets
Compose refuses to start without them. Generate high-entropy values rather than reusing anything from another environment.
Important- JWT_SIGNING_KEY and SERVICE_JWT_SIGNING_KEY must be different values.
Create .envbash cat >> .env <<EOF POSTGRES_PASSWORD=$(openssl rand -hex 16) DATABASE_URL=postgres://nopsai:$(grep POSTGRES_PASSWORD .env | cut -d= -f2)@db:5432/nopsai?sslmode=disable NOPSAI_MASTER_KEY=$(openssl rand -hex 32) JWT_SIGNING_KEY=$(openssl rand -hex 32) SERVICE_JWT_SIGNING_KEY=$(openssl rand -hex 32) AAA_SHARED_INTERNAL_TOKEN=$(openssl rand -hex 32) NOPSAI_BOOTSTRAP_ADMIN_PASSWORD=$(openssl rand -hex 12) EOF - 02
Build and start the stack
Run the Compose topology from the repository root.
Start Composebash docker compose up -d --buildExpected result- Compose creates the nopsai-net network and starts PostgreSQL, API, AAA, dispatcher, git-bot, UI, Gotenberg, the socket proxy, and the Docker runner.
- 03
Check service health
Confirm the core services are up before opening the setup flow.
Inspect local servicesbash docker compose ps curl -s localhost:8080/livez curl -s localhost:8080/healthzVerify/livezanswers immediately;/healthzbecomes ready once PostgreSQL is reachable.
- 04
Follow the setup logs
Keep the services that own first-run setup and runner registration visible while you complete the wizard.
Follow logsbash docker compose logs -f nopsai aaa dispatcher docker-runnerVerify- Open http://localhost/ and confirm the setup page loads.
How it works
The Compose stack is optimized for local inspection. It is the fastest way to validate product behavior before moving to a release bundle or a Helm deployment.
Everything you configure through the wizard can later be exported to a configuration repository, so a local evaluation is not throwaway work.
Examples
docker compose down
# add -v to also drop the database volume
docker compose down -vLimits
- Local fallback secrets exist for development only and must be replaced outside a workstation.
Implementation evidence
docker-compose.yamlThe exact local topology, ports, and environment variables.
doc/enterprise-gates.mdStartup gates that separate local defaults from production requirements.

