chmonitor
Deployment

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:

VariableDescription
CLICKHOUSE_HOSTClickHouse HTTP URL, e.g. http://your-host:8123
CLICKHOUSE_USERClickHouse username
CLICKHOUSE_PASSWORDClickHouse 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 instead

Template: deploy/templates/fly.toml

Copy 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-password

Deploy

fly launch --no-deploy   # imports fly.toml
fly deploy

The 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 SELECT on system.*.
  • If the health check fails, verify CLICKHOUSE_HOST is reachable from inside the container (use the private/internal hostname your platform provides, not localhost).

Troubleshooting

More configuration

For additional configuration (authentication, AI agent, conversation store), see the Docker deploy guide — the same env vars apply.

On this page