ব্যক্তিগত Telegram বট দিয়ে VPS এজেন্টে সহজে পৌঁছানো যায়, কিন্তু যুক্ত গেটওয়ে সঠিক ব্যক্তিকে উত্তর দেওয়ার প্রমাণ নয়। আমরা নতুন Hermes Agent ডেটা ফোল্ডার দিয়ে শুরু করি, এক সংখ্যার Telegram ID অনুমোদন করে আসল উত্তর ও নিশ্চিত থামানোর ব্যবস্থা দেখি। অনুসরণ করি NousResearch-এর v0.22.2 Docker নির্দেশ এবং Telegram নির্দেশ, ১৯ অক্টোবর ২০২৬-এ যাচাই। BIG CHANGE এর জন্য VPS চালায়নি, ইমেজ টানেনি, বট বানায়নি বা মডেল ডাকেনি।
বড় পরিবর্তন
- কী বদলেছে: ডাইজেস্টে স্থির, সংস্করণ-যাচাই করা Docker ইমেজ ও আলাদা
/opt/dataমাউন্ট এই গেটওয়ের সফটওয়্যার ও অবস্থা শনাক্ত করে। - কেন গুরুত্বপূর্ণ: সংখ্যার Telegram অনুমতির তালিকা ও সত্যিকারের ব্যক্তিগত উত্তর সঠিক অ্যাকাউন্টের ব্যবহার নিশ্চিত করে।
- যা খেয়াল রাখতে হবে: জোড় বাঁধা বা সামগ্রিক অনুমতি প্রবেশ বাড়ায়; নিরীহ অনুরোধ এজেন্টের টুল সীমিত করে না। অনুমতি, লগ, পুনরারম্ভ ও থামা যাচাই করুন।
এক Linux VPS SSH-তে পরিচালনার অধিকার, চালু Docker Engine ও হোস্ট উদ্ধারের প্রবেশ, BotFather দিয়ে বট বানানোর Telegram অ্যাকাউন্ট এবং যোগ্য Hermes মডেল-প্রদানকারী অ্যাকাউন্ট চাই। VPS কাঠামো ও সম্পদ অফিসিয়াল amd64/arm64 ইমেজের সঙ্গে মেলান; উইজার্ডের আগে প্রবেশ ও বিলের শর্ত দেখুন। Docker আগে থেকেই চলে ধরা হয়েছে; ইনস্টল ও ফায়ারওয়াল OS/প্রদানকারীর ওপর। হোস্ট থেকে Telegram ও মডেলে বহির্গামী সংযোগ চাই। ব্যক্তিগত ডেটা ফোল্ডার ও সীমিত পাঠক রাখুন: /opt/data পরিচয়পত্র, সেশন ও লগ রাখবে। Docker নির্দেশিকা মাউন্টটিকে স্থায়ী নির্ভরযোগ্য মূল অবস্থা বলে।
১. সেটআপের আগে ইমেজ স্থির করুন
SSH-তে যুক্ত হয়ে একই শেলে থাকুন। stable ট্যাগ বদলাতে পারে। ইমেজ টেনে রিপোজিটরির ডাইজেস্ট লিখুন এবং ইমেজ নিজে যে সংস্করণ বলে তা 0.22.2 কি না দেখুন। ভিন্ন সংস্করণ, ডাইজেস্ট নেই, পুরোনো ডেটা বা hermes নামের কনটেইনার থাকলে থামুন। আসল সংস্করণের নির্দেশ হালনাগাদ বা মিলযুক্ত নথিভুক্ত ইমেজ পেয়ে এগোন। ডাইজেস্ট ইমেজ স্থির করে, নিজে সংস্করণ প্রমাণ করে না।
set -eu
docker info >/dev/null
docker container inspect hermes >/dev/null 2>&1 && { echo 'Container hermes already exists; stop here.'; exit 1; }
HERMES_DATA="$HOME/.hermes"
if [ -e "$HERMES_DATA" ]; then echo 'Hermes data path already exists; stop here.'; exit 1; fi
mkdir -m 700 "$HERMES_DATA"
docker pull nousresearch/hermes-agent:stable
docker image inspect nousresearch/hermes-agent:stable --format '{{json .RepoDigests}}'
IMAGE_REF="$(docker image inspect nousresearch/hermes-agent:stable --format '{{index .RepoDigests 0}}')"
if ! printf '%s\n' "$IMAGE_REF" | grep -Eq '^nousresearch/hermes-agent@sha256:[0-9a-f]{64}$'; then
echo 'No valid repository digest; stop here.'; exit 1
fi
printf 'Pinned image: %s\n' "$IMAGE_REF"
VERSION_OUTPUT="$(docker run --rm "$IMAGE_REF" --version)"
printf 'Image version: %s\n' "$VERSION_OUTPUT"
if ! printf '%s\n' "$VERSION_OUTPUT" | grep -Eq '(^|[^0-9])v?0[.]22[.]2([^0-9]|$)'; then
echo 'Image version is not 0.22.2; stop here.'; exit 1
fiset -eu Docker না চললে, টানা/পরীক্ষা বা সংস্করণ কমান্ড ব্যর্থ হলে শেল ধাপ থামায়। স্পষ্ট পরীক্ষায় ফাঁকা ডাইজেস্ট বা ভিন্ন সংস্করণেও থামে। এরপর সেটআপ নয়। রেকর্ড করা nousresearch/hermes-agent@sha256:… মান রাখুন। নিচে সেটআপ ও গেটওয়ে IMAGE_REF ব্যবহার করে, ফলে ট্যাগ বদলে গোপনে কনটেইনার বদলায় না। পাঠক সত্যিকারের VPS-এ পরীক্ষা করবেন; নিবন্ধে যাচাই করা ইমেজ ডাইজেস্ট নেই। হোস্টের নিজস্ব ফাইল ব্যবস্থায় নতুন পৃথক ফোল্ডার নিন; একই ডেটায় দুই গেটওয়ে নয়।
২. প্রদানকারী ও এক ব্যক্তিগত প্রেরক সেট করুন
মাউন্ট করা ফোল্ডার দিয়ে Docker সেটআপ উইজার্ড চালান। অ্যাকাউন্টের অনুমোদিত মডেলপথ নিন, পরিচয় যাচাই করে প্রদানকারী/মডেল দেখুন। প্রবেশ ও ফি অ্যাকাউন্টভিত্তিক। সংরক্ষিত সেটিং সফল মডেল অনুরোধ প্রমাণ করে না।
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setupTelegram-এ @BotFather-কে /newbot দিয়ে বট চান, টোকেন গোপন রাখুন। সংগ্রহ করুন প্রেরকের সংখ্যার Telegram ব্যবহারকারী ID, যেমন Telegram নির্দেশিকা-র সংযুক্ত ID পরীক্ষার পদ্ধতিতে। নাম ID নয়। উইজার্ড বা hermes gateway setup টোকেন ও তালিকা লিখতে পারে। হাতে TELEGRAM_BOT_TOKEN=<private token> এবং TELEGRAM_ALLOWED_USERS=<your numeric ID> দিন $HERMES_DATA/.env-এ, যা কনটেইনারে /opt/data/.env । টোকেন কমান্ড, ইতিহাস, যৌথ নোট বা নিবন্ধে নয়।
এখানে $HERMES_DATA/config.yaml (/opt/data/config.yaml কনটেইনারে) অননুমোদিত ব্যক্তিগত বার্তার সামগ্রিক আচরণ সেট করুন:
unauthorized_dm_behavior: ignoreসেটআপ কনটেইনার বেরোনোর পর ইমেজ $HERMES_DATA-এর মালিক চলমান UID 10000 করে থাকতে পারে। বুট .env মোড 600 এবং আগের config.yaml মোড 640-তে সীমিত করে; সেই বুটে প্রথম তৈরি সেটিংও একই কঠোরতা চাইতে পারে। সাধারণ SSH লগইন ফাইল নাও খুলতে পারে। কী না বসলে অনুমোদিত হোস্ট প্রশাসক নির্দিষ্ট দুই ফাইল sudo দিয়ে দেখে সম্পাদনা করে মালিক ও ব্যক্তিগত মোড ফেরাবেন। UID 10000 সম্পাদক লগইন-মালিকের $HOME পার নাও হতে পারে, তাই হোস্ট প্রশাসক ব্যবহৃত। হোস্টে sudo এবং vi থাকলে গোপনহীন মালিক/মোড পড়ে চালান। ভিন্ন UID বা ফাইল নেই হলে থেমে আগে প্রবেশ সমাধান করুন।
sudo stat -c '%u:%g %a %n' "$HERMES_DATA" "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
# Expected: directory owner 10000 and mode 700; .env owner 10000 and mode 600.
# config.yaml should have owner 10000; its first-boot mode can vary.
sudo vi "$HERMES_DATA/.env"
sudo vi "$HERMES_DATA/config.yaml"
sudo chown 10000:10000 "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
sudo chmod 700 "$HERMES_DATA"
sudo chmod 600 "$HERMES_DATA/.env"
sudo chmod 640 "$HERMES_DATA/config.yaml"
sudo stat -c '%u:%g %a %n' "$HERMES_DATA" "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"শেষ stat ফল দুই ফাইলে UID/GID 10000, ফোল্ডার মোড 700, .env মোড 600 এবং config.yaml মোড 640 দেখাবে। এটি মেটাডেটা, গোপন পরিচয় নয়। chown শুধু ওই দুই ফাইল ও সম্পাদকের বিকল্প ফাইল ধরে। sudo বা vi না থাকলে অনুমোদিত হোস্ট পদ্ধতিতে একই পাঠ যাচাই করুন। সবাইকে পড়ার সুযোগ দেবেন না বা কনটেইনার ব্যবহারকারী রিম্যাপ করবেন না।
সম্পাদনায় প্রদানকারীর সেটিং রাখুন। Telegram-নির্দিষ্ট unauthorized_dm_behavior ওভাররাইড pair না করে, সামগ্রিক GATEWAY_ALLOWED_USERS বা GATEWAY_ALLOW_ALL_USERS প্রবেশ না বাড়ায়। config.yaml-এ দেখুন gateway.allow_all_users বা ওপরের allow_all_users কোনোটিই true নয়; সামগ্রিক বা Telegram তালিকায় বাড়তি প্রেরক নেই। * নয়, গ্রুপ তালিকা নয়, জোড়ার কোড অনুমোদন নয়। নতুন ফোল্ডার পুরোনো অনুমতি এড়ায়; ডেটা থাকলে থেমে দেখুন, মুছবেন না। BotFather গ্রুপ গোপনীয়তা চালু রাখুন; বট গ্রুপে বা প্রশাসক করবেন না। গেটওয়ে প্রবেশ নির্দেশিকা তালিকা ও স্থায়ী জোড়ার অধিকার আলাদা পথ বলে। নিরাপত্তা নির্দেশিকা বলে ignore অননুমোদিত ব্যক্তিগত বার্তা নীরবে বাদ দেয়।
তালিকা কে আলাপ শুরু করবে ঠিক করে, অনুমোদিত এজেন্টের কাজ নয়। Hermes Telegram সেশনে ডিফল্ট টার্মিনাল টুল আছে। অনুমতির আগে টুল, Docker মাউন্ট, প্রদানকারী ও হোস্ট নীতি দেখুন। নিরীহ টেস্ট অনুরোধ শুধু অনুরোধ।
৩. শুরু করে প্রথম উত্তর দেখুন
রেকর্ড ডাইজেস্ট দিয়ে একটি নামযুক্ত কনটেইনার চালান। প্রকাশিত Docker কমান্ডে API-র জন্য ঐচ্ছিক -p 8642:8642 আছে; বাদ দিন, ব্যক্তিগত Telegram-এ প্রকাশ্য API বা ড্যাশবোর্ড পোর্ট লাগে না। ইমেজ গেটওয়ে তদারক করে; Docker unless-stopped নীতি Docker শুরুতে কনটেইনার পুনরারম্ভ নিয়ন্ত্রণ করে। ফোল্ডার সেটিং ও সেশন রাখে।
docker run -d --name hermes --restart unless-stopped \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" gateway run
if ! {
docker inspect hermes --format '{{.Image}} {{.State.Status}}' &&
[ "$(docker inspect hermes --format '{{.State.Status}}')" = running ] &&
docker logs --tail 50 hermes &&
docker exec -u hermes hermes hermes pairing list
}; then
echo 'State, logs or pairing check failed; stopping before any message.'
docker stop hermes || true
docker inspect hermes --format '{{.State.Status}}' || true
exit 1
fiকনটেইনার running কি না, লগে Telegram সংযোগ ও প্রদানকারীর ত্রুটি দেখুন এবং বার্তার আগে জোড়ার তালিকা পড়ুন। প্রথম পড়া ব্যর্থ হলে কোড গেটওয়ে থামিয়ে অবস্থা ছাপে; অজানা CLI/অধিকার অনুমতি নয়। আগে exited নিশ্চিত করে তদন্ত; অনিশ্চিত অবস্থায় বার্তা বা পুনরারম্ভ নয়। অন্য অনুমোদিত প্রেরক থাকলে থামিয়ে বন্ধ অবস্থা দেখুন। docker exec বন্ধ কনটেইনারে চলে না; সাধারণ ইমেজ প্রবেশ পুরোনো গেটওয়ে ফেরাতে পারে। নতুন ডিফল্ট UID-তে নিচের অফলাইন পরীক্ষা শুধু স্থির Hermes CLI-কে UID 10000, নেটওয়ার্ক ও গেটওয়ে শুরু ছাড়া চালায়। নথিভুক্ত কমান্ড/প্রবেশের অভিযোজন, BIG CHANGE পরীক্ষা নয়। চলমান UID ও ডেটা মালিক 10000 নিশ্চিত হলেই চালান। মালিক, UID, CLI বা অধিকার অস্পষ্ট হলে বন্ধ রেখে পুনরারম্ভের আগে সমাধান করুন।
if [ "$(docker exec -u hermes hermes id -u)" != 10000 ] || [ "$(stat -c %u "$HERMES_DATA")" != 10000 ]; then
echo 'Runtime UID or data owner differs; stop for a host-specific repair.'; docker stop hermes; exit 1
fi
docker stop hermes
if [ "$(docker inspect hermes --format '{{.State.Status}}')" != exited ]; then
echo 'Container is not exited; do not mount state in another container.'; exit 1
fi
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing list
# For a listed unwanted Telegram user, read the exact numeric ID first:
printf 'Unwanted numeric Telegram user ID: '; IFS= read -r UNWANTED_ID
if ! printf '%s\n' "$UNWANTED_ID" | grep -Eq '^[0-9]+$'; then echo 'Invalid ID; leave gateway stopped.'; exit 1; fi
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing revoke telegram "$UNWANTED_ID"
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing listশেষ তালিকায় অনাকাঙ্ক্ষিত ID নেই দেখুন। গোপনে $HERMES_DATA/.env এবং config.yaml দেখুন অন্য প্ল্যাটফর্ম/সামগ্রিক তালিকা, * বা সবাইকে অনুমতি আছে কি না। নথিভুক্ত পথে অপ্রয়োজনীয় অধিকার সরান। সব পথ যাচাই পর্যন্ত বন্ধ রাখুন। এক এন্ট্রি সরালে স্বাধীন জোড়া বা সামগ্রিক অধিকার যায় না। পাঠের পরে docker start hermes ইচ্ছাকৃতভাবে আসল কনটেইনার ফেরায়; বার্তার আগে লগ/তালিকা আবার দেখুন।
অনুমতিপ্রাপ্ত অ্যাকাউন্টে বটের ব্যক্তিগত চ্যাট খুলে “সংক্ষিপ্ত অভিবাদনে উত্তর দিন” মতো নিরীহ অনুরোধ পাঠান। আসল উত্তর ও সংশ্লিষ্ট লগ/সেশন দেখুন। পাঠানো, টাইপিং, অবস্থা বা সেটআপ শেষ মানেই উত্তর নয়। Telegram-এর /whoami সক্রিয় বার্তার পরিসর দেখায়, হোস্ট অধিকার নয়। শুধু অসংবেদনশীল প্রমাণ রাখুন।
উত্তর নেই হলে আগে অবস্থা ও docker logs --tail 50 hermes পড়ুন। টোকেন, সঠিক সংখ্যার TELEGRAM_ALLOWED_USERS মান, মডেল পরিচয়/ব্যবহারের যোগ্যতা, বহির্গামী সংযোগ দেখুন। ফল অনিশ্চিত হলে পুনরায় পাঠানোর আগে চ্যাট/লগ পড়ুন। নথিভুক্ত কোল্ড-বুট অপেক্ষমাণ আপডেট বাদ দিতে পারে, সদৃশ দমন স্মৃতিতে সীমিত। ঠিক একবার ডেলিভারি নিশ্চিত নয়।
৪. পুনরারম্ভ, থামা ও উদ্ধার দেখুন
প্রথম কাজ শেষ হলে একই কনটেইনার পুনরারম্ভ করে নতুন লগ ও রাখা /opt/data অবস্থা দেখুন, তারপর নতুন নিরীহ ব্যক্তিগত অনুরোধ ও উত্তর জাচাই করুন। থামিয়ে Docker অবস্থা পড়ুন। exited থামার চিহ্ন, চুপ চ্যাট যথেষ্ট নয়। docker start hermes পরে ইচ্ছাকৃত শুরুর উপায়।
docker restart hermes
docker logs --tail 50 hermes
docker inspect hermes --format '{{.State.Status}}'
# After the restarted gateway is ready, send a new private test message.
docker stop hermes
docker inspect hermes --format '{{.State.Status}}'
# Expected after stop: exited
# When intentionally resuming later: docker start hermesব্যর্থ পুনরারম্ভে Docker/লগ, তারপর $HERMES_DATA/logs/gateways/default/current এবং $HERMES_DATA/logs/container-boot.log, মাউন্ট, মালিক ও স্থির সংস্করণ দেখুন। v0.22.2 প্রকাশের নোট বুট সক্রিয়তার সংশোধন বলে, আপনার হোস্টের ঘটনা নয়। মেরামতে ডেটা মুছবেন না। টোকেন ফাঁস হলে থামুন, BotFather-এ বাতিল, গোপনে মাউন্ট করা .env-এ বদলান, শুরুর আগে প্রবেশ দেখুন। অপ্রয়োজনীয় জোড়াও বাতিল করে আসল তালিকা দেখুন।
VPS ও মডেলের আলাদা খরচ হতে পারে। আসল প্ল্যান, সীমা ও ফি দেখুন; সময়, বিনা খরচের কোটা বা প্রাপ্যতা প্রতিশ্রুতি নয়। Telegram/প্রদানকারী বার্তা প্রক্রিয়া করে, হোস্ট গোপন তথ্য ও অবস্থা রাখে। এটি এক হোস্ট, বটের প্রথম উত্তর পরীক্ষা। আলাদা BIG CHANGE নির্দেশিকা বলে Hermes ব্যাকআপ ও উদ্ধার এবং নিয়মিত Hermes কাজ.
উৎস ও আরও পড়ুন
এই Docker সেটআপ, Telegram সেটআপ, গেটওয়ে প্রবেশ, নিরাপত্তা এবং v0.22.2 প্রকাশ NousResearch-এর প্রাথমিক উৎস। দ্রুত শুরু প্রদানকারীর সেটআপ বলে। এগুলি পদ্ধতির নথি, BIG CHANGE-এর VPS/বট চালনার রেকর্ড নয়।



