One-Click Deploy Templates
Deploy chmonitor to Railway, Render, or Fly.io in minutes using community-maintained templates.
Deploy chmonitor on Railway, Render, or Fly.io with community-maintained templates. Each template runs the published image and wires up a health check for you.
Starting-point templates, not verified pipelines
These are starting-point templates, not verified CI pipelines. They have not been boot-tested end-to-end against a live ClickHouse instance in automated CI. Review the env var placeholders, substitute real values, and verify the deployment works in your environment before relying on it in production.
Prerequisites
All three templates run the published image ghcr.io/chmonitor/chmonitor:latest, expose port 3000, and define a health check against /api/healthz. You must supply three env vars:
| Variable | Description |
|---|---|
CLICKHOUSE_HOST | ClickHouse HTTP URL, e.g. http://your-host:8123 |
CLICKHOUSE_USER | ClickHouse username |
CLICKHOUSE_PASSWORD | ClickHouse password (use your platform's secret store) |
The template files live in deploy/templates/ in the repository.
Setup
Pick your platform.
Template: deploy/templates/railway.json
Create a new project
In the Railway dashboard, choose New Project → Deploy from image and set the image to ghcr.io/chmonitor/chmonitor:latest.
Set environment variables
Go to Variables and add the three env vars above. Use Railway's secret management for CLICKHOUSE_PASSWORD.
Open your app
Railway auto-assigns a public URL. The health check path is /api/healthz.
Alternatively, copy deploy/templates/railway.json into your repository root as railway.json — Railway picks it up automatically on the next deploy.
{
"build": {
"builder": "IMAGE",
"image": "ghcr.io/chmonitor/chmonitor:latest"
},
"deploy": {
"healthcheckPath": "/api/healthz"
}
}Template: deploy/templates/render.yaml
Fork or copy the template
Fork or copy deploy/templates/render.yaml as render.yaml in your repository root.
Create a Blueprint
In the Render dashboard, choose New → Blueprint and point it at your repository.
Set the password as a secret
Render reads render.yaml, pulls ghcr.io/chmonitor/chmonitor:latest, and creates the service. Set CLICKHOUSE_PASSWORD as a Secret in the Render environment (do not store it in plain text in render.yaml).
Key snippet:
services:
- type: web
name: chmonitor
image: ghcr.io/chmonitor/chmonitor:latest
healthCheckPath: /api/healthz
envVars:
- key: CLICKHOUSE_HOST
value: http://YOUR_CLICKHOUSE_HOST:8123
- key: CLICKHOUSE_USER
value: YOUR_CLICKHOUSE_USER
- key: CLICKHOUSE_PASSWORD
value: YOUR_CLICKHOUSE_PASSWORD # use Render secret insteadTemplate: deploy/templates/fly.toml
Install Fly CLI and login
fly auth loginCopy and edit the template
Copy deploy/templates/fly.toml to your working directory. Edit app, primary_region, and CLICKHOUSE_HOST / CLICKHOUSE_USER.
Store the password as a secret
fly secrets set CLICKHOUSE_PASSWORD=your-passwordDeploy
fly launch --no-deploy # imports fly.toml
fly deployThe health check polls /api/healthz every 10 seconds with a 20-second grace period on startup.
Verify
- Open
https://your-app-url— you should land on the overview page. - If the page loads but charts are empty, check that the ClickHouse user has
SELECTonsystem.*. - If the health check fails, verify
CLICKHOUSE_HOSTis reachable from inside the container (use the private/internal hostname your platform provides, notlocalhost).
Troubleshooting
More configuration
For additional configuration (authentication, AI agent, conversation store), see the Docker deploy guide — the same env vars apply.
Related
Docker deployment
Full env var reference — auth, AI agent, and conversation store apply the same way.
Cloudflare Workers
Serverless, global hosting for the current v0.3+ app.
Kubernetes deployment
Install chmonitor with the Helm chart.
Production checklist
Harden and validate before exposing to a team or the internet.