Skip to content
VDS · অ্যাপ ও বট

সার্ভারে 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 ফাইল বদলান — কেউ খেয়াল করবে না বলে ভরসা করবেন না।