SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-24

VPS پر OpenHands کیسے انسٹال کریں

OpenHands کو VPS پر Docker کے ذریعے سیٹ اپ کرنے کا طریقہ سیکھیں۔ Docker socket کی رسائی اور Web UI کو محفوظ بنانے کے لیے ضروری hardening اقدامات جانیں۔

OpenHands کیا ہے، اور پہلا خطرہ جو سمجھنا ضروری ہے

OpenHands، جسے پہلے OpenDevin کہا جاتا تھا، ایک خودکار سافٹ ویئر انجینئرنگ ایجنٹ ہے۔ آپ اسے سادہ زبان میں کوئی کام دیتے ہیں، اور یہ کام کی منصوبہ بندی کرتا ہے، کوڈ لکھتا ہے، کمانڈز چلاتا ہے، آؤٹ پٹ پڑھتا ہے، اور کام مکمل ہونے تک عمل دہراتا ہے۔ آپ اسے Docker کے ساتھ اپنے سرور پر چلا سکتے ہیں اور اسے کسی لینگویج ماڈل سے منسلک کر سکتے ہیں۔ VPS پر یہ ایک کوڈنگ ایجنٹ بن جاتا ہے جو آپ کی غیر موجودگی میں کام کرتا رہتا ہے۔

ایک حقیقت ہے جو آپ کے پورے سیٹ اپ کو متاثر کرے گی۔ OpenHands صرف کوڈ تجویز نہیں کرتا، بلکہ اسے چلاتا بھی ہے، اور ایسا کرنے کے لیے اس کا controller container host Docker socket کو /var/run/docker.sock پر mount کرتا ہے تاکہ وہ ہر کام کے لیے sandbox containers بنا سکے۔ کوئی بھی چیز جو Docker socket سے بات کر سکتی ہے، وہ ایک نیا container شروع کر سکتی ہے جو آپ کے پورے host filesystem کو mount کر لے، جس کا مطلب ہے کہ socket تک رسائی درحقیقت مشین پر root رسائی کے برابر ہے۔ اس لیے OpenHands کے باکس کو ایک ایسے سرور کے طور پر سمجھیں جو غیر قابل اعتماد (untrusted) کوڈ چلاتا ہے، کیونکہ یہ بالکل یہی کرتا ہے۔ نیچے دیے گئے تمام hardening اقدامات اسی بنیاد پر ہیں۔

آپ کو کیا چاہیے

آپ کو Ubuntu 24.04 پر چلنے والے VPS کی ضرورت ہے جس میں جدید Docker Engine، کم از کم 4 GB RAM، اور کسی لینگویج ماڈل (OpenAI, Anthropic, یا Google) کی API key، یا Ollama on the same VPS کے ذریعے فراہم کردہ مقامی ماڈل درکار ہے۔ OpenHands درجنوں model backends کو سپورٹ کرتا ہے، اس لیے انتخاب آپ کا ہے۔ اگر آپ نے پہلے کبھی containers سیٹ اپ نہیں کیے، تو the basics of Docker on a VPS اس گائیڈ کے مفروضات کی وضاحت کرتا ہے۔

Docker کے ساتھ انسٹال کریں

OpenHands دو images کے طور پر دستیاب ہے: وہ application image جو آپ چلاتے ہیں، اور وہ agent-server image جسے یہ ہر کام کے sandbox کے لیے ڈاؤن لوڈ کرتا ہے۔ اسے اس طرح چلائیں، پروجیکٹ کی ڈاکومنٹس سے موجودہ 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 کے ورژن نمبر جان بوجھ کر مختلف رکھے گئے ہیں، اس لیے انہیں ایک جیسا بنانے کی کوشش نہ کریں: وہ agent-server tag استعمال کریں جو ڈاکومنٹس میں آپ کے app version کے ساتھ دیا گیا ہو۔ اور -p 127.0.0.1:3000:3000 کے بجائے -p 3000:3000 پر غور کریں۔ یہ ایک تبدیلی ہی ایسی Web UI کے درمیان فرق ہے جسے صرف آپ تک رسائی حاصل ہے اور وہ جسے پوری انٹرنیٹ تک رسائی حاصل ہو سکتی ہے، جس کے بارے میں اگلا سیکشن ہے۔

Web UI کو پبلک انٹرنیٹ سے دور رکھیں

OpenHands اپنا انٹرفیس port 3000 پر فراہم کرتا ہے۔ وہ انٹرفیس ایک ایجنٹ کو چلاتا ہے جو کوڈ چلا رہا ہوتا ہے، اس لیے اسے انٹرنیٹ پر پبلش کرنے کا مطلب ہے کہ جو کوئی بھی اسے ڈھانڈ لے گا، اسے کمانڈز چلانے والے پروسیس تک ریموٹ رسائی مل جائے گی۔ اسے loopback پر bind کریں، جیسا کہ اوپر دیے گئے run command میں کیا گیا ہے، اور اپنے لیپ ٹاپ سے SSH tunnel کے ذریعے اس تک رسائی حاصل کریں:

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

پھر اپنی مشین پر http://127.0.0.1:3000 کھولیں۔ ٹریفک آپ کے موجودہ SSH session کے ذریعے جائے گی، اور پبلک انٹرنیٹ پر کوئی نئی چیز listen نہیں کرے گی۔ زیادہ مستقل سیٹ اپ کے لیے، اسے VPN کے پیچھے رکھیں۔ دونوں صورتوں میں، باکس کے سامنے ایک default-deny firewall لگائیں تاکہ کوئی چیز حادثاتی طور پر ایکسپوز نہ ہو، اور یاد رکھیں کہ صرف IPv4 کو کور کرنے والا firewall IPv6 پر بھی وہی port کھلا چھوڑ دیتا ہے، جو کہ وہ IPv6 firewall gap ہے جس کا شکار بہت سے لوگ ہوتے ہیں۔

Model key اور کسی بھی repo credentials کو الگ رکھیں

OpenHands کو اپنے ماڈل کے لیے ایک API key کی ضرورت ہوتی ہے، اور اکثر آپ کے repositories کو clone اور push کرنے کے لیے ایک token کی بھی ضرورت ہوتی ہے۔ دونوں پیسے خرچ کر سکتے ہیں اور آپ کی طرح کام کر سکتے ہیں، اس لیے انہیں پاس ورڈ کی طرح سمجھیں۔ انہیں ایک ایسے environment file میں رکھیں جسے صرف صحیح اکاؤنٹ پڑھ سکے، انہیں کبھی بھی run command میں نہ لکھیں کیونکہ وہ آپ کی shell history اور process list میں آ جائیں گے، اور کبھی بھی git repository کے اندر کسی فائل میں نہ رکھیں۔

اسے ایک ایسے باکس پر چلائیں جسے آپ ضائع کر سکیں

چونکہ controller کو Docker socket رکھنا ضروری ہے، اس لیے آپ OpenHands کو اس کے host سے مکمل طور پر الگ (sandbox) نہیں کر سکتے۔ اس کا اصل حل placement کے ذریعے علیحدگی ہے: OpenHands کو ایک مخصوص VPS پر چلائیں جس میں آپ کی کوئی اور اہم چیز نہ ہو، نہ کہ اس سرور پر جہاں آپ کا ڈیٹا بیس یا آپ کی ویب سائٹ بھی چلتی ہو۔ شروع کرنے سے پہلے ایک snapshot لیں، اور ایک ہفتے تک ایجنٹ کے لکھے ہوئے کوڈ کو چلانے والے باکس پر بھروسہ کرنے کے بجائے اس snapshot سے دوبارہ بنائیں (rebuild)۔ ایک سستا، یکثیر (single-purpose) اور قابلِ ضائع VPS اس کے لیے بہترین گھر ہے۔

اس کے گرد باکس کو سخت (Harden) کریں

باقی سب معیاری سرور ہائیجین ہے، اور یہاں اس کی اہمیت معمول سے زیادہ ہے کیونکہ ورک لوڈ معمول سے زیادہ پرخطر ہے۔ root کے طور پر کام کرنے کے بجائے ایک غیر درجہ بندی شدہ (unprivileged) admin user بنائیں، جیسا کہ running services as an unprivileged user میں بتایا گیا ہے۔ SSH کو صرف key-only authentication پر منتقل کریں۔ پھر نیچے دی گئی چیک لسٹ چلائیں اور اسے کہیں محفوظ رکھیں جہاں آپ اسے دوبارہ دیکھ سکیں۔

ToolVPS hardening checklist

صرف چلانے کے بجائے کام کرنے کے طریقے کو سمجھنے کے لیے، building your own AI agent on a VPS دیکھیں؛ کم کوڈنگ والے پلیٹ فارم کے لیے، self-hosting Dify ایک آسان راستہ ہے۔

FAQ

کیا OpenHands کو سرور پر چلانا محفوظ ہے؟

احتیاط کے ساتھ یہ ہو سکتا ہے، لیکن یہ ایک عام ویب ایپ سے زیادہ پرخطر ہے کیونکہ یہ کوڈ لکھتا اور چلاتا ہے اور اس کا controller host Docker socket کو رکھتا ہے، جو کہ مشین پر درحقیقت root ہے۔ اسے ایک مخصوص، قابلِ ضائع VPS پر چلائیں جس میں کوئی اور قیمتی چیز نہ ہو، اس کے Web UI کو SSH tunnel یا VPN کے پیچھے loopback پر رکھیں، اس کی keys کو الگ رکھیں، اور باکس کو harden کریں۔ اسے اپنی اہم سروسز کے ساتھ نہ چلائیں۔

OpenHands کو Docker socket کی ضرورت کیوں ہے؟

OpenHands ہر کام کو ایک نئے sandbox container میں چلاتا ہے، اور یہ host Docker daemon سے ان containers کو بنانے کا کہتا ہے جس کے لیے وہ اپنے controller میں /var/run/docker.sock کو mount کرتا ہے۔ یہ controller container کو host پر Docker پر کنٹرول دیتا ہے، جو کہ طاقتور اور پرخطر ہے، اس لیے host کے ساتھ ایک ایسے سسٹم کے طور پر پیش آنا چاہیے جو غیر قابل اعتماد کوڈ چلاتا ہے۔

کیا OpenHands پیڈ API کے بجائے مقامی ماڈل استعمال کر سکتا ہے؟

جی ہاں۔ OpenHands Ollama یا vLLM کے ذریعے فراہم کردہ مقامی ماڈلز کو سپورٹ کرتا ہے، اس لیے آپ اسے مکمل طور پر self-hosted چلا سکتے ہیں جس میں فی ٹوکن کوئی لاگت نہیں ہوتی اور آپ کا ڈیٹا آپ کے سرور سے باہر نہیں جاتا۔ آپ کو ایک ایسی مشین کی ضرورت ہے جس میں ایک قابلِ اعتماد کوڈنگ ماڈل کے لیے کافی میموری ہو، جو کہ وہی سائزنگ کا سوال ہے جو Ollama گائیڈ میں بیان کیا گیا ہے۔

کیا مجھے OpenHands اپنے مین سرور پر چلانا چاہیے؟

نہیں۔ چونکہ یہ ایجنٹ کے لکھے ہوئے کوڈ کو چلاتا ہے اور Docker socket کو رکھتا ہے، اس لیے اسے ایک علیحدہ، یکثیر VPS پر رکھیں جسے آپ دوبارہ بنانے (rebuild) کے لیے تیار ہوں۔ اسے ڈیٹا بیس، ویب سائٹ، یا اپنی دیگر سروسز کے ساتھ چلانے کا مطلب ہے کہ ایجنٹ کی کوئی غلطی، یا اس میں کوئی بگ، ان چیزوں تک پہنچ سکتا ہے جنہیں چھونا اس کا مقصد نہیں تھا۔