{
  "title": "Deploy on Render",
  "content": "Source: https://docs.openclaw.ai/render\n\nDeploy OpenClaw on Render using Infrastructure as Code. The included `render.yaml` Blueprint defines your entire stack declaratively, service, disk, environment variables, so you can deploy with a single click and version your infrastructure alongside your code.\n\n* A [Render account](https://render.com) (free tier available)\n* An API key from your preferred [model provider](/providers)\n\n## Deploy with a Render Blueprint\n\n<a href=\"https://render.com/deploy?repo=https://github.com/openclaw/openclaw\">\n  Deploy to Render\n</a>\n\nClicking this link will:\n\n1. Create a new Render service from the `render.yaml` Blueprint at the root of this repo.\n2. Prompt you to set `SETUP_PASSWORD`\n3. Build the Docker image and deploy\n\nOnce deployed, your service URL follows the pattern `https://<service-name>.onrender.com`.\n\n## Understanding the Blueprint\n\nRender Blueprints are YAML files that define your infrastructure. The `render.yaml` in this\nrepository configures everything needed to run OpenClaw:\n\nKey Blueprint features used:\n\n| Feature               | Purpose                                                    |\n| --------------------- | ---------------------------------------------------------- |\n| `runtime: docker`     | Builds from the repo's Dockerfile                          |\n| `healthCheckPath`     | Render monitors `/health` and restarts unhealthy instances |\n| `sync: false`         | Prompts for value during deploy (secrets)                  |\n| `generateValue: true` | Auto-generates a cryptographically secure value            |\n| `disk`                | Persistent storage that survives redeploys                 |\n\n| Plan      | Spin-down         | Disk          | Best for                      |\n| --------- | ----------------- | ------------- | ----------------------------- |\n| Free      | After 15 min idle | Not available | Testing, demos                |\n| Starter   | Never             | 1GB+          | Personal use, small teams     |\n| Standard+ | Never             | 1GB+          | Production, multiple channels |\n\nThe Blueprint defaults to `starter`. To use free tier, change `plan: free` in your fork's\n`render.yaml` (but note: no persistent disk means config resets on each deploy).\n\n### Complete the setup wizard\n\n1. Navigate to `https://<your-service>.onrender.com/setup`\n2. Enter your `SETUP_PASSWORD`\n3. Select a model provider and paste your API key\n4. Optionally configure messaging channels (Telegram, Discord, Slack)\n5. Click **Run setup**\n\n### Access the Control UI\n\nThe web dashboard is available at `https://<your-service>.onrender.com/openclaw`.\n\n## Render Dashboard features\n\nView real-time logs in **Dashboard → your service → Logs**. Filter by:\n\n* Build logs (Docker image creation)\n* Deploy logs (service startup)\n* Runtime logs (application output)\n\nFor debugging, open a shell session via **Dashboard → your service → Shell**. The persistent disk is mounted at `/data`.\n\n### Environment variables\n\nModify variables in **Dashboard → your service → Environment**. Changes trigger an automatic redeploy.\n\nIf you use the original OpenClaw repository, Render will not auto-deploy your OpenClaw. To update it, run a manual Blueprint sync from the dashboard.\n\n1. Go to **Dashboard → your service → Settings → Custom Domains**\n2. Add your domain\n3. Configure DNS as instructed (CNAME to `*.onrender.com`)\n4. Render provisions a TLS certificate automatically\n\nRender supports horizontal and vertical scaling:\n\n* **Vertical**: Change the plan to get more CPU/RAM\n* **Horizontal**: Increase instance count (Standard plan and above)\n\nFor OpenClaw, vertical scaling is usually sufficient. Horizontal scaling requires sticky sessions or external state management.\n\n## Backups and migration\n\nExport your configuration and workspace at any time:\n\nThis downloads a portable backup you can restore on any OpenClaw host.\n\n### Service won't start\n\nCheck the deploy logs in the Render Dashboard. Common issues:\n\n* Missing `SETUP_PASSWORD` — the Blueprint prompts for this, but verify it's set\n* Port mismatch — ensure `PORT=8080` matches the Dockerfile's exposed port\n\n### Slow cold starts (free tier)\n\nFree tier services spin down after 15 minutes of inactivity. The first request after spin-down takes a few seconds while the container starts. Upgrade to Starter plan for always-on.\n\n### Data loss after redeploy\n\nThis happens on free tier (no persistent disk). Upgrade to a paid plan, or\nregularly export your config via `/setup/export`.\n\n### Health check failures\n\nRender expects a 200 response from `/health` within 30 seconds. If builds succeed but deploys fail, the service may be taking too long to start. Check:\n\n* Build logs for errors\n* Whether the container runs locally with `docker build && docker run`",
  "code_samples": [
    {
      "code": "Key Blueprint features used:\n\n| Feature               | Purpose                                                    |\n| --------------------- | ---------------------------------------------------------- |\n| `runtime: docker`     | Builds from the repo's Dockerfile                          |\n| `healthCheckPath`     | Render monitors `/health` and restarts unhealthy instances |\n| `sync: false`         | Prompts for value during deploy (secrets)                  |\n| `generateValue: true` | Auto-generates a cryptographically secure value            |\n| `disk`                | Persistent storage that survives redeploys                 |\n\n## Choosing a plan\n\n| Plan      | Spin-down         | Disk          | Best for                      |\n| --------- | ----------------- | ------------- | ----------------------------- |\n| Free      | After 15 min idle | Not available | Testing, demos                |\n| Starter   | Never             | 1GB+          | Personal use, small teams     |\n| Standard+ | Never             | 1GB+          | Production, multiple channels |\n\nThe Blueprint defaults to `starter`. To use free tier, change `plan: free` in your fork's\n`render.yaml` (but note: no persistent disk means config resets on each deploy).\n\n## After deployment\n\n### Complete the setup wizard\n\n1. Navigate to `https://<your-service>.onrender.com/setup`\n2. Enter your `SETUP_PASSWORD`\n3. Select a model provider and paste your API key\n4. Optionally configure messaging channels (Telegram, Discord, Slack)\n5. Click **Run setup**\n\n### Access the Control UI\n\nThe web dashboard is available at `https://<your-service>.onrender.com/openclaw`.\n\n## Render Dashboard features\n\n### Logs\n\nView real-time logs in **Dashboard → your service → Logs**. Filter by:\n\n* Build logs (Docker image creation)\n* Deploy logs (service startup)\n* Runtime logs (application output)\n\n### Shell access\n\nFor debugging, open a shell session via **Dashboard → your service → Shell**. The persistent disk is mounted at `/data`.\n\n### Environment variables\n\nModify variables in **Dashboard → your service → Environment**. Changes trigger an automatic redeploy.\n\n### Auto-deploy\n\nIf you use the original OpenClaw repository, Render will not auto-deploy your OpenClaw. To update it, run a manual Blueprint sync from the dashboard.\n\n## Custom domain\n\n1. Go to **Dashboard → your service → Settings → Custom Domains**\n2. Add your domain\n3. Configure DNS as instructed (CNAME to `*.onrender.com`)\n4. Render provisions a TLS certificate automatically\n\n## Scaling\n\nRender supports horizontal and vertical scaling:\n\n* **Vertical**: Change the plan to get more CPU/RAM\n* **Horizontal**: Increase instance count (Standard plan and above)\n\nFor OpenClaw, vertical scaling is usually sufficient. Horizontal scaling requires sticky sessions or external state management.\n\n## Backups and migration\n\nExport your configuration and workspace at any time:",
      "language": "unknown"
    }
  ],
  "headings": [
    {
      "level": "h2",
      "text": "Prerequisites",
      "id": "prerequisites"
    },
    {
      "level": "h2",
      "text": "Deploy with a Render Blueprint",
      "id": "deploy-with-a-render-blueprint"
    },
    {
      "level": "h2",
      "text": "Understanding the Blueprint",
      "id": "understanding-the-blueprint"
    },
    {
      "level": "h2",
      "text": "Choosing a plan",
      "id": "choosing-a-plan"
    },
    {
      "level": "h2",
      "text": "After deployment",
      "id": "after-deployment"
    },
    {
      "level": "h3",
      "text": "Complete the setup wizard",
      "id": "complete-the-setup-wizard"
    },
    {
      "level": "h3",
      "text": "Access the Control UI",
      "id": "access-the-control-ui"
    },
    {
      "level": "h2",
      "text": "Render Dashboard features",
      "id": "render-dashboard-features"
    },
    {
      "level": "h3",
      "text": "Logs",
      "id": "logs"
    },
    {
      "level": "h3",
      "text": "Shell access",
      "id": "shell-access"
    },
    {
      "level": "h3",
      "text": "Environment variables",
      "id": "environment-variables"
    },
    {
      "level": "h3",
      "text": "Auto-deploy",
      "id": "auto-deploy"
    },
    {
      "level": "h2",
      "text": "Custom domain",
      "id": "custom-domain"
    },
    {
      "level": "h2",
      "text": "Scaling",
      "id": "scaling"
    },
    {
      "level": "h2",
      "text": "Backups and migration",
      "id": "backups-and-migration"
    },
    {
      "level": "h2",
      "text": "Troubleshooting",
      "id": "troubleshooting"
    },
    {
      "level": "h3",
      "text": "Service won't start",
      "id": "service-won't-start"
    },
    {
      "level": "h3",
      "text": "Slow cold starts (free tier)",
      "id": "slow-cold-starts-(free-tier)"
    },
    {
      "level": "h3",
      "text": "Data loss after redeploy",
      "id": "data-loss-after-redeploy"
    },
    {
      "level": "h3",
      "text": "Health check failures",
      "id": "health-check-failures"
    }
  ],
  "url": "llms-txt#deploy-on-render",
  "links": []
}