Skip to content

Cloud Deployment ​

Run the ClawMetry dashboard on a remote server and access it from anywhere.


Any Linux VM works: DigitalOcean, Hetzner, AWS EC2, GCP Compute Engine, etc.

1. Install Docker ​

Follow the official Docker installation guide for your distro, then start the dashboard:

bash
docker run -d \
  --name clawmetry \
  -p 8900:8900 \
  -v /path/to/openclaw/agent:/home/clawmetry/.openclaw \
  stritti/clawmetry:latest

If your OpenClaw workspace is on a different machine, mount or sync it first, then pass the path:

bash
docker run -d \
  --name clawmetry \
  -p 8900:8900 \
  -v /path/to/openclaw/agent:/workspace \
  stritti/clawmetry:latest --workspace /workspace

2. Secure access ​

SSH tunnel (simplest — no firewall rule needed):

bash
# From your laptop:
ssh -L 8900:localhost:8900 user@your-server
# Then open http://localhost:8900

Reverse proxy with nginx (production):

nginx
# /etc/nginx/sites-available/clawmetry
server {
    listen 443 ssl;
    server_name dashboard.yourdomain.com;

    ssl_certificate     /etc/letsencrypt/live/dashboard.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dashboard.yourdomain.com/privkey.pem;

    # SSE needs long timeouts and buffering disabled
    proxy_read_timeout 600s;
    proxy_buffering    off;

    location / {
        auth_basic           "ClawMetry Dashboard";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass           http://127.0.0.1:8900;
        proxy_set_header     Host      $host;
        proxy_set_header     X-Real-IP $remote_addr;
    }
}

Reverse proxy with Caddy (auto-HTTPS):

dashboard.yourdomain.com {
    basicauth * {
        admin $2a$14$... # caddy hash-password
    }
    reverse_proxy localhost:8900
}

Option 2: Google Cloud Run (Serverless) ​

Ideal when your OpenClaw metrics are sent via OTLP.

Note: Cloud Run is stateless — file-based features (logs, transcripts, memory) require a mounted volume. For token/cost dashboards without local file access see OTLP-only mode below.

1. Deploy ​

⚠️ Security warning: --allow-unauthenticated makes the dashboard publicly accessible on the internet — anyone with the URL can view your agent usage data, session recordings, and logs. Omit this flag and instead restrict access via Cloud Run IAM, Identity-Aware Proxy (IAP), or a private ingress setting. The example below uses authentication; remove the --no-allow-unauthenticated flag and add your own access policy before exposing it publicly.

Use the pre-built image directly — no local build needed:

bash
gcloud run deploy clawmetry \
  --image stritti/clawmetry:latest \
  --region us-central1 \
  --no-allow-unauthenticated \
  --port 8900 \
  --memory 512Mi

To allow access, grant the roles/run.invoker role to specific users or groups:

bash
gcloud run services add-iam-policy-binding clawmetry \
  --region us-central1 \
  --member="user:you@example.com" \
  --role="roles/run.invoker"

2. Send OTLP data ​

Point your OpenClaw config at the Cloud Run URL:

yaml
diagnostics:
  otel:
    endpoint: https://clawmetry-xxxxx.run.app

The Usage tab and health checks will work. For the full feature set, run on a VM with the workspace mounted.


Option 3: Railway / Render / Fly.io ​

These platforms all support Docker images directly.

Railway ​

Deploy the pre-built stritti/clawmetry:latest Docker image directly:

  1. In the Railway dashboard, create a new service and choose Deploy from Docker image.
  2. Use stritti/clawmetry:latest as the image name.
  3. In the service settings, set the PORT environment variable to 8900.

After deployment, Railway will expose a public URL for the dashboard.

Fly.io ​

bash
fly launch --image stritti/clawmetry:latest

In the generated fly.toml, set the internal port to 8900:

toml
[[services]]
  internal_port = 8900
  protocol      = "tcp"

  [[services.ports]]
    handlers = ["http"]
    port     = 80

  [[services.ports]]
    handlers = ["tls", "http"]
    port     = 443

Render ​

  1. Create a new Web Service in the Render dashboard.
  2. Choose Deploy an existing image and enter stritti/clawmetry:latest.
  3. Set the Port to 8900.
  4. Add any environment variables you need (e.g. OPENCLAW_DATA_DIR).

OTLP-Only Mode (Metrics Without Workspace) ​

If you only want cost/token dashboards without local file access, the dashboard runs in "OTLP-only" mode — no workspace volume required:

bash
docker run -d \
  --name clawmetry \
  -p 8900:8900 \
  stritti/clawmetry:latest

Configure OpenClaw to send metrics:

yaml
diagnostics:
  otel:
    endpoint: http://your-dashboard-host:8900

You get: Usage tab (tokens, costs, model breakdown), health checks, and the Flow visualisation. Tabs that need local files (Logs, Memory, Transcripts) show empty states gracefully.


Custom Port ​

The container defaults to port 8900. Override it with an environment variable:

bash
docker run -d \
  -p 9000:9000 \
  -e OPENCLAW_DASHBOARD_PORT=9000 \
  stritti/clawmetry:latest

Or via a CLI flag:

bash
docker run -d \
  -p 9000:9000 \
  stritti/clawmetry:latest --port 9000

Troubleshooting ​

IssueFix
SSE streams disconnectSet proxy_read_timeout 600s and proxy_buffering off in nginx
Empty tabs on Cloud RunExpected — mount a volume or use OTLP-only mode
Port already in useSet OPENCLAW_DASHBOARD_PORT=9000 or pass --port 9000
High memory on long runsMetrics auto-cap at ~10 K entries per category

See also ​

Released under the MIT License.