Hosting

DigitalOcean

Run a persistent OpenClaw Gateway on a DigitalOcean Droplet (~$6/month for the 1 GB Basic plan).

DigitalOcean is the simplest paid VPS path. If you prefer cheaper or free options:

  • Hetzner — €3.79/mo, more cores/RAM per dollar.
  • Oracle Cloud — Always Free ARM (up to 4 OCPU, 24 GB RAM), but signup can be finicky and ARM-only.

Prerequisites

  • DigitalOcean account (signup)
  • SSH key pair (or willingness to use password auth)
  • About 20 minutes

Setup

  • Create a Droplet

    1. Log into DigitalOcean.
    2. Click Create > Droplets.
    3. Choose:
      • Region: Closest to you
      • Image: Ubuntu 24.04 LTS
      • Size: Basic, Regular, 1 vCPU / 1 GB RAM / 25 GB SSD
      • Authentication: SSH key (recommended) or password
    4. Click Create Droplet and note the IP address.
  • Connect and install

    bash
    ssh root@YOUR_DROPLET_IP apt update && apt upgrade -y # Install Node.js 24curl -fsSL https://deb.nodesource.com/setup_24.x | bash -apt install -y nodejs # Install OpenClawcurl -fsSL https://openclaw.ai/install.sh | bash # Create the non-root user that will own OpenClaw state and services.adduser openclawusermod -aG sudo openclawloginctl enable-linger openclaw su - openclawopenclaw --version

    Use the root shell only for system bootstrap. Run OpenClaw commands as the non-root openclaw user so state lives under /home/openclaw/.openclaw/ and the Gateway installs as that user's systemd service.

  • Run onboarding

    bash
    openclaw onboard --install-daemon

    The wizard walks you through model auth, channel setup, gateway token generation, and daemon installation (systemd).

  • Add swap (recommended for 1 GB Droplets)

    bash
    fallocate -l 2G /swapfilechmod 600 /swapfilemkswap /swapfileswapon /swapfileecho '/swapfile none swap sw 0 0' >> /etc/fstab
  • Verify the gateway

    bash
    openclaw statussystemctl --user status openclaw-gateway.servicejournalctl --user -u openclaw-gateway.service -f
  • Access the Control UI

    The gateway binds to loopback by default. Pick one of these options.

    Option A: SSH tunnel (simplest)

    bash
    # From your local machinessh -L 18789:localhost:18789 root@YOUR_DROPLET_IP

    Then open http://localhost:18789.

    Option B: Tailscale Serve

    bash
    curl -fsSL https://tailscale.com/install.sh | sudo shsudo tailscale upopenclaw config set gateway.tailscale.mode serveopenclaw gateway restart

    Then open https://<magicdns>/ from any device on your tailnet.

    Tailscale Serve authenticates Control UI and WebSocket traffic via tailnet identity headers, which assumes the gateway host itself is trusted. HTTP API endpoints follow the gateway's normal auth mode (token/password) regardless. To require explicit shared-secret credentials over Serve, set gateway.auth.allowTailscale: false and use gateway.auth.mode: "token" or "password".

    Option C: Tailnet bind (no Serve)

    bash
    openclaw config set gateway.bind tailnetopenclaw gateway restart

    Then open http://<tailscale-ip>:18789 (token required).

  • Persistence and backups

    OpenClaw state lives under:

    • ~/.openclaw/openclaw.json, per-agent auth-profiles.json, channel/provider state, and session data.
    • ~/.openclaw/workspace/ — the agent workspace (SOUL.md, memory, artifacts).

    These survive Droplet reboots. To take a portable snapshot:

    bash
    openclaw backup create

    DigitalOcean snapshots back the whole Droplet up; openclaw backup create is portable across hosts.

    1 GB RAM tips

    The $6 Droplet only has 1 GB RAM. To keep things smooth:

    • Make sure the swap step above is in /etc/fstab so it survives reboots.
    • Prefer API-based models (Claude, GPT) over local ones — local LLM inference does not fit in 1 GB.
    • Set agents.defaults.model.primary to a smaller model if you hit OOMs on large prompts.
    • Monitor with free -h and htop.

    Troubleshooting

    Gateway will not start -- Run openclaw doctor --non-interactive and check logs with journalctl --user -u openclaw-gateway.service -n 50.

    Port already in use -- Run lsof -i :18789 to find the process, then stop it.

    Out of memory -- Verify swap is active with free -h. If still hitting OOM, use API-based models (Claude, GPT) rather than local models, or upgrade to a 2 GB Droplet.

    Next steps

    Was this useful?
    On this page

    On this page