← Back to docs

Manual Install

Prepare any Linux server for getbot when automated bootstrap is not available for your OS. This guide is designed to be followed by humans or coding agents.

Your server's OS is not supported by getbot's automated bootstrap. The getbot CLI cannot install Incus, Caddy, or configure networking on this operating system. You must prepare the server manually using the steps below. Once the server is prepared, getbot setup will detect the existing infrastructure and deploy your bot normally.
Supported for automated bootstrap: Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Debian stable (Bookworm), Debian testing (Trixie). If you are on one of these, use getbot setup instead — it handles everything automatically.
Agent-consumable. This guide is structured so coding agents (Claude Code, Codex, Gemini CLI) can follow it end-to-end. A downloadable Markdown version is available for pasting into agent prompts.

What getbot cannot do on this OS

On unsupported operating systems, getbot setup will refuse to run the automated bootstrap. Specifically, it will not:

  • Install Incus (container runtime)
  • Install Caddy (reverse proxy and HTTPS)
  • Create the storage pool or network bridge
  • Download and install getbot-auth

You must install and configure all of the above yourself. Once done, getbot setup will work normally — it detects existing infrastructure and skips the bootstrap steps.

Prerequisites

Before you begin, you need:

  • A server with at least 2 vCPU, 4 GB RAM, and 8 GB free disk space
  • A Linux server with root or sudo access
  • SSH access from your workstation to the server
  • A domain pointing at the server's IP (e.g. *.yourorg.getbot.run)
  • An LLM API key (Anthropic, OpenAI, or Google)

Step 1: Install Incus

Incus provides container isolation for each bot deployment. getbot requires Incus (not LXD).

Option A: Zabbly repository (Ubuntu/Debian-based)

curl -fsSL https://pkgs.zabbly.com/get/incus-stable | sudo bash
sudo incus admin init --minimal
Best-effort guidance. The package manager commands below are provided as reference for unsupported OSes. Only the Tier 1 OSes listed above are tested and verified for getbot's automated bootstrap.

Option B: Package manager (distros with Incus in repos)

# Check if your distro packages Incus
apt search incus 2>/dev/null || dnf search incus 2>/dev/null || pacman -Ss incus 2>/dev/null

# Install via your package manager
sudo apt install -y incus   # Debian/Ubuntu
sudo dnf install -y incus   # Fedora/RHEL
sudo pacman -S incus         # Arch

sudo incus admin init --minimal

Option C: Build from source

See the official Incus installation guide for source builds and other methods.

Verify Incus

incus version
# Should print a version number (e.g. 6.x)

Step 2: Configure Incus storage and networking

getbot expects a specific storage pool and network bridge.

# Create the getbot storage pool
sudo incus storage create getbot-pool dir source=/var/lib/incus/storage-pools/getbot-pool

# Create the getbot network bridge
sudo incus network create getbot-br0 \
  ipv4.address=10.199.0.1/24 \
  ipv4.nat=true \
  ipv6.address=none

# Update the default profile to use getbot resources
sudo incus profile device set default root pool=getbot-pool
sudo incus profile device set default eth0 network=getbot-br0

Verify storage and networking

incus storage show getbot-pool
incus network show getbot-br0

Step 3: Install Caddy

Caddy provides automatic HTTPS and reverse-proxy routing for each bot.

Option A: Official repository (Debian/Ubuntu)

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy

Option B: Direct binary

curl -fsSL "https://caddyserver.com/api/download?os=linux&arch=amd64" -o /tmp/caddy
sudo mv /tmp/caddy /usr/bin/caddy
sudo chmod +x /usr/bin/caddy

Verify Caddy

caddy version
# Should print a version number (e.g. v2.x)

# Ensure Caddy is running
sudo systemctl enable --now caddy

Step 4: Install Docker inside Incus

Each getbot container runs Docker internally (Docker-in-Incus). You do not need Docker on the host. Docker is installed inside the Incus container automatically when getbot creates it. This step confirms the Incus security nesting configuration is correct.

# Verify security.nesting is enabled in the default profile
incus profile show default | grep security.nesting
# Expected: security.nesting: "true"

# If not set:
sudo incus profile set default security.nesting=true

Step 5: Install getbot-auth

The getbot-auth binary runs on the host and handles Google SSO authentication.

# Download the latest getbot-auth binary
VERSION=$(curl -fsSL https://releases.getbot.run/latest)
ARCH=$(dpkg --print-architecture 2>/dev/null || uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
curl -fsSL "https://github.com/makash/getbot-secure-openclaw/releases/download/v${VERSION}/getbot-auth_${VERSION}_linux_${ARCH}.tar.gz" | sudo tar xz -C /usr/local/bin/

# Verify
getbot-auth --version

Step 6: Create config directory

sudo mkdir -p /etc/getbot
sudo chmod 700 /etc/getbot

Step 7: Run getbot setup

With the host prepared, run getbot from your workstation:

getbot setup --host-ip YOUR_SERVER_IP --ssh-key ~/.ssh/id_ed25519 --ssh-user root

getbot will detect that Incus, Caddy, and the storage pool are already configured and skip those steps. It will proceed to deploy your bot.

Verification checklist

After completing all steps, verify:

  • incus version prints a version
  • incus storage show getbot-pool succeeds
  • incus network show getbot-br0 succeeds
  • caddy version prints a version
  • systemctl is-active caddy prints "active"
  • incus profile show default shows security.nesting: "true"
  • test -x /usr/local/bin/getbot-auth succeeds
  • test -d /etc/getbot succeeds

If all checks pass, your server is ready for getbot setup.

Troubleshooting

Incus not found in package manager

Use the Zabbly repository (Option A) or build from source. Incus is not packaged in all distributions yet.

Caddy fails to bind port 80 or 443

Another web server (nginx, apache) may be using those ports. Stop it first:

sudo systemctl stop nginx apache2 2>/dev/null
sudo systemctl disable nginx apache2 2>/dev/null

getbot setup still tries to install Incus

getbot checks for both Incus and the getbot-pool storage pool. If you named the pool differently, getbot won't detect it. Use the exact names shown in Step 2.

Permission denied during getbot-auth download

The GitHub repo is private. If you don't have access to download getbot-auth from GitHub releases, contact the getbot team for a direct binary link.