- Add section on configuring LLM provider API keys (Anthropic, OpenAI, Gemini, etc.) - Include wrapper reference to render_clawdbot repository - Update render.yaml blueprint example with API key environment variables - Add instructions for setting API keys in Render dashboard - Document alternative config file method
225 lines
7.5 KiB
Plaintext
225 lines
7.5 KiB
Plaintext
---
|
|
title: Deploy on Render
|
|
---
|
|
|
|
Deploy Moltbot 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.
|
|
|
|
## Prerequisites
|
|
|
|
- A [Render account](https://render.com) (free tier available)
|
|
- An API key from your preferred [model provider](/providers)
|
|
|
|
## Alternative: Wrapper with Installer
|
|
|
|
For a deployment with a built-in installer and proxied Control UI (including WebSocket support), see the [render_clawdbot wrapper](https://github.com/ojusave/render_clawdbot). This wrapper provides:
|
|
|
|
- **Install Wizard** at `/install` (password protected)
|
|
- **Control UI** at `/` and `/clawdbot` (reverse-proxied, including WebSockets)
|
|
- **Export / Import backups** to migrate deployments
|
|
|
|
The wrapper handles proxy header stripping and WebSocket proxying automatically.
|
|
|
|
## Deploy with a Render Blueprint
|
|
|
|
<a href="https://render.com/deploy?repo=https://github.com/moltbot/moltbot" target="_blank" rel="noreferrer">Deploy to Render</a>
|
|
|
|
Clicking this link will:
|
|
|
|
1. Create a new Render service from the `render.yaml` Blueprint at the root of this repo.
|
|
2. Prompt you to set `SETUP_PASSWORD`
|
|
3. Build the Docker image and deploy
|
|
|
|
Once deployed, your service URL follows the pattern `https://<service-name>.onrender.com`.
|
|
|
|
## Understanding the Blueprint
|
|
|
|
Render Blueprints are YAML files that define your infrastructure. The `render.yaml` in this
|
|
repository configures everything needed to run Moltbot:
|
|
|
|
```yaml
|
|
services:
|
|
- type: web
|
|
name: moltbot
|
|
runtime: docker
|
|
plan: starter
|
|
healthCheckPath: /health
|
|
envVars:
|
|
- key: PORT
|
|
value: "8080"
|
|
- key: SETUP_PASSWORD
|
|
sync: false # prompts during deploy
|
|
- key: CLAWDBOT_STATE_DIR
|
|
value: /data/.clawdbot
|
|
- key: CLAWDBOT_WORKSPACE_DIR
|
|
value: /data/workspace
|
|
- key: CLAWDBOT_GATEWAY_TOKEN
|
|
generateValue: true # auto-generates a secure token
|
|
# LLM Provider API Keys (set these in Render dashboard as secrets)
|
|
- key: ANTHROPIC_API_KEY
|
|
sync: false
|
|
- key: OPENAI_API_KEY
|
|
sync: false
|
|
- key: GEMINI_API_KEY
|
|
sync: false
|
|
- key: GROQ_API_KEY
|
|
sync: false
|
|
- key: OPENROUTER_API_KEY
|
|
sync: false
|
|
# Add other provider keys as needed (MISTRAL_API_KEY, XAI_API_KEY, etc.)
|
|
disk:
|
|
name: moltbot-data
|
|
mountPath: /data
|
|
sizeGB: 1
|
|
```
|
|
|
|
Key Blueprint features used:
|
|
|
|
| Feature | Purpose |
|
|
|---------|---------|
|
|
| `runtime: docker` | Builds from the repo's Dockerfile |
|
|
| `healthCheckPath` | Render monitors `/health` and restarts unhealthy instances |
|
|
| `sync: false` | Prompts for value during deploy (secrets) |
|
|
| `generateValue: true` | Auto-generates a cryptographically secure value |
|
|
| `disk` | Persistent storage that survives redeploys |
|
|
|
|
## Choosing a plan
|
|
|
|
| Plan | Spin-down | Disk | Best for |
|
|
|------|-----------|------|----------|
|
|
| Free | After 15 min idle | Not available | Testing, demos |
|
|
| Starter | Never | 1GB+ | Personal use, small teams |
|
|
| Standard+ | Never | 1GB+ | Production, multiple channels |
|
|
|
|
The Blueprint defaults to `starter`. To use free tier, change `plan: free` in your fork's
|
|
`render.yaml` (but note: no persistent disk means config resets on each deploy).
|
|
|
|
## After deployment
|
|
|
|
### Complete the setup wizard
|
|
|
|
1. Navigate to `https://<your-service>.onrender.com/setup`
|
|
2. Enter your `SETUP_PASSWORD`
|
|
3. Select a model provider and paste your API key
|
|
4. Optionally configure messaging channels (Telegram, Discord, Slack)
|
|
5. Click **Run setup**
|
|
|
|
### Access the Control UI
|
|
|
|
The web dashboard is available at `https://<your-service>.onrender.com/moltbot`.
|
|
|
|
## Render Dashboard features
|
|
|
|
### Logs
|
|
|
|
View real-time logs in **Dashboard → your service → Logs**. Filter by:
|
|
- Build logs (Docker image creation)
|
|
- Deploy logs (service startup)
|
|
- Runtime logs (application output)
|
|
|
|
### Shell access
|
|
|
|
For debugging, open a shell session via **Dashboard → your service → Shell**. The persistent disk is mounted at `/data`.
|
|
|
|
### Environment variables
|
|
|
|
Modify variables in **Dashboard → your service → Environment**. Changes trigger an automatic redeploy.
|
|
|
|
#### Configuring LLM API Keys
|
|
|
|
After deployment, you need to configure at least one LLM provider API key. Set these in the Render dashboard:
|
|
|
|
**Most common providers:**
|
|
|
|
- **Anthropic (Claude)**: `ANTHROPIC_API_KEY` — Get from [Anthropic Console](https://console.anthropic.com/)
|
|
- **OpenAI (GPT)**: `OPENAI_API_KEY` — Get from [OpenAI Platform](https://platform.openai.com/api-keys)
|
|
- **Google Gemini**: `GEMINI_API_KEY` — Get from [Google AI Studio](https://aistudio.google.com/app/apikey)
|
|
- **Groq**: `GROQ_API_KEY` — Get from [Groq Console](https://console.groq.com/keys)
|
|
- **OpenRouter**: `OPENROUTER_API_KEY` — Get from [OpenRouter](https://openrouter.ai/keys)
|
|
|
|
**Additional providers:**
|
|
|
|
- `MISTRAL_API_KEY` — Mistral AI
|
|
- `XAI_API_KEY` — xAI (Grok)
|
|
- `OPENCODE_API_KEY` — OpenCode Zen
|
|
- `DEEPGRAM_API_KEY` — Deepgram (speech-to-text)
|
|
|
|
To set API keys:
|
|
|
|
1. Go to **Dashboard → your service → Environment**
|
|
2. Click **Add Environment Variable**
|
|
3. Enter the variable name (e.g., `ANTHROPIC_API_KEY`)
|
|
4. Enter your API key value
|
|
5. Click **Save Changes**
|
|
|
|
The service will automatically redeploy with the new environment variable.
|
|
|
|
**Alternative: Config file method**
|
|
|
|
You can also configure API keys in the `clawdbot.json` config file using the `env` block, though environment variables are preferred for security:
|
|
|
|
```json5
|
|
{
|
|
"env": {
|
|
"ANTHROPIC_API_KEY": "sk-ant-...",
|
|
"OPENAI_API_KEY": "sk-..."
|
|
}
|
|
}
|
|
```
|
|
|
|
See [Model Providers](/concepts/model-providers) for a complete list of supported providers and their configuration.
|
|
|
|
### Auto-deploy
|
|
|
|
If you use the original Moltbot repository, Render will not auto-deploy your Moltbot. To update it, run a manual Blueprint sync from the dashboard.
|
|
|
|
## Custom domain
|
|
|
|
1. Go to **Dashboard → your service → Settings → Custom Domains**
|
|
2. Add your domain
|
|
3. Configure DNS as instructed (CNAME to `*.onrender.com`)
|
|
4. Render provisions a TLS certificate automatically
|
|
|
|
## Scaling
|
|
|
|
Render supports horizontal and vertical scaling:
|
|
|
|
- **Vertical**: Change the plan to get more CPU/RAM
|
|
- **Horizontal**: Increase instance count (Standard plan and above)
|
|
|
|
For Moltbot, vertical scaling is usually sufficient. Horizontal scaling requires sticky sessions or external state management.
|
|
|
|
## Backups and migration
|
|
|
|
Export your configuration and workspace at any time:
|
|
|
|
```
|
|
https://<your-service>.onrender.com/setup/export
|
|
```
|
|
|
|
This downloads a portable backup you can restore on any Moltbot host.
|
|
|
|
## Troubleshooting
|
|
|
|
### Service won't start
|
|
|
|
Check the deploy logs in the Render Dashboard. Common issues:
|
|
|
|
- Missing `SETUP_PASSWORD` — the Blueprint prompts for this, but verify it's set
|
|
- Port mismatch — ensure `PORT=8080` matches the Dockerfile's exposed port
|
|
|
|
### Slow cold starts (free tier)
|
|
|
|
Free 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.
|
|
|
|
### Data loss after redeploy
|
|
|
|
This happens on free tier (no persistent disk). Upgrade to a paid plan, or
|
|
regularly export your config via `/setup/export`.
|
|
|
|
### Health check failures
|
|
|
|
Render 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:
|
|
|
|
- Build logs for errors
|
|
- Whether the container runs locally with `docker build && docker run`
|