Install
openclaw skills install openclaw-cloudflare-secureSecurely expose an OpenClaw Gateway WebUI on a VPS via Cloudflare Zero Trust Access + Cloudflare Tunnel (cloudflared), including DNS cutover for custom hostnames and optional cleanup of Tailscale Serve.
openclaw skills install openclaw-cloudflare-secureUse this when you want an easy public URL (e.g. openclaw.example.com) that is NOT directly exposed, protected by Cloudflare Access allowlist, and delivered via Cloudflare Tunnel to a local service (commonly http://127.0.0.1:18789).
http://127.0.0.1:18789 (or your chosen local port).example.com).CLOUDFLARE_API_TOKEN.
If you used Tailscale Serve earlier and want to remove it:
sudo tailscale serve reset
In Cloudflare Zero Trust:
cloudflared service install <TOKEN>On the VPS:
./scripts/install_cloudflared.sh
sudo ./scripts/tunnel_service_install.sh '<TOKEN>'
Verify:
sudo systemctl is-active cloudflared
sudo systemctl status cloudflared --no-pager -l | sed -n '1,80p'
This uses the bundled DNS helper (./scripts/cf_dns.py). It will:
<TUNNEL_UUID>.cfargotunnel.comPrereq:
export CLOUDFLARE_API_TOKEN='...'
Use this when you want the agent (with least-privilege DNS token) to create records programmatically:
./scripts/dns_create_record.sh --zone example.com --type A --name openclaw --content 1.2.3.4 --proxied true
./scripts/dns_create_record.sh --zone example.com --type CNAME --name openclaw --content target.example.net --proxied true
./scripts/dns_point_hostname_to_tunnel.sh \
--zone example.com \
--hostname openclaw.example.com \
--tunnel-uuid <TUNNEL_UUID>
In the tunnel:
openclaw.example.comhttp://127.0.0.1:18789In Zero Trust:
openclaw.example.comsudo systemctl disable --now cloudflared.