Jinsi ya kuweka OpenHands kwenye VPS kwa usalama
Jifunze kusakinisha OpenHands kwa kutumia Docker kwenye VPS yako. Pata mwongozo wa kulinda Docker socket na kuzuia ufikiaji usioidhinishwa kwenye Web UI ili kuzuia hatari za root.
OpenHands ni nini, na hatari moja unayopaswa kuielewa kwanza
OpenHands, ambayo zamani ilijulikana kama OpenDevin, ni wakala wa uhandisi wa programu anayejitegemea. Unampa kazi kwa lugha ya kawaida, naye hupanga kazi hiyo, huandika msimbo (code), huendesha amri, husoma matokeo, na kurudia mchakato hadi kazi ikamilike. Unaiendesha kwenye seva yako mwenyewe kwa kutumia Docker na kuielekeza kwenye language model. Kwenye VPS, inakuwa wakala wa uandishi wa msimbo anayefanya kazi ukiwa haupo.
Ukweli mmoja unapaswa kuongoza usanidi wako wote. OpenHands haitoi mapendekezo ya msimbo pekee, bali huiendesha, na ili kufanya hivyo, kontena lake la kidhibiti (controller container) huweka (mount) Docker socket ya mwenyeji kwenye /var/run/docker.sock ili iweze kuanzisha kontena za sandbox kwa kila kazi. Chochote kinachoweza kuwasiliana na Docker socket kinaweza kuanzisha kontena mpya inayoweka mfumo mzima wa faili wa mwenyeji, jambo linalomaanisha kuwa ufikiaji wa socket ni sawa na kuwa na uwezo wa root kwenye mashine. Kwa hiyo, ichukulie mashine ya OpenHands kama seva inayoendesha msimbo usioaminika, kwa sababu ndivyo inavyofanya. Kila chaguo la kuimarisha usalama (hardening) hapa chini linatokana na ukweli huo.
Unachohitaji
Unahitaji VPS inayoendesha Ubuntu 24.04 yenye Docker Engine ya hivi karibuni, angalau 4 GB ya RAM, na API key ya language model (OpenAI, Anthropic, au Google), au model ya ndani inayohudumiwa na Ollama kwenye VPS hiyo hiyo. OpenHands inasaidia backends nyingi za model, kwa hivyo chaguo ni lako. Ikiwa hujawahi kusanidi containers hapo awali, misingi ya Docker kwenye VPS inashughulikia mambo ya msingi ambayo mwongozo huu unayachukulia kuwa unayajua.
Usakinishaji kwa kutumia Docker
OpenHands inatolewa kama images mbili: image ya programu unayoendesha, na image ya agent-server ambayo inavuta ili kuendesha sandbox ya kila kazi. Iendeshe hivi, ukibadilisha tags za sasa kutoka kwenye nyaraka za mradi:
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.8Maelezo mawili yatakuepushia saa nzima ya kuchanganyikiwa. Image ya programu na image ya agent-server zina namba tofauti za version kwa makusudi, kwa hivyo usijaribu kuzifanya zilingane: tumia tag ya agent-server ambayo nyaraka zinaioanisha na version ya programu yako. Na angalia -p 127.0.0.1:3000:3000 badala ya -p 3000:3000. Mabadiliko hayo madogo ndiyo tofauti kati ya Web UI unayoweza kuifikia wewe pekee na ile ambayo Internet nzima inaweza kuifikia, jambo ambalo sehemu inayofuata inalihusu.
Weka Web UI mbali na mtandao wa umma
OpenHands hutoa interface yake kwenye port 3000. Interface hiyo huendesha wakala (agent) anayetekeleza msimbo, kwa hivyo kuichapisha kwenye mtandao wa umma humpa yeyote anayeipata njia ya mbali ya kuingia kwenye mchakato unaotekeleza amri. Iunganishe kwenye loopback, kama amri ya kuendesha hapo juu inavyofanya, na uifikie kutoka kwenye laptop yako kupitia SSH tunnel:
ssh -L 3000:127.0.0.1:3000 you@your-vpsKisha fungua http://127.0.0.1:3000 kwenye mashine yako mwenyewe. Trafiki hupitia session yako ya SSH iliyopo, na hakuna kitu kipya kinachosikiliza kwenye mtandao wa umma. Sio kila wakala anahitaji port: session za Claude Code kwenye VPS moja huwasiliana kupitia terminal, kwa hivyo kitu pekee unachokifichua ni SSH yenyewe. Tabia hiyo hiyo ya kutumia loopback na tunnel inafaa kutumika kwa kila dashibodi ya wakala unayoiweka; kufikia UI ya kuchanganua ya open-kritt kupitia tunnel hufanya kazi kwa njia ile ile, isipokuwa kwenye port 5173. Kwa usanidi wa kudumu zaidi, iweke nyuma ya VPN badala yake. Vyovyote vile, weka firewall ya default-deny mbele ya seva ili hakuna kitu kitakachofichuliwa kwa bahati mbaya, na kumbuka kuwa firewall inayoshughulikia IPv4 pekee huacha port hiyo hiyo ikiwa wazi kwenye IPv6, ambayo ndiyo pengo la firewall ya IPv6 linalowakamata watu wengi.
Tenga ufunguo wa model na vitambulisho vya repo
OpenHands inahitaji API key kwa ajili ya model yake, na mara nyingi token ya ku-clone na ku-push kwenye repositories zako. Zote mbili zinaweza kutumia pesa na kutenda kwa niaba yako, kwa hivyo zishughulikie kama nywila. Ziweke kwenye faili ya mazingira (environment file) ambayo akaunti husika pekee ndiyo inayoweza kuisoma, kamwe usiziweke kwenye amri ya kuendesha (run command) ambapo zitaishia kwenye historia ya shell yako na orodha ya michakato (process list), na kamwe usiziweke kwenye faili iliyo ndani ya git repository. Ikiwa unahifadhi asili zake kwenye password manager unayojiendeshea mwenyewe (self-hosted), imarisha seva hiyo pia, kwa sababu pointi dhaifu za vault ni admin token yake na faili yake ya backup badala ya vitu vilivyosimbwa (encrypted items) vyenyewe, kama Vaultwarden hardening pass inavyoelekeza.
Iendeshe kwenye seva unayoweza kuitupa
Kwa sababu controller lazima ishike Docker socket, huwezi kuweka OpenHands kwenye sandbox kamili mbali na host wake. Njia sahihi ya kujilinda ni kutumia utengano wa kimazingira: iendeshe OpenHands kwenye VPS maalum ambayo haina kitu kingine chochote cha thamani, si kwenye seva inayohudumia database au tovuti yako. Chukua snapshot kabla ya kuanza, na ujenge upya kutoka kwenye snapshot hiyo badala ya kuamini seva iliyoendesha code iliyoandikwa na agent kwa wiki nzima. VPS ya bei nafuu, inayoweza kutupwa, na yenye kazi moja ndiyo mahali sahihi pa kuiweka. Uwekaji wa seva ndiyo njia pekee ya kudhibiti hatari ambayo OpenHands inakupa hapa, kwa hivyo ikiwa ungependa pia kudhibiti kiasi ambacho agent anaweza kufanya kabla ya kusimama na kuomba ruhusa, njia za ruhusa za Claude Code zinaonyesha jinsi lever hiyo ya pili inavyofanya kazi kwenye seva ambayo hakuna mtu anayeifuatilia.
Imarisha seva yako
Mambo mengine ni usafi wa kawaida wa seva, na ni muhimu zaidi hapa kwa sababu mzigo wa kazi una hatari kubwa kuliko kawaida. Unda mtumiaji wa kawaida mwenye haki za admin badala ya kufanya kazi kama root, ukifuata kuendesha huduma kama mtumiaji asiye na haki za root. Badilisha SSH itumie uthibitishaji wa funguo (key-only authentication) pekee. Kisha fanya ukaguzi wa orodha hapa chini na uiweke mahali ambapo utaiona tena.
Ili kuelewa sehemu zinazohusika badala ya kuzikimbiza tu, angalia kujenga AI agent yako mwenyewe kwenye VPS; kwa jukwaa la low-code, kujihostia Dify ni njia rahisi zaidi ya kuanzia.
FAQ
Je, ni salama kuendesha OpenHands kwenye seva?
Inaweza kuwa salama, kwa uangalifu, lakini ni hatari zaidi kuliko programu ya kawaida ya wavuti kwa sababu huandika na kuendesha msimbo (code), na kidhibiti chake kinashikilia Docker socket ya mwenyeji, ambayo kimsingi ni sawa na root kwenye mashine hiyo. Iendeshe kwenye VPS maalum na ya muda mfupi ambayo haina kitu kingine cha thamani, weka Web UI yake kwenye loopback nyuma ya SSH tunnel au VPN, tenga funguo zake (keys), na uimarishe usalama wa mashine hiyo. Usiiendeshe kando ya huduma zako muhimu.
Kwa nini OpenHands inahitaji Docker socket?
OpenHands huendesha kila kazi kwenye container mpya ya sandbox, na huiomba daemon ya Docker ya mwenyeji kuunda container hizo kwa kuweka /var/run/docker.sock ndani ya kidhibiti chake. Hilo huipa container ya kidhibiti uwezo wa kudhibiti Docker kwenye mwenyeji, jambo ambalo ni lenye nguvu na hatari, kwa hivyo mwenyeji mwenyewe lazima achukuliwe kama anayeendesha msimbo usioaminika.
Je, OpenHands inaweza kutumia model ya ndani badala ya API ya kulipia?
Ndiyo. OpenHands inasaidia model za ndani zinazotolewa na Ollama au vLLM, kwa hivyo unaweza kuiendesha ikiwa imejihifadhi kikamilifu (fully self-hosted) bila gharama kwa kila token na bila data kutoka kwenye seva yako. Unahitaji mashine yenye kumbukumbu ya kutosha kwa ajili ya model ya uandishi wa msimbo yenye uwezo, ambayo ni swali lilelile la ukubwa lililoshughulikiwa kwenye mwongozo wa Ollama.
Je, niendeshe OpenHands kwenye seva yangu kuu?
Hapana. Kwa sababu huendesha msimbo uliotungwa na wakala (agent) na inashikilia Docker socket, iweke kwenye VPS tofauti na ya kazi moja ambayo uko tayari kuijenga upya. Kuiweka pamoja na database, tovuti, au huduma zako nyingine inamaanisha kuwa kosa la wakala, au mdudu (bug) ndani yake, linaweza kufikia vitu ambavyo haikupaswa kuvigusa kamwe.