2026-01-09 02:01:13 +01:00
---
2026-01-30 03:15:10 +01:00
summary: "Automated, hardened OpenClaw installation with Ansible, Tailscale VPN, and firewall isolation"
2026-01-09 02:01:13 +01:00
read_when:
- You want automated server deployment with security hardening
- You need firewall-isolated setup with VPN access
- You're deploying to remote Debian/Ubuntu servers
2026-01-31 16:04:03 -05:00
title: "Ansible"
2026-01-09 02:01:13 +01:00
---
# Ansible Installation
2026-03-19 12:05:23 -07:00
Deploy OpenClaw to production servers with ** [openclaw-ansible ](https://github.com/openclaw/openclaw-ansible )** -- an automated installer with security-first architecture.
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
< Info >
The [openclaw-ansible ](https://github.com/openclaw/openclaw-ansible ) repo is the source of truth for Ansible deployment. This page is a quick overview.
< / Info >
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
## Prerequisites
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
| Requirement | Details |
| ----------- | --------------------------------------------------------- |
| **OS** | Debian 11+ or Ubuntu 20.04+ |
| **Access** | Root or sudo privileges |
| **Network** | Internet connection for package installation |
| **Ansible** | 2.14+ (installed automatically by the quick-start script) |
2026-01-09 02:01:13 +01:00
## What You Get
2026-03-19 12:05:23 -07:00
- **Firewall-first security** -- UFW + Docker isolation (only SSH + Tailscale accessible)
- **Tailscale VPN** -- secure remote access without exposing services publicly
- **Docker** -- isolated sandbox containers, localhost-only bindings
- **Defense in depth** -- 4-layer security architecture
- **Systemd integration** -- auto-start on boot with hardening
- **One-command setup** -- complete deployment in minutes
## Quick Start
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
One-command install:
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
```bash
curl -fsSL https://raw.githubusercontent.com/openclaw/openclaw-ansible/main/install.sh | bash
```
2026-01-09 02:01:13 +01:00
## What Gets Installed
The Ansible playbook installs and configures:
2026-03-19 12:05:23 -07:00
1. **Tailscale** -- mesh VPN for secure remote access
2. **UFW firewall** -- SSH + Tailscale ports only
3. **Docker CE + Compose V2** -- for agent sandboxes
4. **Node.js 24 + pnpm** -- runtime dependencies (Node 22 LTS, currently `22.16+` , remains supported)
5. **OpenClaw** -- host-based, not containerized
6. **Systemd service** -- auto-start with security hardening
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
< Note >
The gateway runs directly on the host (not in Docker), but agent sandboxes use Docker for isolation. See [Sandboxing ](/gateway/sandboxing ) for details.
< / Note >
2026-01-09 02:01:13 +01:00
## Post-Install Setup
2026-03-19 12:05:23 -07:00
< Steps >
< Step title = "Switch to the openclaw user" >
```bash
sudo -i -u openclaw
```
< / Step >
< Step title = "Run the onboarding wizard" >
The post-install script guides you through configuring OpenClaw settings.
< / Step >
< Step title = "Connect messaging providers" >
Log in to WhatsApp, Telegram, Discord, or Signal:
```bash
openclaw channels login
```
< / Step >
< Step title = "Verify the installation" >
```bash
sudo systemctl status openclaw
sudo journalctl -u openclaw -f
```
< / Step >
< Step title = "Connect to Tailscale" >
Join your VPN mesh for secure remote access.
< / Step >
< / Steps >
### Quick Commands
2026-01-09 02:01:13 +01:00
```bash
# Check service status
2026-01-30 03:15:10 +01:00
sudo systemctl status openclaw
2026-01-09 02:01:13 +01:00
# View live logs
2026-01-30 03:15:10 +01:00
sudo journalctl -u openclaw -f
2026-01-09 02:01:13 +01:00
# Restart gateway
2026-01-30 03:15:10 +01:00
sudo systemctl restart openclaw
2026-01-09 02:01:13 +01:00
2026-01-30 03:15:10 +01:00
# Provider login (run as openclaw user)
sudo -i -u openclaw
openclaw channels login
2026-01-09 02:01:13 +01:00
```
## Security Architecture
2026-03-19 12:05:23 -07:00
The deployment uses a 4-layer defense model:
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
1. **Firewall (UFW)** -- only SSH (22) + Tailscale (41641/udp) exposed publicly
2. **VPN (Tailscale)** -- gateway accessible only via VPN mesh
3. **Docker isolation** -- DOCKER-USER iptables chain prevents external port exposure
4. **Systemd hardening** -- NoNewPrivileges, PrivateTmp, unprivileged user
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
To verify your external attack surface:
2026-01-09 02:01:13 +01:00
```bash
nmap -p- YOUR_SERVER_IP
```
2026-03-19 12:05:23 -07:00
Only port 22 (SSH) should be open. All other services (gateway, Docker) are locked down.
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
Docker is installed for agent sandboxes (isolated tool execution), not for running the gateway itself. See [Multi-Agent Sandbox and Tools ](/tools/multi-agent-sandbox-tools ) for sandbox configuration.
2026-01-09 02:01:13 +01:00
## Manual Installation
If you prefer manual control over the automation:
2026-03-19 12:05:23 -07:00
< Steps >
< Step title = "Install prerequisites" >
```bash
sudo apt update & & sudo apt install -y ansible git
```
< / Step >
< Step title = "Clone the repository" >
```bash
git clone https://github.com/openclaw/openclaw-ansible.git
cd openclaw-ansible
```
< / Step >
< Step title = "Install Ansible collections" >
```bash
ansible-galaxy collection install -r requirements.yml
```
< / Step >
< Step title = "Run the playbook" >
```bash
./run-playbook.sh
```
Alternatively, run directly and then manually execute the setup script afterward:
```bash
ansible-playbook playbook.yml --ask-become-pass
# Then run: /tmp/openclaw-setup.sh
```
< / Step >
< / Steps >
## Updating
2026-01-09 02:01:13 +01:00
2026-01-30 03:15:10 +01:00
The Ansible installer sets up OpenClaw for manual updates. See [Updating ](/install/updating ) for the standard update flow.
2026-01-09 02:01:13 +01:00
2026-03-19 12:05:23 -07:00
To re-run the Ansible playbook (for example, for configuration changes):
2026-01-09 02:01:13 +01:00
```bash
2026-01-30 03:15:10 +01:00
cd openclaw-ansible
2026-01-09 02:01:13 +01:00
./run-playbook.sh
```
2026-03-19 12:05:23 -07:00
This is idempotent and safe to run multiple times.
2026-01-09 02:01:13 +01:00
## Troubleshooting
2026-03-19 12:05:23 -07:00
< AccordionGroup >
< Accordion title = "Firewall blocks my connection" >
- Ensure you can access via Tailscale VPN first
- SSH access (port 22) is always allowed
- The gateway is only accessible via Tailscale by design
< / Accordion >
< Accordion title = "Service will not start" >
```bash
# Check logs
sudo journalctl -u openclaw -n 100
# Verify permissions
sudo ls -la /opt/openclaw
# Test manual start
sudo -i -u openclaw
cd ~/openclaw
openclaw gateway run
```
< / Accordion >
< Accordion title = "Docker sandbox issues" >
```bash
# Verify Docker is running
sudo systemctl status docker
# Check sandbox image
sudo docker images | grep openclaw-sandbox
# Build sandbox image if missing
cd /opt/openclaw/openclaw
sudo -u openclaw ./scripts/sandbox-setup.sh
```
< / Accordion >
< Accordion title = "Provider login fails" >
Make sure you are running as the `openclaw` user:
```bash
sudo -i -u openclaw
openclaw channels login
```
< / Accordion >
< / AccordionGroup >
2026-01-09 02:01:13 +01:00
## Advanced Configuration
2026-03-19 12:05:23 -07:00
For detailed security architecture and troubleshooting, see the openclaw-ansible repo:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- [Security Architecture ](https://github.com/openclaw/openclaw-ansible/blob/main/docs/security.md )
- [Technical Details ](https://github.com/openclaw/openclaw-ansible/blob/main/docs/architecture.md )
- [Troubleshooting Guide ](https://github.com/openclaw/openclaw-ansible/blob/main/docs/troubleshooting.md )
2026-01-09 02:01:13 +01:00
## Related
2026-03-19 12:05:23 -07:00
- [openclaw-ansible ](https://github.com/openclaw/openclaw-ansible ) -- full deployment guide
- [Docker ](/install/docker ) -- containerized gateway setup
- [Sandboxing ](/gateway/sandboxing ) -- agent sandbox configuration
- [Multi-Agent Sandbox and Tools ](/tools/multi-agent-sandbox-tools ) -- per-agent isolation