VPS-এ OpenHands সেটআপ করার নিয়ম
Docker ব্যবহার করে VPS-এ OpenHands ইনস্টল করুন। হোস্ট Docker socket মাউন্ট করার কারণে নিরাপত্তা ঝুঁকি এড়াতে Web UI এবং secrets সুরক্ষিত করার সঠিক পদ্ধতি জানুন।
OpenHands কী এবং প্রথমেই একটি ঝুঁকি বুঝতে রাখা প্রয়োজন
OpenHands (পূর্বে OpenDevin নামে পরিচিত) হলো একটি autonomous software-engineering agent। আপনি একে সাধারণ ভাষায় একটি কাজ দিলে এটি কাজের পরিকল্পনা করে, কোড লেখে, command চালায়, output পড়ে এবং কাজ শেষ না হওয়া পর্যন্ত পুনরায় চেষ্টা করতে থাকে। আপনি এটি Docker ব্যবহার করে আপনার নিজস্ব সার্ভারে চালাতে পারেন এবং একটি language model এর সাথে যুক্ত করতে পারেন। একটি VPS-এ এটি এমন একটি coding agent হিসেবে কাজ করে যা আপনি অনুপস্থিত থাকাকালীনও কাজ করতে পারে।
একটি বিষয় আপনার পুরো setup এর জন্য গুরুত্বপূর্ণ। OpenHands শুধু কোড সাজেস্ট করে না, এটি কোড রানও করে। এর জন্য এর controller container টি host Docker socket কে /var/run/docker.sock এ mount করে যাতে প্রতিটি কাজের জন্য এটি sandbox container তৈরি করতে পারে। যা কিছু Docker socket এর সাথে যোগাযোগ করতে পারে, তা আপনার পুরো host filesystem mount করে একটি নতুন container শুরু করতে পারে; এর মানে হলো socket access কার্যত মেশিনে root access প্রদান করে। তাই OpenHands box টিকে এমন একটি সার্ভার হিসেবে বিবেচনা করুন যা untrusted code রান করে, কারণ এটি ঠিক সেটিই করে। নিচে দেওয়া প্রতিটি hardening choice এই কারণ থেকেই নেওয়া হয়েছে।
আপনার যা প্রয়োজন
আপনার একটি Ubuntu 24.04 running VPS প্রয়োজন যাতে সাম্প্রতিক Docker Engine, অন্তত 4 GB RAM এবং একটি language model এর API key (OpenAI, Anthropic, অথবা Google) অথবা একই VPS-এ Ollama দ্বারা সার্ভ করা একটি local model আছে। OpenHands ডজন ডজন model backend সাপোর্ট করে, তাই পছন্দ আপনার। আপনি যদি আগে কখনো container সেটআপ না করে থাকেন, তবে এই গাইডে ধরে নেওয়া বিষয়গুলো VPS-এ Docker এর basics এ বিস্তারিত আছে।
Docker দিয়ে ইনস্টল করুন
OpenHands দুটি image হিসেবে আসে: একটি হলো আপনি যে application image টি রান করবেন, এবং অন্যটি হলো agent-server image যা প্রতিটি কাজের sandbox চালানোর জন্য এটি pull করে। প্রজেক্টের docs থেকে বর্তমান tag গুলো ব্যবহার করে এভাবে রান করুন:
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 number ইচ্ছাকৃতভাবে আলাদা রাখা হয়েছে, তাই এগুলো মেলানোর চেষ্টা করবেন না: docs-এ আপনার app version এর সাথে যে agent-server tag দেওয়া আছে সেটি ব্যবহার করুন। এবং -p 3000:3000 এর পরিবর্তে -p 127.0.0.1:3000:3000 খেয়াল করুন। এই একটি পরিবর্তনই একটি Web UI যা শুধুমাত্র আপনি অ্যাক্সেস করতে পারবেন এবং একটি Web UI যা পুরো ইন্টারনেট থেকে অ্যাক্সেস করা সম্ভব—এই দুটির মধ্যে পার্থক্য তৈরি করে, যা পরবর্তী সেকশনে আলোচনা করা হয়েছে।
Web UI কে পাবলিক ইন্টারনেট থেকে দূরে রাখুন
OpenHands তার interface টি port 3000 এ সার্ভ করে। এই interface টি এমন একটি agent কে পরিচালনা করে যা কোড রান করে, তাই এটি ইন্টারনেটে প্রকাশ করা মানে হলো যে কেউ এটি খুঁজে পেলে একটি process এ command চালানোর রিমোট পাথ পেয়ে যাবে। উপরের run command এর মতো এটিকে loopback এ bind করুন এবং SSH tunnel এর মাধ্যমে আপনার ল্যাপটপ থেকে এটি অ্যাক্সেস করুন:
ssh -L 3000:127.0.0.1:3000 you@your-vpsতারপর আপনার নিজের মেশিনে http://127.0.0.1:3000 ওপেন করুন। ট্রাফিক আপনার বিদ্যমান SSH session এর মাধ্যমে যাবে এবং পাবলিক ইন্টারনেটে নতুন কিছু listen করবে না। আরও স্থায়ী setup এর জন্য, এর পরিবর্তে একটি VPN ব্যবহার করুন। যেভাবেই হোক, box টি এর সামনে একটি default-deny firewall রাখুন যাতে ভুলবশত কিছু প্রকাশ না হয়ে যায়, এবং মনে রাখবেন যে শুধুমাত্র IPv4 কভার করা firewall হলে IPv6 এ একই port খোলা থেকে যায়, যা হলো সেই IPv6 firewall gap যা অনেক মানুষকে বিপাকে ফেলে।
Model key এবং যেকোনো repo credentials আলাদা রাখুন
OpenHands এর মডেলের জন্য একটি API key প্রয়োজন হয়, এবং প্রায়ই আপনার repository clone বা push করার জন্য একটি token প্রয়োজন হয়। উভয়ই টাকা খরচ করতে পারে এবং আপনার হয়ে কাজ করতে পারে, তাই এদের পাসওয়ার্ডের মতো বিবেচনা করুন। এগুলো এমন একটি environment file এ রাখুন যা শুধুমাত্র সঠিক account পড়তে পারে; এগুলো কখনোই run command এ রাখবেন না কারণ সেগুলো আপনার shell history এবং process list এ জমা হয়, এবং কখনোই কোনো git repository এর ভেতরের ফাইলে রাখবেন না।
এমন একটি box এ চালান যা আপনি ফেলে দিতে পারবেন
যেহেতু controller কে Docker socket ধারণ করতে হয়, তাই আপনি OpenHands কে এর host থেকে পুরোপুরি sandbox করতে পারবেন না। এর প্রকৃত সমাধান হলো placement এর মাধ্যমে isolation: OpenHands একটি ডেডিকেটেড VPS এ চালান যেখানে আপনার প্রয়োজনীয় অন্য কোনো গুরুত্বপূর্ণ ডেটা নেই; এমন সার্ভারে নয় যেখানে আপনার database বা website চলে। শুরু করার আগে একটি snapshot নিন, এবং এক সপ্তাহ ধরে agent-authored code রান করা কোনো box এর ওপর ভরসা না করে সেই snapshot থেকে পুনরায় rebuild করুন। একটি সস্তা, disposable এবং single-purpose VPS এর জন্য এটি সঠিক জায়গা।
এর চারপাশের box টি harden করুন
বাকি অংশ হলো standard server hygiene, এবং এখানে এটি সাধারণের চেয়ে বেশি গুরুত্বপূর্ণ কারণ এখানকার workload সাধারণের চেয়ে বেশি ঝুঁকিপূর্ণ। root হিসেবে কাজ করার পরিবর্তে একটি unprivileged admin user তৈরি করুন, যা unprivileged user হিসেবে services চালানো এর নিয়ম অনুসরণ করে। SSH কে key-only authentication এ নিয়ে যান। তারপর নিচের checklist টি রান করুন এবং এটি এমন কোথাও রাখুন যেখানে আপনি এটি আবার দেখতে পাবেন।
শুধুমাত্র রান করার বদলে এর প্রতিটি অংশ বুঝতে, VPS এ আপনার নিজস্ব AI agent তৈরি করা দেখুন; কম কোডিং প্ল্যাটফর্মের জন্য, self-hosting Dify একটি সহজ পথ।
FAQ
সার্ভারে OpenHands চালানো কি নিরাপদ?
সতর্কতার সাথে এটি নিরাপদ হতে পারে, কিন্তু এটি সাধারণ web app এর চেয়ে বেশি ঝুঁকিপূর্ণ কারণ এটি কোড লেখে এবং রান করে এবং এর controller host Docker socket ধারণ করে, যা কার্যত মেশিনে root হিসেবে কাজ করে। এটি একটি ডেডিকেটেড, disposable VPS এ চালান যেখানে অন্য কোনো মূল্যবান কিছু নেই, এর Web UI কে SSH tunnel বা VPN এর মাধ্যমে loopback এ রাখুন, এর keys গুলো isolate করুন এবং box টি harden করুন। আপনার গুরুত্বপূর্ণ services গুলোর সাথে এটি চালাবেন না।
OpenHands এর কেন Docker socket প্রয়োজন?
OpenHands প্রতিটি কাজ একটি নতুন sandbox container এ চালায়, এবং এটি host Docker daemon কে অনুরোধ করে যে /var/run/docker.sock কে এর controller এ mount করার মাধ্যমে সেই container গুলো তৈরি করতে। এটি controller container কে host এর Docker এর ওপর নিয়ন্ত্রণ দেয়, যা অত্যন্ত শক্তিশালী এবং ঝুঁকিপূর্ণ; তাই host টিকে এমন একটি মেশিন হিসেবে বিবেচনা করতে হবে যা untrusted code রান করে।
OpenHands কি পেইড API এর বদলে local model ব্যবহার করতে পারে?
হ্যাঁ। OpenHands, Ollama বা vLLM দ্বারা সার্ভ করা local models সাপোর্ট করে, তাই আপনি কোনো per-token খরচ ছাড়াই এবং সার্ভার থেকে ডেটা বাইরে না পাঠিয়ে সম্পূর্ণ self-hosted ভাবে এটি চালাতে পারেন। আপনার একটি শক্তিশালী coding model চালানোর জন্য পর্যাপ্ত মেমরি সম্পন্ন মেশিন প্রয়োজন, যা Ollama গাইড এ আলোচনা করা sizing প্রশ্নটির মতোই।
আমার মেইন সার্ভারে কি OpenHands চালানো উচিত?
না। যেহেতু এটি agent-authored code রান করে এবং Docker socket ধারণ করে, তাই এটিকে একটি আলাদা, single-purpose VPS এ রাখুন যা আপনি পুনরায় rebuild করতে পারবেন। এটিকে একটি database, website বা আপনার অন্যান্য services এর সাথে রাখা মানে হলো agent এর কোনো ভুল বা এর কোনো bug আপনার এমন সব জিনিসকে স্পর্শ করতে পারে যা এটি করার কথা ছিল না।