OpenHands
Generated on 10 Sep 2026 from the OpenHands catalog page
Deploy OpenHands Agent Canvas, an open-source self-hosted control center for AI coding agents and automations. Run agents on your Droplet, connect from the browser, and optionally use DigitalOcean Serverless Inference AI for inference.
What is OpenHands?
OpenHands is the open platform for cloud coding agents. Agent Canvas is the self-hosted developer control center: start conversations, run automations, and work with OpenHands or other ACP-compatible agents across local and remote backends.
- Self-hosted – Agents and settings stay on your Droplet
- Browser UI – Agent Canvas on your droplet IP (Caddy reverse proxy)
- Public mode – Protected by a generated API key (
LOCAL_BACKEND_API_KEY) - DigitalOcean Serverless Inference – Optional one-key setup for OpenAI-compatible models
- Workspace – Projects under
/home/openhands/projects
Key Features
- Always-on agent backend for coding tasks and automations
- Web UI with API-key gate for internet-facing deployments
- Optional DigitalOcean model access key configuration at first login
- Helper scripts for start/stop/restart/status/update and custom domain TLS
- Ubuntu 24.04 LTS with UFW and fail2ban
System Requirements
OpenHands Agent Canvas runs the agent server on the host. Prefer at least 4 GB RAM.
| Use Case | RAM | CPU | Storage |
|---|---|---|---|
| Minimum (single user) | 4 GB | 2 vCPU | 50 GB |
| Recommended | 8 GB | 4 vCPU | 100 GB |
Included System Components
- Ubuntu 24.04 LTS
- OpenHands Agent Canvas
- Node.js and uv
- Caddy reverse proxy (ports 80/443 → Agent Canvas on localhost:8000)
- UFW and fail2ban
- Dedicated
openhandssystem user
Software Included
| Package | Version | License |
|---|---|---|
| NodeJS | 22.23.1 | |
| fail2ban | 5.4.1 | GNU General Public License 2.0 |
| caddy | 2.11.2 | Apache License 2.0 |
| OpenHands Agent Canvas | 1.5.0 | Github - OpenHands/agent-canvas |
Creating an App using the Control Panel
Click the Deploy to DigitalOcean button to create a Droplet based on this 1-Click App. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account.
Creating an App using the API
In addition to creating a Droplet from the OpenHands 1-Click App using the control panel, you can also use the DigitalOcean API. As an example, to create a 4GB OpenHands Droplet in the SFO2 region, you can use the following curl command. You need to either save your API access token to an environment variable or substitute it in the command below.
curl -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer '$TOKEN'' -d \
'{"name":"choose_a_name","region":"sfo2","size":"s-2vcpu-4gb","image":"openhands"}' \
"https://api.digitalocean.com/v2/droplets"Getting Started After Deploying OpenHands
Getting Started
1. Deploy the Droplet
- Select this 1-Click App from the DigitalOcean Marketplace
- Choose a Droplet size (4 GB RAM minimum recommended)
- Add your SSH key
- Optionally set droplet environment variables
MODEL_ACCESS_KEY,INFERENCE_MODEL, andDO_INFERENCE_ROUTER - Create the Droplet
2. Open the Web UI
- Visit
https://your-droplet-ip - Paste the API key shown in the SSH MOTD (also in
/opt/openhands.envasLOCAL_BACKEND_API_KEY)
3. SSH (optional setup wizard)
ssh root@your-droplet-ipIf Serverless Inference was not passed at create time, the first-login wizard can configure a DigitalOcean Serverless Inference model access key. After the key, press Enter for MiniMax M2.5, enter a model id, or R for the Intelligent Inference Router. Create keys at https://cloud.digitalocean.com/gen-ai/model-access-keys.
4. Configure LLM and start working
- In the UI, open Settings > LLM (confirm Serverless Inference settings or add another provider)
- Place code under
/home/openhands/projects - Start a conversation from the home screen
Managing OpenHands
| Action | Command |
|---|---|
| Start | /opt/start-openhands.sh |
| Stop | /opt/stop-openhands.sh |
| Restart | /opt/restart-openhands.sh |
| Status | /opt/status-openhands.sh |
| Update | /opt/update-openhands.sh |
| Domain TLS | /opt/setup-openhands-domain.sh |
| Re-run setup | /etc/setup_wizard.sh |
systemd: systemctl {start|stop|restart|status} openhands
Logs: journalctl -u openhands -f
Configuration paths
- Env / secrets:
/opt/openhands.env - API key file:
/home/openhands/.openhands/api-key.txt - Settings:
/home/openhands/.openhands/ - Getting started:
/root/openhands_info.txt
DigitalOcean Serverless Inference
When configured, OpenHands uses the OpenAI-compatible Serverless Inference endpoint:
- Base URL:
https://inference.do-ai.run/v1 - Model form:
openai/<model-id>(defaultopenai/minimax-m2.5) - Intelligent Inference Router: set
DO_INFERENCE_ROUTER=<name>(or pickRin the setup wizard) to useopenai/router:<name>with the same key
You can change the model in Settings > LLM or by re-running the setup wizard.
Custom domain (HTTPS)
Point a DNS A record at the droplet, then:
sudo /opt/setup-openhands-domain.shSecurity notes
- Agent Canvas runs as the
openhandsuser and can read/write that user’s filesystem and run commands in that context - Keep
LOCAL_BACKEND_API_KEYprivate; anyone with the key can use the agent - Prefer a DigitalOcean Cloud Firewall restricting SSH (and optionally HTTP/HTTPS) to your IP
- For production, use a custom domain with TLS via
/opt/setup-openhands-domain.sh
Additional Resources
- Product: https://www.openhands.dev/
- Self-hosting: https://docs.openhands.dev/openhands/usage/agent-canvas/backend-setup/vm
- Docs: https://docs.openhands.dev/
- GitHub: https://github.com/OpenHands/agent-canvas
Support
For OpenHands-specific issues: https://docs.openhands.dev/ and the OpenHands community Slack.
For DigitalOcean Droplet issues: https://www.digitalocean.com/support