Pipeline stages
Stage details
1. Build
ezForge builds your container image from theDockerfile in your project root. You can skip this stage by providing a pre-built OCI image URI:
2. Trivy vulnerability scan
Every image is scanned with Trivy before deployment. Results are:- Logged to the deployment record (visible in the dashboard and via
ezforge servers status) HIGHseverity CVEs flag the deployment with a warning but do not block itCRITICALseverity CVEs block the deployment; the pipeline stops and auto-rollback is triggered
3. Push to registry
The built and scanned image is pushed to the ezForge private registry. Images are namespaced per-project for isolation.4. Provision microVM
ezForge creates or updates a Fly.io Machine running your container in a Firecracker microVM. Each server gets its own isolated VM — no shared processes, no shared filesystem, no shared network with other customers. Machine configuration comes fromezforge.toml or server settings:
cpu:shared-1x,shared-2x,performance-1xmemoryMb:256,512,1024,2048- Region: one of
ord,iad,lax,ams,syd
5. Health check
After the VM starts, ezForge pollsGET {healthCheckPath} (default: /healthz) until it returns HTTP 200 or the timeout is reached (default: 30s).
Your server must implement this endpoint:
6. Traffic swap
Once the health check passes, ezForge atomically routes all incoming traffic to the new machine. The swap is near-instantaneous; in-flight requests on the old machine are drained gracefully. Your server subdomain ({slug}.mcp.ezforge.ai) always points to the currently healthy deployment.
7. Cleanup
The previous machine is stopped (not deleted) immediately after the traffic swap. It remains instopped state for 1 hour for emergency recovery, then is permanently deleted.
Auto-rollback
If the health check fails or times out, ezForge automatically:- Stops the new machine
- Restores the previous deployment (same process as a manual rollback)
- Sets the deployment status to
failed
ezforge.toml:
Manual rollback
Roll back to any of the last 10 deployments at any time:Deployment retention
By default, ezForge keeps the last 10 deployments per server (3 on Free), not counting the currently active one. Older deployments are automatically cleaned up. You can adjust this:Zero-downtime deploys
ezForge achieves zero-downtime deploys through:- Health check gate before traffic swap
- Graceful drain of in-flight requests on the old machine
- Atomic subdomain routing switch
- Auto-rollback if anything goes wrong
Deployment status values
| Status | Description |
|---|---|
pending | Queued, pipeline not yet started |
building | Build/scan/push in progress |
running | Successfully deployed and serving traffic |
failed | Pipeline failed; auto-rollback triggered |
rolled_back | Superseded by a newer deploy or rollback |