SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-08-31

Paano i-self-host ang OpenHands sa VPS gamit ang Docker

I-deploy ang OpenHands sa VPS gamit ang Docker, at alamin kung bakit ang access sa Docker socket ay katumbas ng root access bago i-secure ang Web UI at secrets.

Ano ang OpenHands, at ang isang panganib na dapat munang maunawaan

Ang OpenHands, na dating OpenDevin, ay isang autonomous software-engineering agent. Bigyan ito ng task sa plain language, at pinaplano nito ang gawain, nagsusulat ng code, nagpapatakbo ng commands, binabasa ang output, at inuulit ang proseso hanggang matapos ang task. Pinapatakbo ito sa sarili mong server gamit ang Docker at ikinokonekta sa isang language model. Sa VPS, nagiging coding agent ito na gumagana kahit wala ka.

Dapat maging batayan ng buong setup mo ang isang mahalagang detalye. Hindi lamang nagmumungkahi ng code ang OpenHands; pinapatakbo rin nito ang code. Para magawa iyon, mina-mount ng controller container nito ang host Docker socket sa /var/run/docker.sock upang makapagpaandar ito ng sandbox containers para sa bawat task. Anumang makakakonekta sa Docker socket ay makapagpapaandar ng bagong container na mina-mount ang buong filesystem ng host. Ibig sabihin, ang access sa socket ay katumbas ng root access sa machine. Kaya ituring ang OpenHands box bilang server na nagpapatakbo ng untrusted code, dahil iyon mismo ang ginagawa nito. Mula rito nagmumula ang bawat hardening choice sa ibaba.

Mga kailangan

Kailangan mo ng VPS na nagpapatakbo ng Ubuntu 24.04 na may kamakailang Docker Engine, hindi bababa sa 4 GB RAM, at API key para sa isang language model (OpenAI, Anthropic, o Google), o isang local model na sine-serve ng Ollama sa parehong VPS. Sinusuportahan ng OpenHands ang dose-dosenang model backend, kaya nasa iyo ang pagpili. Kung hindi ka pa nakakapag-set up ng mga container, saklaw ng mga pangunahing kaalaman sa Docker sa isang VPS ang mga kinakailangang konsepto sa gabay na ito.

Mag-install gamit ang Docker

Inilalabas ang OpenHands bilang dalawang image: ang application image na pinapatakbo mo at ang agent-server image na kinukuha nito upang patakbuhin ang sandbox ng bawat task. Patakbuhin ito sa ganitong paraan. Palitan ang mga tag gamit ang kasalukuyang tag mula sa documentation ng proyekto:

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.8

May dalawang detalye na makakaiwas sa isang oras na pagkalito. Sadyang magkaiba ang version number ng app image at agent-server image, kaya huwag subukang pag-matchin ang mga ito. Gamitin ang agent-server tag na itinatambal ng documentation sa version ng app mo. Pansinin din ang -p 127.0.0.1:3000:3000 sa halip na -p 3000:3000. Ang maliit na pagbabagong ito ang nagtatakda kung Web UI lamang na maa-access mo ang tatakbo o Web UI na maa-access ng buong internet. Tatalakayin ito sa susunod na seksyon.

Panatilihing hindi naa-access sa public internet ang Web UI

Inihahatid ng OpenHands ang interface nito sa port 3000. Ang interface na ito ang kumokontrol sa isang agent na nagpapatakbo ng code. Kaya kapag inilathala ito sa internet, binibigyan mo ang sinumang makakita nito ng remote na daan papunta sa prosesong nagpapatupad ng mga command. I-bind ito sa loopback, gaya ng ginagawa ng run command sa itaas, at i-access ito mula sa iyong laptop sa pamamagitan ng SSH tunnel:

ssh -L 3000:127.0.0.1:3000 you@your-vps

Pagkatapos, buksan ang http://127.0.0.1:3000 sa sarili mong machine. Dumadaan ang traffic sa kasalukuyan mong SSH session, at walang bagong nagli-listen sa public internet. Hindi lahat ng agent ay nangangailangan ng port: nagpapalitan ng mensahe ang mga Claude Code session sa iisang VPS sa pamamagitan ng terminal, kaya SSH lamang ang kailangang i-expose. Mainam ding gamitin ang parehong loopback-and-tunnel na paraan sa bawat agent dashboard na iho-host mo; gumagana sa parehong paraan ang pag-access sa scanning UI ng open-kritt sa pamamagitan ng tunnel, ngunit sa port 5173. Para sa mas permanenteng setup, ilagay ito sa likod ng VPN. Alinman dito, maglagay ng default-deny firewall sa harap ng machine upang walang aksidenteng ma-expose. Tandaan ding kung IPv4 lamang ang sinasaklaw ng firewall, mananatiling bukas ang parehong port sa IPv6. Ito ang IPv6 firewall gap na nakalalampas sa maraming tao.

Ihiwalay ang model key at anumang credential ng repository

Kailangan ng OpenHands ng API key para sa model nito, at kadalasan ay token para mag-clone at mag-push sa iyong mga repository. Parehong maaaring gumastos ng pera at kumilos bilang ikaw, kaya ituring ang mga ito na parang mga password. Ilagay ang mga ito sa isang environment file na tanging tamang account lamang ang maaaring magbasa. Huwag kailanman ilagay ang mga ito sa run command, kung saan mapupunta ang mga ito sa shell history at process list. Huwag ding ilagay ang mga ito sa file sa loob ng git repository. Kung itinatago mo ang mga orihinal sa isang self-hosted password manager, i-harden din ang server na iyon. Ang mahihinang bahagi ng vault ay ang admin token at backup file nito, hindi ang mismong mga naka-encrypt na item, gaya ng tinatalakay sa pass sa pag-harden ng Vaultwarden.

Patakbuhin ito sa isang server na maaari mong itapon

Dahil kailangang hawakan ng controller ang Docker socket, hindi mo ganap na maihihiwalay ang OpenHands sa host nito. Ang tapat na mitigation ay isolation batay sa placement: patakbuhin ang OpenHands sa isang dedicated VPS na walang ibang mahalagang laman, hindi sa server na nagpapatakbo rin ng database o website mo. Gumawa ng snapshot bago magsimula, at mag-rebuild mula sa snapshot na iyon sa halip na magtiwala sa isang server na nagpatakbo ng code na isinulat ng agent sa loob ng isang linggo. Ang mura, disposable, single-purpose na VPS ang tamang paglagyan nito. Ang placement lang ang tunay na control na ibinibigay ng OpenHands dito. Kung gusto mo ring kontrolin kung gaano karaming aksyon ang maaaring gawin ng agent bago ito huminto para magtanong, ipinapakita ng permission modes ng Claude Code kung ano ang hitsura ng ikalawang lever na iyon sa isang server na walang nagbabantay.

Patigasin ang server na nagpapatakbo nito

Karaniwang server hygiene ang iba pang hakbang, pero mas mahalaga ito rito kaysa karaniwan dahil mas mataas ang panganib ng workload na ito. Gumawa ng unprivileged admin user sa halip na magtrabaho bilang root, ayon sa pagpapatakbo ng mga serbisyo bilang unprivileged user. Ilipat ang SSH sa key-only authentication. Pagkatapos, patakbuhin ang checklist sa ibaba at itago ito sa lugar na muli mong makikita.

ToolVPS hardening checklist

Para maunawaan ang mga bahaging bumubuo rito sa halip na basta patakbuhin ang mga ito, tingnan ang pagbuo ng sarili mong AI agent sa VPS; para sa platform na mas kaunti ang code, mas madaling panimula ang self-hosting ng Dify.

FAQ

Ligtas bang patakbuhin ang OpenHands sa isang server?

Maaari itong maging ligtas kung maingat ang configuration, pero mas mataas ang panganib nito kaysa sa ordinaryong web app dahil nagsusulat at nagpapatakbo ito ng code. Hawak din ng controller nito ang host Docker socket, na sa praktika ay katumbas ng root access sa machine. Patakbuhin ito sa dedicated at disposable na VPS na walang ibang mahalagang laman. Panatilihin ang Web UI nito sa loopback at i-access ito sa pamamagitan ng SSH tunnel o VPN. Ihiwalay ang mga key nito at i-harden ang server. Huwag itong patakbuhin kasabay ng mahahalagang serbisyo.

Bakit kailangan ng OpenHands ang Docker socket?

Pinapatakbo ng OpenHands ang bawat task sa bagong sandbox container. Hinihiling nito sa host Docker daemon na likhain ang mga container na ito sa pamamagitan ng pag-mount ng /var/run/docker.sock sa controller nito. Dahil dito, nagkakaroon ng control ang controller container sa Docker ng host. Makapangyarihan at mapanganib ito, kaya dapat ituring ang host bilang machine na nagpapatakbo 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 sine-serve ng Ollama o vLLM. Dahil dito, maaari mo itong patakbuhin nang fully self-hosted, walang per-token cost, at walang data na lumalabas sa server mo. Kailangan mo ng machine na may sapat na memory para sa capable coding model. Ito rin ang sizing question na sakop ng Ollama guide.

Dapat ko bang patakbuhin ang OpenHands sa main server ko?

Hindi. Dahil nagpapatakbo ito ng code na isinulat ng agent at hawak nito ang Docker socket, panatilihin ito sa hiwalay at single-purpose na VPS na handa mong i-rebuild. Kapag isinama mo ito sa database, website, o iba pang serbisyo, maaaring maabot ng pagkakamali ng agent o ng bug nito ang mga bagay na hindi naman nito dapat ma-access.