Paano i-setup ang OpenHands sa VPS
Matutong mag-install ng OpenHands gamit ang Docker sa VPS. Alamin ang tamang paraan ng pag-secure sa Docker socket para maiwasan ang root access risks.
Ano ang OpenHands, at ang isang panganib na dapat unawain muna
Ang OpenHands, dati ay OpenDevin, ay isang autonomous software-engineering agent. Bibigyan mo ito ng task gamit ang plain language, at plano nito ang trabaho, susulat ng code, magpapatakbo ng commands, magbabasa ng output, at uulit hanggang matapos ang task. Patatakbuhin mo ito sa sarili mong server gamit ang Docker at ituturo sa isang language model. Sa isang VPS, magiging coding agent ito na gumagana habang wala ka.
Isang katotohanan ang dapat magtakda ng iyong buong setup. Hindi lang nagmumungkahi ng code ang OpenHands, pinapatakbo rin nito ito. Para magawa ito, i-momo-mount ng controller container ang host Docker socket sa /var/run/docker.sock para makagawa ito ng mga sandbox container para sa bawat task. Anumang may kakayahang makipag-usap sa Docker socket ay maaaring magsimula ng bagong container na i-momo-mount ang buong filesystem ng iyong host. Ibig sabihin, ang socket access ay katumbas ng root access sa machine. Kaya ituring ang OpenHands box bilang isang server na nagpapatakbo ng untrusted code, dahil iyon ang eksaktong ginagawa nito. Ang lahat ng hardening choice sa ibaba ay base dito.
Ang mga kailangan mo
Kailangan mo ng VPS na tumatakbo ang Ubuntu 24.04 na may bagong Docker Engine, hindi bababa sa 4 GB na RAM, at isang API key para sa isang language model (OpenAI, Anthropic, o Google), o isang local model na sineserve ng Ollama sa parehong VPS. Sinusuportahan ng OpenHands ang dose-dosenang model backends, kaya ikaw ang pipili. Kung hindi ka pa nakapag-set up ng mga container dati, sakop ng basics ng Docker sa isang VPS ang mga assumption ng guide na ito.
Install gamit ang Docker
Ang OpenHands ay may dalawang images: ang application image na iyong patatakbuhin, at ang agent-server image na i-pu-pull nito para patakbuhin ang sandbox ng bawat task. Patakbuhin ito nang ganito, gamit ang kasalukuyang mga tag mula sa docs ng project:
docker run -it --rm --pull=always \
-e AGENT_SERVER_IMAGE_REPOSITORY=ghcr.io/openhands/agent-server \
-e AGENT_SERVER_IMAGE_TAG=1.26.0-python \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands:/.openhands \
-p 127.0.0.1:3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands \
docker.openhands.dev/openhands/openhands:1.8Dalawang detalye ang makakatipid sa iyo ng isang oras na pagkalito. Ang app image at ang agent-server image ay sadyang may magkaibang version numbers, kaya huwag subukang pagtugmain ang mga ito: gamitin ang agent-server tag na kapares ng iyong app version sa docs. At pansinin ang -p 127.0.0.1:3000:3000 sa halip na -p 3000:3000. Ang isang pagbabagong ito ang pagkakaiba sa pagitan ng isang Web UI na ikaw lang ang makaka-access at isang Web UI na maaaring ma-access ng buong internet, na tatalakayin sa susunod na section.
Panatilihing off ang Web UI sa public internet
Isineserve ng OpenHands ang interface nito sa port 3000. Ang interface na iyon ang nagpapatakbo ng isang agent na nagpapatakbo ng code, kaya ang pag-publish nito sa internet ay nagbibigay sa sinumang makakahanap nito ng remote path patungo sa isang process na nagpapatakbo ng mga command. I-bind ito sa loopback, gaya ng ginagawa sa run command sa itaas, at i-access ito mula sa iyong laptop gamit ang isang SSH tunnel:
ssh -L 3000:127.0.0.1:3000 you@your-vpsPagkatapos ay i-open ang http://127.0.0.1:3000 sa iyong sariling machine. Ang traffic ay dadaan sa iyong existing na SSH session, at walang bagong pakikingan sa public internet. Para sa mas permanenteng setup, ilagay ito sa likod ng isang VPN. Sa alinmang paraan, maglagay ng default-deny firewall sa harap ng box para walang ma-expose nang hindi sinasadya, at tandaan na ang firewall na IPv4 lang ang sakop ay mag-iiwan ng parehong port na bukas sa IPv6, na siyang IPv6 firewall gap na nagpapahamak sa maraming tao.
I-isolate ang model key at anumang repo credentials
Kailangan ng OpenHands ng API key para sa model nito, at madalas ay kailangan din ng token para mag-clone at mag-push sa iyong mga repository. Pareho itong maaaring magastos at kumilos bilang ikaw, kaya ituring ang mga ito na parang passwords. Panatilihin ang mga ito sa isang environment file na ang tamang account lang ang makakabasa, huwag ilagay sa run command dahil lalabas ang mga ito sa iyong shell history at process list, at huwag ilagay sa isang file sa loob ng isang git repository.
Patakbuhin ito sa isang box na maaari mong itapon
Dahil kailangang hawakan ng controller ang Docker socket, hindi mo lubos na mai-isolate ang OpenHands mula sa host nito. Ang tanging mitigation ay isolation sa pamamagitan ng placement: patakbuhin ang OpenHands sa isang dedicated na VPS na walang ibang mahahalagang laman, hindi sa server na tumatakbo din ang iyong database o iyong website. Kumuha ng snapshot bago magsimula, at mag-rebuild mula sa snapshot na iyon sa halip na magtiwala sa isang box na nagpatakbo ng agent-authored code sa loob ng isang linggo. Ang isang mura at disposable na single-purpose VPS ang tamang tahanan para dito.
I-harden ang box sa paligid nito
Ang iba ay standard server hygiene, at mas mahalaga ito dito kaysa sa karaniwan dahil ang workload ay mas risky. Gumawa ng isang unprivileged admin user sa halip na magtrabaho bilang root, base sa running services as an unprivileged user. I-set ang SSH sa key-only authentication. Pagkatapos ay patakbuhin ang checklist sa ibaba at itago ito sa lugar na makikita mo muli.
Para maunawaan ang mga moving parts sa halip na patakbuhin lang ang mga ito, tingnan ang building your own AI agent on a VPS; para sa isang lower-code platform, ang self-hosting Dify ay mas madaling simulan.
FAQ
Ligtas bang patakbuhin ang OpenHands sa isang server?
Maaari, kung mag-iingat, ngunit mas risky ito kaysa sa isang ordinaryong web app dahil nagsusulat at nagpapatakbo ito ng code at ang controller nito ay may hawak na host Docker socket, na katumbas ng root sa machine. Patakbuhin ito sa isang dedicated at disposable na VPS na walang ibang mahahalagang laman, panatilihin ang Web UI nito sa loopback sa likod ng isang SSH tunnel o VPN, i-isolate ang mga keys nito, at i-harden ang box. Huwag itong patakbuhin kasama ang iyong mga importanteng services.
Bakit kailangan ng OpenHands ang Docker socket?
Ang OpenHands ay pinapatakbo ang bawat task sa isang bagong sandbox container, at hinihiling nito sa host Docker daemon na gumawa ng mga container na iyon sa pamamagitan ng pag-mount ng /var/run/docker.sock sa controller nito. Nagbibigay ito sa controller container ng kontrol sa Docker sa host, na makapangyarihan at risky, kaya ang host mismo ay dapat ituring na tumatakbo ng untrusted code.
Maaari bang gumamit ang OpenHands ng local model sa halip na paid API?
Oo. Sinusuportahan ng OpenHands ang mga local model na sineserve ng Ollama o vLLM, kaya maaari mo itong patakbuhin nang fully self-hosted nang walang per-token cost at walang data na lalabas sa iyong server. Kailangan mo ng machine na may sapat na memory para sa isang mahusay na coding model, na siya ring sizing question na tinalakay sa Ollama guide.
Dapat ko bang patakbuhin ang OpenHands sa aking main server?
Hindi. Dahil nagpapatakbo ito ng agent-authored code at may hawak na Docker socket, panatilihin ito sa isang hiwalay na single-purpose VPS na handa mong i-rebuild. Ang paglalagay nito kasama ang isang database, isang website, o ang iyong iba pang services ay nangangahulugang ang pagkakamali ng agent, o isang bug dito, ay maaaring makaabot sa mga bagay na hindi naman dapat nito hawakan.