Tools: Deploying OpenClaw on Ubuntu 26.04 - Guide

Tools: Deploying OpenClaw on Ubuntu 26.04 - Guide

Install Docker

Set Up OpenClaw

Access the Control UI

Configure Vultr Serverless Inference

Next Steps OpenClaw is a self-hosted autonomous AI agent platform that connects to WhatsApp, Telegram, Slack, and Discord through a unified Gateway control plane. It maintains persistent memory across sessions and supports tool execution with any OpenAI-compatible model provider, including Vultr Serverless Inference. This guide deploys OpenClaw using the interactive setup wizard and exposes the control UI securely over HTTPS with Caddy. By the end, you'll have OpenClaw running with a live gateway and the control interface accessible at your domain. The official Docker repository gives you the most current Docker Engine builds. 1. Install dependency packages: 2. Add Docker's GPG key: 3. Register the Docker repository: 4. Refresh APT and install Docker: 5. Add your user to the Docker group: 1. Create the project directory: 2. Clone the OpenClaw repository: 3. Run the interactive setup wizard: The wizard guides you through: 4. Verify the gateway is running: A line containing [gateway] listening on ws://0.0.0.0:18789 confirms the gateway is active. Option A: SSH Tunnel (development) 1. Allow insecure local auth in the configuration: Find the gateway block and add: 2. Restart the gateway: 3. Open an SSH tunnel from your local machine: Open http://localhost:18789/?token=YOUR-TOKEN in a browser. Option B: HTTPS with Caddy (production) 2. Configure the Caddyfile: 3. Open the firewall and reload Caddy: Open https://openclaw.example.com/?token=YOUR-TOKEN in a browser. To use Vultr's OpenAI-compatible inference endpoint as the model backend: 1. Edit the OpenClaw configuration: Add the Vultr provider block under models.providers: 2. Restart the gateway: 3. Select the model from a connected channel: OpenClaw is running and accessible over HTTPS. From here you can: If you prefer a one-click setup, OpenClaw is also available as a Vultr Marketplace app, no manual configuration required. See the Marketplace deployment guide for details. For the full guide with additional tips, visit the original article on Vultr Docs. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

$ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -weight: 500;">apt-transport-https ca-certificates -weight: 500;">curl -weight: 500;">git -y $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -weight: 500;">apt-transport-https ca-certificates -weight: 500;">curl -weight: 500;">git -y $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -weight: 500;">apt-transport-https ca-certificates -weight: 500;">curl -weight: 500;">git -y $ -weight: 600;">sudo -weight: 500;">curl -fsSL https://download.-weight: 500;">docker.com/linux/ubuntu/gpg -o /etc/-weight: 500;">apt/keyrings/-weight: 500;">docker.asc $ -weight: 600;">sudo -weight: 500;">curl -fsSL https://download.-weight: 500;">docker.com/linux/ubuntu/gpg -o /etc/-weight: 500;">apt/keyrings/-weight: 500;">docker.asc $ -weight: 600;">sudo -weight: 500;">curl -fsSL https://download.-weight: 500;">docker.com/linux/ubuntu/gpg -o /etc/-weight: 500;">apt/keyrings/-weight: 500;">docker.asc $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/-weight: 500;">apt/keyrings/-weight: 500;">docker.asc] https://download.-weight: 500;">docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/-weight: 500;">docker.list > /dev/null $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/-weight: 500;">apt/keyrings/-weight: 500;">docker.asc] https://download.-weight: 500;">docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/-weight: 500;">docker.list > /dev/null $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/-weight: 500;">apt/keyrings/-weight: 500;">docker.asc] https://download.-weight: 500;">docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/-weight: 500;">docker.list > /dev/null $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -weight: 500;">docker-ce -weight: 500;">docker-ce-cli containerd.io -weight: 500;">docker-buildx-plugin -weight: 500;">docker-compose-plugin -y $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -weight: 500;">docker-ce -weight: 500;">docker-ce-cli containerd.io -weight: 500;">docker-buildx-plugin -weight: 500;">docker-compose-plugin -y $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -weight: 500;">docker-ce -weight: 500;">docker-ce-cli containerd.io -weight: 500;">docker-buildx-plugin -weight: 500;">docker-compose-plugin -y $ -weight: 600;">sudo usermod -aG -weight: 500;">docker $USER $ newgrp -weight: 500;">docker $ -weight: 600;">sudo usermod -aG -weight: 500;">docker $USER $ newgrp -weight: 500;">docker $ -weight: 600;">sudo usermod -aG -weight: 500;">docker $USER $ newgrp -weight: 500;">docker $ mkdir -p ~/openclaw-assistant $ cd ~/openclaw-assistant $ mkdir -p ~/openclaw-assistant $ cd ~/openclaw-assistant $ mkdir -p ~/openclaw-assistant $ cd ~/openclaw-assistant $ -weight: 500;">git clone https://github.com/openclaw/openclaw.-weight: 500;">git $ cd openclaw $ -weight: 500;">git clone https://github.com/openclaw/openclaw.-weight: 500;">git $ cd openclaw $ -weight: 500;">git clone https://github.com/openclaw/openclaw.-weight: 500;">git $ cd openclaw $ ./-weight: 500;">docker-setup.sh $ ./-weight: 500;">docker-setup.sh $ ./-weight: 500;">docker-setup.sh $ -weight: 500;">docker compose logs openclaw-gateway $ -weight: 500;">docker compose logs openclaw-gateway $ -weight: 500;">docker compose logs openclaw-gateway $ nano ~/.openclaw/openclaw.json $ nano ~/.openclaw/openclaw.json $ nano ~/.openclaw/openclaw.json "controlUi": { "allowInsecureAuth": true } "controlUi": { "allowInsecureAuth": true } "controlUi": { "allowInsecureAuth": true } $ -weight: 500;">docker compose -weight: 500;">restart openclaw-gateway $ -weight: 500;">docker compose -weight: 500;">restart openclaw-gateway $ -weight: 500;">docker compose -weight: 500;">restart openclaw-gateway $ ssh -N -L 18789:127.0.0.1:18789 linuxuser@YOUR-SERVER-IP $ ssh -N -L 18789:127.0.0.1:18789 linuxuser@YOUR-SERVER-IP $ ssh -N -L 18789:127.0.0.1:18789 linuxuser@YOUR-SERVER-IP $ -weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | -weight: 600;">sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg $ -weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/caddy-stable.list $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install caddy -y $ -weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | -weight: 600;">sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg $ -weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/caddy-stable.list $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install caddy -y $ -weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | -weight: 600;">sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg $ -weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/caddy-stable.list $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update $ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install caddy -y $ -weight: 600;">sudo nano /etc/caddy/Caddyfile $ -weight: 600;">sudo nano /etc/caddy/Caddyfile $ -weight: 600;">sudo nano /etc/caddy/Caddyfile openclaw.example.com { reverse_proxy localhost:18789 } openclaw.example.com { reverse_proxy localhost:18789 } openclaw.example.com { reverse_proxy localhost:18789 } $ -weight: 600;">sudo ufw allow 80/tcp $ -weight: 600;">sudo ufw allow 443/tcp $ -weight: 600;">sudo -weight: 500;">systemctl reload caddy $ -weight: 600;">sudo ufw allow 80/tcp $ -weight: 600;">sudo ufw allow 443/tcp $ -weight: 600;">sudo -weight: 500;">systemctl reload caddy $ -weight: 600;">sudo ufw allow 80/tcp $ -weight: 600;">sudo ufw allow 443/tcp $ -weight: 600;">sudo -weight: 500;">systemctl reload caddy $ nano ~/.openclaw/openclaw.json $ nano ~/.openclaw/openclaw.json $ nano ~/.openclaw/openclaw.json "vultr": { "baseUrl": "https://api.vultrinference.com/v1", "apiKey": "YOUR-VULTR-API-KEY", "api": "openai-completions", "models": [ { "id": "moonshotai/Kimi-K2.5", "name": "Kimi-K2.5" } ] } "vultr": { "baseUrl": "https://api.vultrinference.com/v1", "apiKey": "YOUR-VULTR-API-KEY", "api": "openai-completions", "models": [ { "id": "moonshotai/Kimi-K2.5", "name": "Kimi-K2.5" } ] } "vultr": { "baseUrl": "https://api.vultrinference.com/v1", "apiKey": "YOUR-VULTR-API-KEY", "api": "openai-completions", "models": [ { "id": "moonshotai/Kimi-K2.5", "name": "Kimi-K2.5" } ] } $ -weight: 500;">docker compose -weight: 500;">restart openclaw-gateway $ -weight: 500;">docker compose -weight: 500;">restart openclaw-gateway $ -weight: 500;">docker compose -weight: 500;">restart openclaw-gateway /model vultr/moonshotai/Kimi-K2.5 /model vultr/moonshotai/Kimi-K2.5 /model vultr/moonshotai/Kimi-K2.5 - Model provider selection (Anthropic, OpenAI, Google, or Vultr Serverless Inference) - Channel configuration (Slack, Discord, Telegram, or WhatsApp) - Channel allowlists and skill setup - Gateway startup - Connect additional messaging channels through the control UI - Use /compact and /think commands to manage session memory - Back up persistent memory with tar -czvf openclaw-backup.tar.gz ~/.openclaw