304 lines
9.0 KiB
Markdown
304 lines
9.0 KiB
Markdown
|
|
---
|
|||
|
|
summary: "OpenClaw on Oracle Cloud (Always Free ARM)"
|
|||
|
|
read_when:
|
|||
|
|
- Setting up OpenClaw on Oracle Cloud
|
|||
|
|
- Looking for low-cost VPS hosting for OpenClaw
|
|||
|
|
- Want 24/7 OpenClaw on a small server
|
|||
|
|
title: "Oracle Cloud"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# OpenClaw on Oracle Cloud (OCI)
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
Run a persistent OpenClaw Gateway on Oracle Cloud's **Always Free** ARM tier.
|
|||
|
|
|
|||
|
|
Oracle’s free tier can be a great fit for OpenClaw (especially if you already have an OCI account), but it comes with tradeoffs:
|
|||
|
|
|
|||
|
|
- ARM architecture (most things work, but some binaries may be x86-only)
|
|||
|
|
- Capacity and signup can be finicky
|
|||
|
|
|
|||
|
|
## Cost Comparison (2026)
|
|||
|
|
|
|||
|
|
| Provider | Plan | Specs | Price/mo | Notes |
|
|||
|
|
| ------------ | --------------- | ---------------------- | -------- | --------------------- |
|
|||
|
|
| Oracle Cloud | Always Free ARM | up to 4 OCPU, 24GB RAM | $0 | ARM, limited capacity |
|
|||
|
|
| Hetzner | CX22 | 2 vCPU, 4GB RAM | ~ $4 | Cheapest paid option |
|
|||
|
|
| DigitalOcean | Basic | 1 vCPU, 1GB RAM | $6 | Easy UI, good docs |
|
|||
|
|
| Vultr | Cloud Compute | 1 vCPU, 1GB RAM | $6 | Many locations |
|
|||
|
|
| Linode | Nanode | 1 vCPU, 1GB RAM | $5 | Now part of Akamai |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Prerequisites
|
|||
|
|
|
|||
|
|
- Oracle Cloud account ([signup](https://www.oracle.com/cloud/free/)) — see [community signup guide](https://gist.github.com/rssnyder/51e3cfedd730e7dd5f4a816143b25dbd) if you hit issues
|
|||
|
|
- Tailscale account (free at [tailscale.com](https://tailscale.com))
|
|||
|
|
- ~30 minutes
|
|||
|
|
|
|||
|
|
## 1) Create an OCI Instance
|
|||
|
|
|
|||
|
|
1. Log into [Oracle Cloud Console](https://cloud.oracle.com/)
|
|||
|
|
2. Navigate to **Compute → Instances → Create Instance**
|
|||
|
|
3. Configure:
|
|||
|
|
- **Name:** `openclaw`
|
|||
|
|
- **Image:** Ubuntu 24.04 (aarch64)
|
|||
|
|
- **Shape:** `VM.Standard.A1.Flex` (Ampere ARM)
|
|||
|
|
- **OCPUs:** 2 (or up to 4)
|
|||
|
|
- **Memory:** 12 GB (or up to 24 GB)
|
|||
|
|
- **Boot volume:** 50 GB (up to 200 GB free)
|
|||
|
|
- **SSH key:** Add your public key
|
|||
|
|
4. Click **Create**
|
|||
|
|
5. Note the public IP address
|
|||
|
|
|
|||
|
|
**Tip:** If instance creation fails with "Out of capacity", try a different availability domain or retry later. Free tier capacity is limited.
|
|||
|
|
|
|||
|
|
## 2) Connect and Update
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Connect via public IP
|
|||
|
|
ssh ubuntu@YOUR_PUBLIC_IP
|
|||
|
|
|
|||
|
|
# Update system
|
|||
|
|
sudo apt update && sudo apt upgrade -y
|
|||
|
|
sudo apt install -y build-essential
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Note:** `build-essential` is required for ARM compilation of some dependencies.
|
|||
|
|
|
|||
|
|
## 3) Configure User and Hostname
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Set hostname
|
|||
|
|
sudo hostnamectl set-hostname openclaw
|
|||
|
|
|
|||
|
|
# Set password for ubuntu user
|
|||
|
|
sudo passwd ubuntu
|
|||
|
|
|
|||
|
|
# Enable lingering (keeps user services running after logout)
|
|||
|
|
sudo loginctl enable-linger ubuntu
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4) Install Tailscale
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -fsSL https://tailscale.com/install.sh | sh
|
|||
|
|
sudo tailscale up --ssh --hostname=openclaw
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
This enables Tailscale SSH, so you can connect via `ssh openclaw` from any device on your tailnet — no public IP needed.
|
|||
|
|
|
|||
|
|
Verify:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
tailscale status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**From now on, connect via Tailscale:** `ssh ubuntu@openclaw` (or use the Tailscale IP).
|
|||
|
|
|
|||
|
|
## 5) Install OpenClaw
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -fsSL https://openclaw.ai/install.sh | bash
|
|||
|
|
source ~/.bashrc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
When prompted "How do you want to hatch your bot?", select **"Do this later"**.
|
|||
|
|
|
|||
|
|
> Note: If you hit ARM-native build issues, start with system packages (e.g. `sudo apt install -y build-essential`) before reaching for Homebrew.
|
|||
|
|
|
|||
|
|
## 6) Configure Gateway (loopback + token auth) and enable Tailscale Serve
|
|||
|
|
|
|||
|
|
Use token auth as the default. It’s predictable and avoids needing any “insecure auth” Control UI flags.
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Keep the Gateway private on the VM
|
|||
|
|
openclaw config set gateway.bind loopback
|
|||
|
|
|
|||
|
|
# Require auth for the Gateway + Control UI
|
|||
|
|
openclaw config set gateway.auth.mode token
|
|||
|
|
openclaw doctor --generate-gateway-token
|
|||
|
|
|
|||
|
|
# Expose over Tailscale Serve (HTTPS + tailnet access)
|
|||
|
|
openclaw config set gateway.tailscale.mode serve
|
|||
|
|
openclaw config set gateway.trustedProxies '["127.0.0.1"]'
|
|||
|
|
|
|||
|
|
systemctl --user restart openclaw-gateway
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 7) Verify
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Check version
|
|||
|
|
openclaw --version
|
|||
|
|
|
|||
|
|
# Check daemon status
|
|||
|
|
systemctl --user status openclaw-gateway
|
|||
|
|
|
|||
|
|
# Check Tailscale Serve
|
|||
|
|
tailscale serve status
|
|||
|
|
|
|||
|
|
# Test local response
|
|||
|
|
curl http://localhost:18789
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 8) Lock Down VCN Security
|
|||
|
|
|
|||
|
|
Now that everything is working, lock down the VCN to block all traffic except Tailscale. OCI's Virtual Cloud Network acts as a firewall at the network edge — traffic is blocked before it reaches your instance.
|
|||
|
|
|
|||
|
|
1. Go to **Networking → Virtual Cloud Networks** in the OCI Console
|
|||
|
|
2. Click your VCN → **Security Lists** → Default Security List
|
|||
|
|
3. **Remove** all ingress rules except:
|
|||
|
|
- `0.0.0.0/0 UDP 41641` (Tailscale)
|
|||
|
|
4. Keep default egress rules (allow all outbound)
|
|||
|
|
|
|||
|
|
This blocks SSH on port 22, HTTP, HTTPS, and everything else at the network edge. From now on, you can only connect via Tailscale.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Access the Control UI
|
|||
|
|
|
|||
|
|
From any device on your Tailscale network:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
https://openclaw.<tailnet-name>.ts.net/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Replace `<tailnet-name>` with your tailnet name (visible in `tailscale status`).
|
|||
|
|
|
|||
|
|
No SSH tunnel needed. Tailscale provides:
|
|||
|
|
|
|||
|
|
- HTTPS encryption (automatic certs)
|
|||
|
|
- Authentication via Tailscale identity
|
|||
|
|
- Access from any device on your tailnet (laptop, phone, etc.)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Security: VCN + Tailscale (recommended baseline)
|
|||
|
|
|
|||
|
|
With the VCN locked down (only UDP 41641 open) and the Gateway bound to loopback, you get strong defense-in-depth: public traffic is blocked at the network edge, and admin access happens over your tailnet.
|
|||
|
|
|
|||
|
|
This setup often removes the _need_ for extra host-based firewall rules purely to stop Internet-wide SSH brute force — but you should still keep the OS updated, run `openclaw security audit`, and verify you aren’t accidentally listening on public interfaces.
|
|||
|
|
|
|||
|
|
### What's Already Protected
|
|||
|
|
|
|||
|
|
| Traditional Step | Needed? | Why |
|
|||
|
|
| ------------------ | ----------- | ---------------------------------------------------------------------------- |
|
|||
|
|
| UFW firewall | No | VCN blocks before traffic reaches instance |
|
|||
|
|
| fail2ban | No | No brute force if port 22 blocked at VCN |
|
|||
|
|
| sshd hardening | No | Tailscale SSH doesn't use sshd |
|
|||
|
|
| Disable root login | No | Tailscale uses Tailscale identity, not system users |
|
|||
|
|
| SSH key-only auth | No | Tailscale authenticates via your tailnet |
|
|||
|
|
| IPv6 hardening | Usually not | Depends on your VCN/subnet settings; verify what’s actually assigned/exposed |
|
|||
|
|
|
|||
|
|
### Still Recommended
|
|||
|
|
|
|||
|
|
- **Credential permissions:** `chmod 700 ~/.openclaw`
|
|||
|
|
- **Security audit:** `openclaw security audit`
|
|||
|
|
- **System updates:** `sudo apt update && sudo apt upgrade` regularly
|
|||
|
|
- **Monitor Tailscale:** Review devices in [Tailscale admin console](https://login.tailscale.com/admin)
|
|||
|
|
|
|||
|
|
### Verify Security Posture
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Confirm no public ports listening
|
|||
|
|
sudo ss -tlnp | grep -v '127.0.0.1\|::1'
|
|||
|
|
|
|||
|
|
# Verify Tailscale SSH is active
|
|||
|
|
tailscale status | grep -q 'offers: ssh' && echo "Tailscale SSH active"
|
|||
|
|
|
|||
|
|
# Optional: disable sshd entirely
|
|||
|
|
sudo systemctl disable --now ssh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Fallback: SSH Tunnel
|
|||
|
|
|
|||
|
|
If Tailscale Serve isn't working, use an SSH tunnel:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# From your local machine (via Tailscale)
|
|||
|
|
ssh -L 18789:127.0.0.1:18789 ubuntu@openclaw
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Then open `http://localhost:18789`.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### Instance creation fails ("Out of capacity")
|
|||
|
|
|
|||
|
|
Free tier ARM instances are popular. Try:
|
|||
|
|
|
|||
|
|
- Different availability domain
|
|||
|
|
- Retry during off-peak hours (early morning)
|
|||
|
|
- Use the "Always Free" filter when selecting shape
|
|||
|
|
|
|||
|
|
### Tailscale won't connect
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Check status
|
|||
|
|
sudo tailscale status
|
|||
|
|
|
|||
|
|
# Re-authenticate
|
|||
|
|
sudo tailscale up --ssh --hostname=openclaw --reset
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Gateway won't start
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
openclaw gateway status
|
|||
|
|
openclaw doctor --non-interactive
|
|||
|
|
journalctl --user -u openclaw-gateway -n 50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Can't reach Control UI
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Verify Tailscale Serve is running
|
|||
|
|
tailscale serve status
|
|||
|
|
|
|||
|
|
# Check gateway is listening
|
|||
|
|
curl http://localhost:18789
|
|||
|
|
|
|||
|
|
# Restart if needed
|
|||
|
|
systemctl --user restart openclaw-gateway
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ARM binary issues
|
|||
|
|
|
|||
|
|
Some tools may not have ARM builds. Check:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
uname -m # Should show aarch64
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Most npm packages work fine. For binaries, look for `linux-arm64` or `aarch64` releases.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Persistence
|
|||
|
|
|
|||
|
|
All state lives in:
|
|||
|
|
|
|||
|
|
- `~/.openclaw/` — config, credentials, session data
|
|||
|
|
- `~/.openclaw/workspace/` — workspace (SOUL.md, memory, artifacts)
|
|||
|
|
|
|||
|
|
Back up periodically:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
tar -czvf openclaw-backup.tar.gz ~/.openclaw ~/.openclaw/workspace
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## See Also
|
|||
|
|
|
|||
|
|
- [Gateway remote access](/gateway/remote) — other remote access patterns
|
|||
|
|
- [Tailscale integration](/gateway/tailscale) — full Tailscale docs
|
|||
|
|
- [Gateway configuration](/gateway/configuration) — all config options
|
|||
|
|
- [DigitalOcean guide](/platforms/digitalocean) — if you want paid + easier signup
|
|||
|
|
- [Hetzner guide](/install/hetzner) — Docker-based alternative
|