সার্ভারে Telegram বট: চালু ও অটোস্টার্ট
কীভাবে VPS-এ Telegram বট হোস্ট করবেন: নিজস্ব ইউজারের অধীনে আইসোলেশন, systemd সার্ভিস, টোকেন সংরক্ষণ, লগ, এবং নেটওয়ার্ক বিভ্রাট সামলানো।
আপডেট: ২৩ আগস্ট, ২০২৬
বটের জন্য একটি সবসময় চলমান প্রসেস দরকার — এখানেই ফ্রি হোস্টিং শেষ হয় এবং VDS শুরু হয়। বটের খুব একটা রিসোর্স লাগে না: এমনকি VDS-1 (১ কোর, ২ জিবি) হাজার হাজার ইউজারের বটও সামলাতে পারে।
প্লেসমেন্ট
আলাদা ইউজার ও ডিরেক্টরি — যাতে বট root হিসেবে না চলে:
useradd -r -m -d /srv/bot -s /usr/sbin/nologin botuser
cd /srv/bot && sudo -u botuser git clone https://github.com/you/bot.git .
sudo -u botuser python3 -m venv venv
sudo -u botuser venv/bin/pip install -r requirements.txt
Node.js-এর জন্য: venv-এর বদলে npm ci --omit=dev।
টোকেন কোডে নয়, একটি এনভায়রনমেন্ট ফাইলে রাখুন:
install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env
টোকেনসহ ফাইলটি যেন রিপোজিটরিতে না ঢোকে: প্রথম কমিটের আগেই .gitignore-এ যোগ করুন।
সার্ভিস
/etc/systemd/system/tgbot.service:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=botuser
WorkingDirectory=/srv/bot
EnvironmentFile=/srv/bot/.env
ExecStart=/srv/bot/venv/bin/python -u bot.py
Restart=always
RestartSec=10
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tgbot
journalctl -u tgbot -f
Python-এ -u ফ্ল্যাগ আউটপুট বাফারিং বন্ধ করে — এটি ছাড়া জার্নালে লগ কয়েক মিনিট দেরিতে দেখাবে, বা একেবারেই দেখাবে না।
লং পোলিং নাকি ওয়েবহুক
লং পোলিং সহজ: বট নিজেই Telegram-কে পোল করে, আর আপনাকে কিছুই এক্সপোজ করতে হয় না। বেশিরভাগ কাজের জন্যই এটাই যথেষ্ট।
ওয়েবহুক দ্রুততর এবং ট্রাফিকে সাশ্রয়ী, কিন্তু এর জন্য ডোমেইন ও সার্টিফিকেট লাগে:
location /bot/token {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
আপনার Let's Encrypt এবং একটি রিভার্স প্রক্সি দরকার হবে। Telegram স্ব-স্বাক্ষরিত সার্টিফিকেট অনিচ্ছাসত্ত্বে গ্রহণ করে — সাধারণ সার্টিফিকেট ব্যবহার করুন।
একসাথে বটের দুটি কপি কখনোই চলতে দেওয়া যাবে না: Telegram আপডেট শুধু একজন প্রাপককেই পৌঁছে দেয়, আর বটগুলো এলোমেলোভাবে সাড়া দিতে শুরু করবে। এডিট করার পর দ্বিতীয়বার চালু না করে restart করুন।
ডেটা
সেটিংস ও পরিসংখ্যানের জন্য SQLite-ই যথেষ্ট — বটের পাশে একটি ফাইল। আলাদা ডেটাবেস সার্ভার দরকার হয় শুধু তখনই, যখন বটের একটি ওয়েব প্যানেল বা একাধিক প্রসেস থাকে।
সাধারণ ভুল
| উপসর্গ | কারণ |
|---|---|
Conflict: terminated by other getUpdates | বটের দুটি কপি চলছে |
| রাত কাটানোর পর বট চুপ হয়ে যায় | Restart=always কনফিগার করা নেই, আর নেটওয়ার্ক ড্রপে প্রসেসটি ক্র্যাশ করেছে |
Unauthorized | টোকেন বাতিল হয়েছে বা বাড়তি স্পেসসহ কপি করা হয়েছে |
| লগ নেই | আউটপুট বাফারিং, বা stdout-এর বদলে ফাইলে লেখা হচ্ছে |
| ম্যানুয়ালি চলে, সার্ভিস হিসেবে ক্র্যাশ করে | systemd-তে এনভায়রনমেন্ট ভেরিয়েবল নেই |
স্ক্রিনশটে, পাবলিক রিপোজিটরিতে বা কারও চ্যাটে যে টোকেন দেখা গেছে, সেটি ফাঁস হওয়া হিসেবে ধরা হয়। BotFather-এর মাধ্যমে এটি বাতিল করুন এবং
.envফাইল বদলান — কেউ খেয়াল করবে না বলে ভরসা করবেন না।