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

Networking and exposure

What has to be reachable from where, and what should never be exposed.

ConceptAdministratorSecurity

Key points

  • Runners hold long-lived outbound connections to the dispatcher, so runners never need inbound access.
  • The UI and API are the only surfaces that normally need external exposure, plus the Git webhook endpoint when non-GitHub providers are used.
  • Docker step containers default to bridge networking; DOCKER_NETWORK_NAME=none removes egress entirely.
  • GET /metrics is public by default for scraper compatibility and can be locked behind bearer auth with METRICS_REQUIRE_AUTH.
  • The Docker socket proxy exposes only the allow-listed reads System Logs needs and must never be replaced by the raw socket.

How it works

Internal service URLs (AAA_API_URL, GIT_BOT_API_URL, NOPSAI_API_URL) describe a private network. Exposing AAA or the dispatcher publicly removes a boundary the design depends on.

Provider endpoints for LLM and MCP must be reachable from the API runtime. Inside containers localhost refers to the container, so host-launched tools need a LAN IP or host.docker.internal.

Examples

Confirm what is actually exposedbash
# from the host: the published surfaces
curl -s localhost:8080/livez
curl -sI localhost/ | head -1

# from anywhere else: these should not answer
nc -z -w2 $HOST 9091 && echo "dispatcher reachable" || echo "dispatcher closed"
nc -z -w2 $HOST 5432 && echo "database reachable" || echo "database closed"
Result

On a correctly bound install the dispatcher and database report closed from anywhere but the host itself.

Replace before running
  • $HOST is the address another machine would use to reach the install.

Limits

Current behavior
  • The repository documents no Kubernetes NetworkPolicy set and no automatic certificate-management integration.

Implementation evidence

  • docker-compose.yaml

    Published ports and bind address defaults.

  • services/docker-socket-proxy

    The allow-listed Docker API surface.