The Appeal of $15/Month AI
Running your own OpenClaw instance on a $15/month VPS is absolutely possible. People do it. It works. And there's something satisfying about having your own AI agent running on hardware you control, talking to your Slack workspace, for less than the cost of a Netflix subscription.
But I want to be honest about what you're signing up for, because the marketing pitch of "deploy your own AI for $15" leaves out the part where you're also the sysadmin, the security team, and the on-call engineer. If that's fine with you, great. Let's set it up.
Choosing a VPS
For a single OpenClaw agent serving a Slack workspace of up to 50 people, you need:
- 2 vCPUs
- 2GB RAM (4GB is more comfortable)
- 20GB SSD storage
- Ubuntu 22.04 or 24.04
At those specs, here's what you're looking at:
- Hetzner CX22: 2 vCPUs, 4GB RAM, $5.39/month. Yes, really. This is the best value in VPS hosting right now and it's not close.
- DigitalOcean Basic: 2 vCPUs, 2GB RAM, $18/month. Fine, but you're paying 3x Hetzner for less RAM.
- AWS Lightsail: 2 vCPUs, 2GB RAM, $18/month. Same tier as DO. Useful if your team already lives in AWS.
- Vultr: 2 vCPUs, 2GB RAM, $15/month. Solid middle ground.
I'd go with Hetzner unless your company has a policy against European hosting (their cheapest US region is Ashburn, which works fine for Slack latency).
Docker Compose Setup
SSH into your VPS and install Docker if it's not already there:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Log out and back in for group changes
Create a directory for your OpenClaw deployment:
mkdir -p /opt/openclaw && cd /opt/openclaw
Create your docker-compose.yml:
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:0.49.1
container_name: openclaw-slack
restart: unless-stopped
env_file:
- .env
volumes:
- ./data:/app/data
- ./skills:/app/skills
- ./SOUL.md:/app/SOUL.md
- ./MEMORY.md:/app/MEMORY.md
ports:
- "3000:3000" # Only needed for HTTP mode
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Create your .env file:
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_APP_TOKEN=xapp-your-app-token
OPENCLAW_SLACK_MODE=socket
OPENCLAW_MODEL=claude-sonnet
OPENCLAW_LOG_LEVEL=info
Create a basic SOUL.md:
You are the team's AI assistant in Slack.
Be helpful, concise, and direct.
Don't use corporate speak.
When you don't know something, say so.
Create an empty MEMORY.md (OpenClaw will populate it):
touch MEMORY.md data skills
Start it:
docker compose up -d
Check the logs:
docker compose logs -f
You should see the Socket Mode connection message within a few seconds. If you see errors, check your tokens first. Always the tokens.
Keeping It Running
The restart: unless-stopped in the compose file handles crashes and server reboots. But there are other things you need to worry about.
Updates. OpenClaw releases new versions roughly every two weeks. Some updates are important (security patches, especially post-ClawHavoc). To update:
docker compose pull
docker compose up -d
That pulls the latest image and restarts the container. Your data, skills, SOUL.md, and MEMORY.md are all in volumes, so they persist. But read the changelog before updating. Breaking changes happen. Version 0.48 to 0.49 changed how Socket Mode was configured and broke a lot of deployments that auto-updated without reading the notes.
Disk space. OpenClaw logs can grow fast if your workspace is active. The logging config in the compose file caps it at 30MB (3 files x 10MB), which is usually enough. But the data volume (where memory and context are stored) can grow too. Monitor it with du -sh /opt/openclaw/data occasionally.
Memory leaks. OpenClaw's Node.js runtime can slowly accumulate memory over time, especially with heavy context loads. If your 2GB VPS starts swapping, restart the container. A weekly docker compose restart in a cron job is a pragmatic workaround:
# Add to crontab
0 4 * * 0 cd /opt/openclaw && docker compose restart
SSL and Networking
If you're using Socket Mode (which you probably should for this kind of setup), you don't need SSL on your VPS. Socket Mode connections are outbound from your server to Slack; Slack doesn't need to reach your server. That means no nginx, no certificates, no domain name required.
If you need HTTP mode (for slash commands or interactive components), you'll need a reverse proxy with SSL. Caddy is the easiest option:
# Add to docker-compose.yml:
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes:
caddy_data:
With a Caddyfile like:
your-domain.com {
reverse_proxy openclaw:3000
}
Caddy handles SSL certificates automatically via Let's Encrypt. No manual renewal, no certbot cron jobs. For more on choosing between Socket Mode and HTTP mode, see our architecture comparison guide.
Monitoring
At minimum, you want to know when your bot goes down. A simple uptime check works:
# healthcheck.sh
#!/bin/bash
if ! docker compose ps | grep -q "Up"; then
curl -X POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL \
-d '{"text": "OpenClaw container is down!"}'
docker compose up -d
fi
Run it every 5 minutes via cron. There are fancier solutions (Uptime Kuma, Grafana), but a shell script and a Slack webhook will cover 90% of failures.
The Maintenance Reality
Here's what nobody tells you. The $15/month for the VPS is the smallest cost. The real costs:
- Time updating. 15-30 minutes every two weeks to read changelogs, test updates, and deploy. More if there's a breaking change.
- Debugging. When the bot stops responding at 11pm on a Friday, someone has to SSH in and figure out why. Socket Mode disconnects happen. Memory fills up. Tokens expire. These are solvable problems, but they require your time.
- Security. After ClawHavoc, you need to audit skills, keep OpenClaw updated, and monitor for unusual behavior. That's an ongoing commitment.
- Backups. Your MEMORY.md and data directory contain your agent's context and history. If the VPS dies and you don't have backups, you lose all of it. Set up automated backups to S3 or similar.
If you value your time at even $30/hour, the "maintenance" cost of a self-hosted OpenClaw instance is probably $50-100/month in labor. That's on top of the $15 VPS.
When Self-Hosting Makes Sense (and When It Doesn't)
Self-host if: you have engineering time to spare, you want full control over your data, you enjoy this kind of ops work, or your organization requires on-premise infrastructure for compliance reasons.
Don't self-host if: your team is small, nobody wants to be on-call for a Slack bot, you'd rather spend time on your actual product, or you just want it to work without thinking about it.
For the second group, that's exactly what SlackClaw is. Same OpenClaw agent, managed infrastructure, no Docker, no VPS, no 3am debugging. It costs more than $15/month, but it costs way less than your time. Compare the two approaches in detail on our self-hosted comparison page.