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.
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.
getbot setup instead — it handles everything automatically.
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 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 versionprints a version -
incus storage show getbot-poolsucceeds -
incus network show getbot-br0succeeds -
caddy versionprints a version -
systemctl is-active caddyprints "active" -
incus profile show defaultshowssecurity.nesting: "true" -
test -x /usr/local/bin/getbot-authsucceeds -
test -d /etc/getbotsucceeds
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.