Platform

Platform overviewArchitectureWorkflow orchestrationGitOps configurationGovernance and AAAAI and MCPKnowledge and contextRuntime and executionEvidence and monitoring

Use cases

All use casesProduction incidentRelease preparationHotfix to productionSecurity scan triage
Why NopsAIIntegrationsSecurity

Resources

All resourcesAI agent governanceMCP governanceMCP securitySelf-hosted platforms
PricingGitHub

Company

How a run worksAboutContactBook a demo

Install locally with Docker Compose

Start a local stack, confirm the control-plane services, and verify that the Docker runner registers.

TutorialNew userDeveloperAdministrator

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 .env before starting. Requirements lists all seven.

Before you start

Repository
A current checkout of the NopsAI repositorygit rev-parse --short HEAD
Runtime
Docker 26+ with Compose v2docker compose version
Ports
80, 8080, 9091, and 5432 free on the workstation
Permission
Local Docker access for the current userdocker ps

Steps

  1. 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
    Replace before running
    • Adjust the database user and host if you changed the Compose defaults.
  2. 02

    Build and start the stack

    Run the Compose topology from the repository root.

    Start Composebash
    docker compose up -d --build
    Expected result
    • Compose creates the nopsai-net network and starts PostgreSQL, API, AAA, dispatcher, git-bot, UI, Gotenberg, the socket proxy, and the Docker runner.
  3. 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/healthz
    Verify
    • /livez answers immediately; /healthz becomes ready once PostgreSQL is reachable.
  4. 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-runner
    Verify
    • 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

Tear the stack down againbash
docker compose down
# add -v to also drop the database volume
docker compose down -v
Result

All containers stop and the nopsai-net network is removed.

Limits

Current behavior
  • Local fallback secrets exist for development only and must be replaced outside a workstation.

Implementation evidence

  • docker-compose.yaml

    The exact local topology, ports, and environment variables.

  • doc/enterprise-gates.md

    Startup gates that separate local defaults from production requirements.