Skip to content
Guides

OpenClaw on Oracle Cloud’s free ARM tier

The instance, Tailscale instead of SSH, the locked-down network, and what free costs in patience

6 min read

Oracle Cloud’s Always Free ARM tier is the docs’ answer to free 24/7 hosting: up to four cores, 24 gigabytes of memory and 200 gigabytes of storage at no cost, enough for a persistent Gateway with room to spare. The page is unusual in that it never opens SSH to the internet at all: Tailscale is installed before OpenClaw, and the network is locked down to one UDP port. Here is the instance, the access model, the security list, the ARM notes, and what the free tier asks of you instead of money.

The instance

  • Ubuntu 24.04 for aarch64 on the Ampere A1 Flex shape, two to four cores, twelve to twenty-four gigabytes, a fifty-gigabyte boot volume, your public key; if creation fails with an out-of-capacity error, try another availability domain or retry off-peak, because free capacity is limited.
  • Connect once by public IP, update, install the build tools that some dependencies compile with on ARM, set the hostname and a password, and enable lingering so user services survive logout.
  • Install Tailscale with its SSH mode and a hostname; from then on you connect through the tailnet, not the public address.

Gateway and network

Run the installer and defer hatching an agent, because the host is configured first: bind the Gateway to loopback, set token auth and generate a token with the doctor, set Tailscale mode to serve, and trust only the loopback proxy, which is the local Serve proxy’s forwarding, not trusted-proxy auth. Install the service and restart it. Then lock down the virtual cloud network: in the default security list remove every ingress rule except UDP 41641 for Tailscale and keep the default egress. Verify with the version, the service status, the Serve status and a loopback curl, and open the Control UI at the tailnet HTTPS name from any device on it.

This blocks SSH on port 22, HTTP, HTTPS, and everything else at the network edge.

What you no longer need

  • A host firewall, fail2ban, sshd hardening, root-login and key-only rules: the network blocks traffic before it reaches the instance, and Tailscale SSH does not use sshd or system users.
  • Still recommended: restrict the OpenClaw directory’s permissions, run the security audit command, apply OS patches, and review the tailnet’s devices periodically.
  • Verification: no public listeners in the socket list, Tailscale SSH reported active, and, once that is confirmed, sshd disabled entirely.

OpenClaw and Tailscale explains Serve and the identity headers this setup relies on, and OpenClaw on a VPS is the checklist for a paid server where the firewall is still yours to write.

ARM, persistence, fallback

The tier is aarch64: Node, Telegram and WhatsApp are pure JavaScript, most native npm packages ship arm64 artifacts, and the optional Go or Rust helpers some skills carry need an aarch64 release or a build from source. State under the OpenClaw directory and the workspace survives reboots, and the backup command archives it. If Serve is not working, an SSH tunnel over the tailnet reaches the loopback port; if Tailscale will not connect, bring it up again with the reset flag; if the Gateway will not start, the doctor and the service journal. OpenClaw on a Raspberry Pi is the other ARM host in the docs, and OpenClaw backup and restore the archive.

On Diali

Free costs patience: a signup that needs a community guide, an instance that is often out of capacity, and an operator who keeps the tailnet, the patches and the token current. Diali is the paid version of the same posture, no public ports and a dashboard on HTTPS, with the operating done for you. Hosted OpenClaw on Diali is the assistant and What OpenClaw costs puts the two side by side.

  • Four ARM cores and 24 GB for nothing, when capacity allows.
  • Tailscale first, then OpenClaw; the network admits one UDP port.
  • No sshd, no fail2ban; the tailnet is the perimeter.
Get started

Stop reading about it, build one

Set up an agent, pick a channel, and have it working inside the app you already keep open.