Skip to content

Deployment & Self-Hosting

DMOps.ai can be deployed in two ways: managed cloud (hosted by Dynamics Mobile on AWS) or self-hosted (you run it in your own infrastructure).


Managed cloud

For most organisations, the managed cloud option is the right choice. Dynamics Mobile handles:

  • Infrastructure provisioning and scaling
  • Database backups
  • Security patching
  • LLM provider key management

Contact sales@dynamicsmobile.com to get your managed tenant.


Self-hosting with Docker Compose

For development, evaluation, or air-gapped environments, you can run DMOps.ai locally using Docker Compose.

Prerequisites

  • Docker Desktop 4.x or Docker Engine 24+
  • At least 4 GB RAM available to Docker
  • An API key for at least one LLM provider (AWS Bedrock, Anthropic, or OpenRouter)

Quick start

bash
# Clone the repository
git clone https://github.com/MobileAffairsLTD/dm-acp.git
cd dm-acp

# Copy and edit the environment file
cp .env.example .env
# Edit .env — set HERMES_ACP_API_KEY, HERMES_ACP_MASTER_KEY, and your LLM provider key

# Start the dev stack
bash deployments/docker/deploy.sh --dev

The UI will be available at http://localhost:5173. The API will be available at http://localhost:8001.

Environment variables

VariableRequiredDescription
HERMES_ACP_API_KEYAPI key for the DMOps REST API
HERMES_ACP_MASTER_KEYMaster encryption key for integration credentials
PG_ENABLEDSet to 1 to use PostgreSQL instead of SQLite
DATABASE_URLIf PG_ENABLEDPostgreSQL connection string
ACP_MAX_CONCURRENTMax concurrent agent tasks (default: 4)

Self-hosting on AWS Fargate (production)

For production deployments, DMOps.ai runs on AWS ECS Fargate with a dedicated PostgreSQL database per tenant on Amazon Aurora Serverless.

Architecture

Internet → ALB → ECS Fargate (DMOps API)

                 Aurora Serverless (PostgreSQL)

                 S3 (artefact storage)

Sizing

TiervCPUMemoryMax concurrent tasksTypical use
Entry (T1)0.51 GB2Dev/demo, 1–3 agents
Light (T2)0.52 GB43–6 agents
Standard (T3)1.04 GB86–12 agents
Growth (T4)2.08 GB1612–24 agents
Scale (T5)4.016 GB3224+ agents

Deploying

Use the acpfleet.py CLI to provision and manage tenants:

bash
# Provision a new tenant
python acpfleet.py add <tenant_id> --tier 2

# Scale up
python acpfleet.py update <tenant_id> --tier 3

# Roll out a new image (zero downtime)
./deployments/rollout-image.ps1 -ImageTag <tag>

Never use terraform apply for image-only updates

Rolling out a new image must be done via rollout-image.ps1. Running acpfleet.py update for image changes triggers an ECS service replacement (destroy + recreate), causing ~5 min of downtime per tenant.


Health checks

The API exposes two health endpoints:

EndpointPurpose
GET /api/pingLiveness check — returns {"status": "ok"}
GET /api/statsReadiness check — includes DB connectivity and dispatcher status

Backups

On self-hosted PostgreSQL, configure your own backup policy. On managed Aurora Serverless, automated backups are enabled with a 7-day retention window.

Artefact files stored in S3 should have versioning enabled and a lifecycle policy for long-term retention.