Deployment
This guide covers three deployment paths: Linux VM with systemd, Docker Compose, and Kubernetes.
Prerequisites
Section titled “Prerequisites”- PostgreSQL 14+
- S3-compatible object storage (RustFS (bundled), MinIO, AWS S3, or other S3-compatible storage)
edgeplane-towerbinary (see Installation)
Linux VM / systemd
Section titled “Linux VM / systemd”1. Place the binary
Section titled “1. Place the binary”cp target/release/edgeplane-tower /usr/local/bin/edgeplane-tower2. Environment file
Section titled “2. Environment file”Create /etc/edgeplane/env:
# AuthAUTH_MODE=dualOIDC_REQUIRED=falseOIDC_ISSUER_URL=https://<your-idp-host>/application/o/<provider-slug>/OIDC_AUDIENCE=<oidc-client-id>EP_ADMIN_EMAILS=<comma-separated-admin-emails>
# DatabaseDATABASE_URL=postgresql://edgeplane:password@localhost/edgeplaneDB_POOL_SIZE=20DB_MAX_OVERFLOW=10DB_POOL_PRE_PING=trueDB_POOL_RECYCLE_SECONDS=3600EP_DB_RUNTIME_MIGRATIONS=false
# S3-compatible object storage (optional, for artifact/doc content)EP_OBJECT_STORAGE_ENDPOINT=http://<s3-host>:<port>EP_OBJECT_STORAGE_REGION=us-east-1EP_OBJECT_STORAGE_BUCKET=edgeplaneEP_OBJECT_STORAGE_SECURE=falseEP_OBJECT_STORAGE_ACCESS_KEY=<access-key>EP_OBJECT_STORAGE_ACCESS_SECRET=<secret>
# Request limits (optional)EP_REQUEST_TIMEOUT_SECONDS=30EP_RATE_LIMIT_DEFAULT_CAPACITY=240EP_RATE_LIMIT_SEARCH_CAPACITY=60EP_RATE_LIMIT_WRITE_CAPACITY=120EP_RATE_LIMIT_APPROVAL_CAPACITY=303. systemd service
Section titled “3. systemd service”Create /etc/systemd/system/edgeplane.service:
[Unit]Description=EdgePlane Control PlaneAfter=network.target postgresql.service
[Service]Type=simpleExecStart=/usr/local/bin/edgeplane-tower --serve --bind 0.0.0.0:8008Restart=on-failureEnvironmentFile=/etc/edgeplane/env
[Install]WantedBy=multi-user.targetEnable and start:
sudo systemctl daemon-reloadsudo systemctl enable --now edgeplane4. Verify
Section titled “4. Verify”curl http://localhost:8008/healthcurl http://localhost:8008/raft/statusDocker Compose
Section titled “Docker Compose”The repo ships a production-oriented Compose stack and a quickstart variant.
Quickstart (local dev — Postgres + RustFS, no external infrastructure required):
docker compose -f docker-compose.quickstart.yml upFull stack (Postgres + S3-compatible storage):
Provide secrets via environment before startup:
export POSTGRES_PASSWORD=<password>export EP_OBJECT_STORAGE_ACCESS_KEY=<key>export EP_OBJECT_STORAGE_ACCESS_SECRET=<secret>docker compose upHealth endpoints:
/health— process alive (no auth required)/readyz— DB ready, object storage reachable when configured
Kubernetes
Section titled “Kubernetes”When running on Kubernetes, source all secrets via platform secret objects — do not commit credentials to Git.
# Recommended pattern: envFrom + secretRefspec: containers: - name: edgeplane-tower image: ghcr.io/ryanmerlin/edgeplane:<version> envFrom: - secretRef: name: edgeplane-env ports: - containerPort: 8008Store all auth settings (OIDC secrets, static token, DB credentials, S3 credentials) as Kubernetes Secrets and mount via envFrom.secretRef or env.valueFrom.secretKeyRef.
See Helm chart in the repo for a complete Kubernetes deployment.
Auth Modes
Section titled “Auth Modes”AUTH_MODE | Behavior |
|---|---|
token | Static bearer token only |
oidc | OIDC JWT only |
dual | Accept both token and OIDC |
OIDC_REQUIRED=true in dual mode enforces OIDC for non-/mcp paths. If AUTH_MODE is unset, the server defaults to OIDC when OIDC vars are present.
Database Migrations
Section titled “Database Migrations”edgeplane-tower runs migrations automatically on startup. To run manually:
cd crates/edgeplane-tower && sqlx migrate runConfirm migration state:
sqlx migrate infoValidation Checklist
Section titled “Validation Checklist”After deployment:
-
GET /healthreturns 200 without auth -
GET /readyzreturns 200 (DB ready, S3 reachable if configured) -
edgeplane health --jsonreturns connected from operator workstation - Bearer token callers are not admins unless their subject/email is in
EP_ADMIN_SUBJECTSorEP_ADMIN_EMAILS - Create + delete mission paths work with expected authorization
See Also
Section titled “See Also”- OIDC Authentication — configure SSO
- Upgrading — release upgrade checklist