Operate

Deployment

OpsKeeper supports standalone, high-availability, and Kubernetes deployments. This page covers the canonical layouts; detailed manifests live under deploy/ in the repo.

Standalone

Single-host install for development or small teams. One binary, one PostgreSQL, one Qdrant instance.

standalone
# 1. Configure
cp .env.example .env
$EDITOR .env   # set POSTGRES_DSN, QDRANT_URL, OPSKEEPER_PLUGIN_HMAC

# 2. Boot
docker compose up -d

# 3. Verify
opskeeper health
opskeeper incident list --limit 5

High availability

Run multiple OpsKeeper control plane instances behind a TCP load balancer. The orchestrator serializes per-incident via MySQL GET_LOCK advisory locks, so the leader is implicit, not elected.

ha topology
              ┌──────────────┐
              │  client / web │
              └──────┬───────┘
                     ▼
            ┌──────────────────┐
            │ TCP load balancer │
            └──────┬───────────┘
                   ▼
   ┌───────────┬──┴──┬───────────┐
   ▼           ▼     ▼           ▼
opskeeper-1 opskeeper-2 opskeeper-3 opskeeper-N
   └───────────┴──┬──┴───────────┘
                  ▼
        ┌──────────────────────┐
        │  PostgreSQL primary  │
        │   + read replicas    │
        └──────────────────────┘
                  ▼
        ┌──────────────────────┐
        │  Qdrant cluster      │
        └──────────────────────┘

See docs/deployment/ha.md for the canonical Compose and Kubernetes manifests, plus backup/restore runbooks.

Kubernetes

A Kubernetes Operator is on the Q1 2027 roadmap. Today, the supported approach is the Helm chart under deploy/k8s/:

kubernetes
helm upgrade --install opskeeper deploy/k8s/charts/opskeeper \
  --namespace opskeeper --create-namespace \
  --set persistence.postgres.size=200Gi \
  --set persistence.qdrant.size=100Gi

Edge install

The opskeeper-edge binary runs the worker side at the edge (factory floor, retail POS, regional POP). It forwards evidence to a central control plane over the plugin stdio MCP channel.

edge
# Provision a new edge
opskeeper-edge provision \
  --endpoint https://opskeeper.internal.example.com \
  --name factory-floor-7

# Run the edge daemon
opskeeper-edge serve --config /etc/opskeeper/edge.yaml

Upgrade

Follow the upgrade runbook for your layout. The general pattern is:

  1. Drain active incidents to verified or postmortem.
  2. Apply the new image / binary.
  3. Roll the control plane one instance at a time.
  4. Replay the most recent ledger events to confirm no event was lost.

External dependencies

See docs/deployment/external-deps.md for the full table of required and optional services, including minimum versions and the failure modes if each is unavailable.