FabricFabricHarness
Deployment

Render

Deploy a Fabric Harness HTTP server to Render as a Web Service via Blueprint.

Render is a one-click PaaS that runs containers (Web Services), Cron Jobs, and Postgres. The Fabric Harness Render target emits a Blueprint (render.yaml) plus a Dockerfile so you can deploy with no Render-specific code.

Quickstart

fabric-harness build --target render
# Output: .fabricharness/build/render/{Dockerfile, render.yaml, RENDER_DEPLOY.md, dist/, ...}

Push the bundle to a Git repo, then create a new Web Service on Render pointing at it. Render auto-detects render.yaml and provisions the service.

What ends up in the bundle

FilePurpose
DockerfileStandard Node 22 container image.
render.yamlBlueprint declaring a runtime: docker Web Service with /health healthcheck.
RENDER_DEPLOY.mdPer-bundle deployment notes (env vars, Postgres setup).
dist/server.mjsThe Fabric Harness HTTP server entry point.

Required environment variables

Set these in the Render dashboard (or via Blueprint env groups):

  • OPENAI_API_KEY (or other provider keys, depending on your model config)
  • DATABASE_URL — Postgres DSN (Render's managed Postgres works directly)
  • FABRIC_HARNESS_SESSION_STORE=postgres

Why Postgres for the session store?

Render restarts containers and resets the local disk on every redeploy. The default FileSessionStore will lose state. Provision a Render Postgres instance and use PostgresSessionStore (selected via FABRIC_HARNESS_SESSION_STORE=postgres + DATABASE_URL).

For session histories you can afford to lose (e.g. one-shot CI agents), InMemorySessionStore is fine — no Postgres required.

Health check

Render probes /health by default; the Fabric Harness HTTP server exposes that route automatically. No code changes needed.

When to use Render vs other targets

Pick Render when…Pick another target when…
You want one-click deploys without managing Kubernetes / containersYou need durable workflows → use --target temporal-worker
Your agent is HTTP-shaped (webhook, REST)Your agent runs on the edge → use --target cloudflare
You want managed Postgres alongside the appYou're on Azure / AWS / GCP → use --target aca / --target aks / Docker on ECS

Cost sanity

Render's free tier sleeps after 15 minutes of inactivity. For production, use Starter (always-on) or higher. Per-call cost telemetry shows up in fh metrics --breakdown so you can size your plan correctly.

See also