VPS पर OpenHands कैसे install करें
OpenHands को VPS पर Docker के साथ setup करने की विधि। Docker socket mount होने के कारण security risks से बचने के लिए hardening steps यहाँ देखें।
OpenHands क्या है, और सबसे पहले समझने योग्य एक जोखिम
OpenHands, जिसे पहले OpenDevin कहा जाता था, एक autonomous software-engineering agent है। आप इसे साधारण भाषा में एक task देते हैं, और यह काम की योजना बनाता है, code लिखता है, commands चलाता है, output पढ़ता है, और task पूरा होने तक इसे दोहराता है। आप इसे Docker के साथ अपने स्वयं के server पर चलाते हैं और इसे किसी language model की ओर point करते हैं। एक VPS पर, यह एक coding agent बन जाता है जो आपके न होने पर भी काम करता रहता है।
एक तथ्य है जो आपके पूरे setup को प्रभावित करेगा। OpenHands केवल code suggest नहीं करता, यह उसे run भी करता है, और ऐसा करने के लिए इसका controller container host Docker socket को /var/run/docker.sock पर mount करता है ताकि यह प्रत्येक task के लिए sandbox containers बना सके। कोई भी चीज़ जो Docker socket से बात कर सकती है, वह एक नया container शुरू कर सकती है जो आपके पूरे host filesystem को mount करता है, जिसका अर्थ है कि socket access प्रभावी रूप से machine पर root है। इसलिए OpenHands box को एक ऐसे server की तरह मानें जो untrusted code चलाता है, क्योंकि यह वास्तव में वही करता है। नीचे दिए गए सभी hardening विकल्प इसी आधार पर हैं।
आपको क्या चाहिए
आपको Ubuntu 24.04 वाला एक VPS चाहिए जिसमें recent Docker Engine, कम से कम 4 GB RAM, और किसी language model (OpenAI, Anthropic, या Google) के लिए API key, या Ollama on the same VPS द्वारा serve किया गया local model चाहिए। OpenHands दर्जनों model backends को support करता है, इसलिए चुनाव आपका है। यदि आपने पहले कभी containers setup नहीं किए हैं, तो the basics of Docker on a VPS उन basics को कवर करता है जिन्हें यह guide मानकर चलती है।
Docker के साथ install करें
OpenHands दो images के रूप में आता है: वह application image जिसे आप run करते हैं, और एक agent-server image जिसे यह प्रत्येक task के sandbox को चलाने के लिए pull करता है। इसे इस तरह चलाएं, project के docs से current tags का उपयोग करते हुए:
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दो विवरण आपको एक घंटे की उलझन से बचाएंगे। App image और agent-server image जानबूझकर अलग-अलग version numbers रखते हैं, इसलिए उन्हें समान बनाने का प्रयास न करें: उस agent-server tag का उपयोग करें जिसे docs आपके app version के साथ pair करते हैं। और -p 3000:3000 के बजाय -p 127.0.0.1:3000:3000 पर ध्यान दें। वह एक बदलाव एक ऐसे Web UI के बीच का अंतर है जिसे केवल आप एक्सेस कर सकते हैं और एक ऐसे Web UI के बीच जिसे पूरा internet एक्सेस कर सकता है, जिसके बारे में अगला section है।
Web UI को public internet से दूर रखें
OpenHands port 3000 पर अपना interface serve करता है। वह interface एक agent को चलाता है जो code execute करता है, इसलिए इसे internet पर publish करने का अर्थ है कि जो कोई भी इसे ढूंढता है, उसे commands execute करने वाली process में एक remote path मिल जाता है। इसे loopback पर bind करें, जैसा कि ऊपर दिया गया run command करता है, और अपने laptop से SSH tunnel के माध्यम से इसे एक्सेस करें:
ssh -L 3000:127.0.0.1:3000 you@your-vpsफिर अपने स्वयं के machine पर http://127.0.0.1:3000 खोलें। Traffic आपके मौजूदा SSH session का उपयोग करता है, और public internet पर कुछ भी नया listen नहीं कर रहा होता है। अधिक permanent setup के लिए, इसके बजाय इसे VPN के पीछे रखें। किसी भी स्थिति में, box के सामने एक default-deny firewall लगाएं ताकि गलती से कुछ भी expose न हो, और याद रखें कि केवल IPv4 को कवर करने वाला firewall IPv6 पर भी वही port खुला छोड़ देता है, जो वह IPv6 firewall gap है जिसमें बहुत से लोग फंस जाते हैं।
Model key और किसी भी repo credentials को isolate करें
OpenHands को अपने model के लिए एक API key की आवश्यकता होती है, और अक्सर आपके repositories में clone और push करने के लिए एक token की भी। दोनों पैसे खर्च कर सकते हैं और आपके रूप में कार्य कर सकते हैं, इसलिए उन्हें passwords की तरह मानें। उन्हें एक environment file में रखें जिसे केवल सही account ही पढ़ सके, कभी भी run command में न रखें जहाँ वे आपकी shell history और process list में आ जाते हैं, और कभी भी git repository के अंदर किसी file में न रखें।
इसे एक ऐसे box पर चलाएं जिसे आप discard कर सकें
चूँकि controller के पास Docker socket होना चाहिए, आप OpenHands को इसके host से पूरी तरह से sandbox नहीं कर सकते। वास्तविक mitigation placement द्वारा isolation है: OpenHands को एक dedicated VPS पर चलाएं जिसमें आपके द्वारा महत्वपूर्ण मानी जाने वाली कोई अन्य चीज़ न हो, न कि उस server पर जहाँ आपका database या आपकी website भी चलती है। शुरू करने से पहले एक snapshot लें, और उस box पर भरोसा करने के बजाय उस snapshot से rebuild करें जिसने एक सप्ताह तक agent-authored code चलाया है। एक सस्ता, disposable, single-purpose VPS इसके लिए सही घर है।
इसके चारों ओर box को harden करें
बाकी सब standard server hygiene है, और यहाँ यह सामान्य से अधिक महत्वपूर्ण है क्योंकि workload सामान्य से अधिक risky है। root के रूप में काम करने के बजाय एक unprivileged admin user बनाएं, running services as an unprivileged user का पालन करते हुए। SSH को key-only authentication पर ले जाएं। फिर नीचे दी गई checklist चलाएं और इसे कहीं ऐसी जगह रखें जहाँ आप इसे फिर से देख सकें।
केवल चलाने के बजाय moving parts को समझने के लिए, building your own AI agent on a VPS देखें; कम-code platform के लिए, self-hosting Dify एक आसान शुरुआत है।
FAQ
क्या OpenHands को server पर चलाना सुरक्षित है?
सावधानी के साथ यह हो सकता है, लेकिन यह एक साधारण web app की तुलना में अधिक risky है क्योंकि यह code लिखता है और चलाता है, और इसका controller host Docker socket को hold करता है, जो प्रभावी रूप से machine पर root है। इसे एक dedicated, disposable VPS पर चलाएं जिसमें कोई अन्य मूल्यवान चीज़ न हो, इसके Web UI को SSH tunnel या VPN के पीछे loopback पर रखें, इसकी keys को isolate करें, और box को harden करें। इसे अपनी महत्वपूर्ण services के साथ न चलाएं।
OpenHands को Docker socket की आवश्यकता क्यों है?
OpenHands प्रत्येक task को एक fresh sandbox container में चलाता है, और यह host Docker daemon से उन containers को बनाने के लिए कहता है जो /var/run/docker.sock को इसके controller में mount करते हैं। यह controller container को host पर Docker पर नियंत्रण देता है, जो शक्तिशाली और risky है, इसलिए host के साथ ही एक ऐसे host के रूप में व्यवहार किया जाना चाहिए जो untrusted code चलाता है।
क्या OpenHands paid API के बजाय local model का उपयोग कर सकता है?
हाँ। OpenHands Ollama या vLLM द्वारा serve किए गए local models को support करता है, इसलिए आप इसे बिना किसी per-token cost और बिना server से डेटा बाहर भेजे पूरी तरह से self-hosted चला सकते हैं। आपको एक ऐसे machine की आवश्यकता है जिसमें एक सक्षम coding model के लिए पर्याप्त memory हो, जो कि वही sizing question है जिसे Ollama guide में कवर किया गया है।
क्या मुझे OpenHands को अपने main server पर चलाना चाहिए?
नहीं। क्योंकि यह agent-authored code चलाता है और Docker socket को hold करता है, इसे एक अलग, single-purpose VPS पर रखें जिसे आप rebuild करने के लिए तैयार हों। इसे database, website, या अपनी अन्य services के साथ co-locate करने का अर्थ है कि agent की एक गलती, या इसमें कोई bug, उन चीज़ों तक पहुँच सकता है जिन्हें छूने के लिए इसे कभी नहीं बनाया गया था।