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.
# 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 5High 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.
┌──────────────┐
│ 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/:
helm upgrade --install opskeeper deploy/k8s/charts/opskeeper \
--namespace opskeeper --create-namespace \
--set persistence.postgres.size=200Gi \
--set persistence.qdrant.size=100GiEdge 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.
# 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.yamlUpgrade
Follow the upgrade runbook for your layout. The general pattern is:
- Drain active incidents to
verifiedorpostmortem. - Apply the new image / binary.
- Roll the control plane one instance at a time.
- 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.