This runbook provides baseline production patterns for Warmplane.
Common runtime variables:
RUST_LOG=info,warmplane=debugWARMPLANE_OTEL_ENABLED=trueOTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317WARMPLANE_SERVICE_NAME=warmplane-prodUse env-backed secrets for upstream auth (tokenEnv, passwordEnv), or use the standard oauth2 flow for dynamic bearer tokens. Note that OAuth2 configuration requires loopback redirect capability on the running environment.
Example /etc/systemd/system/warmplane.service:
[Unit]
Description=Warmplane MCP Control Plane
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/warmplane daemon --config /etc/warmplane/mcp_servers.json
Restart=always
RestartSec=2
Environment=RUST_LOG=info
Environment=WARMPLANE_OTEL_ENABLED=true
Environment=OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4317
Environment=WARMPLANE_SERVICE_NAME=warmplane-prod
User=warmplane
Group=warmplane
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
Enable:
sudo systemctl daemon-reload
sudo systemctl enable --now warmplane
sudo systemctl status warmplane
Example Dockerfile:
FROM rust:1.85 as builder
WORKDIR /src
COPY . .
# Standard build (BM25 Lexical + Fuzzy search)
RUN cargo build --release
# Alternatively, build with embedded ONNX vector embeddings:
# RUN cargo build --release --features semantic-search
FROM debian:bookworm-slim
RUN useradd -m -u 10001 warmplane
COPY --from=builder /src/target/release/warmplane /usr/local/bin/warmplane
USER warmplane
ENTRYPOINT ["warmplane"]
Run:
docker run --rm \
-p 9090:9090 \
-p 9191:9191 \
-e RUST_LOG=info \
-e WARMPLANE_OTEL_ENABLED=true \
-e OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 \
-v $(pwd)/mcp_servers.json:/app/mcp_servers.json:ro \
warmplane:latest daemon --config /app/mcp_servers.json
# Port 9090 = REST control-plane API
# Port 9191 = Streamable HTTP/SSE MCP facade (when mcpHttpServer block is configured)
Minimal deployment concepts:
GET /v1/capabilitiesReadiness probe example:
readinessProbe:
httpGet:
path: /v1/capabilities
port: 9090
initialDelaySeconds: 3
periodSeconds: 5
Recommended initial targets:
/v1/capabilities and /v1/tools/call/v1/tools/call: environment-specific, start with < 1s for fast upstreamsUPSTREAM_TIMEOUT and UPSTREAM_ERRORPage-level alerts:
UPSTREAM_TIMEOUT)UPSTREAM_ERROR)Ticket-level alerts:
Before production rollout:
warmplane validate-config --config mcp_servers.json./scripts/smoke_mcp_server.shwarmplane mcp-http-server --config mcp_servers.json --port 9191 starts and responds on http://127.0.0.1:9191/mcptrace_id from client response envelope.