EQVPS

একটি VPS-এ একটি Telegram bot 24/7 চালান: aiogram, systemd, polling বনাম webhook

Jul 4, 2026 · 5 min read · EQVPS Team

আপনি aiogram দিয়ে একটি Telegram bot লিখলেন, local-ভাবে পরীক্ষা করলেন, ও এটি কাজ করে। এখন এটিকে এমন কোথাও থাকতে হবে যা আপনি ল্যাপটপ বন্ধ করলে ঘুমায় না। একটি ছোট VPS স্বাভাবিক ঘর — কিন্তু একটি SSH সেশনে python bot.py ও এমন একটি bot যা আসলে ক্র্যাশ, reboot ও আপনার সংযোগ পড়ে যাওয়া টেকায়, তার মধ্যে একটি ফাঁক আছে।

এটি production সংস্করণ: একটি virtualenv, আপনার কোডের বাইরে রাখা token, একটি systemd সার্ভিস যা bot-কে নিজে পুনরুজ্জীবিত করে, ও যে প্রশ্ন সবাই একসময় জিজ্ঞেস করে তার একটি স্পষ্ট উত্তর — polling নাকি webhook?

কেবল আপনার ল্যাপটপে এটি চালাবেন না কেন

একটি bot-এর Telegram-এ একটি স্থির outbound সংযোগ দরকার। আপনার ল্যাপটপ ঘুমায়, আপডেটের জন্য reboot করে, ও নেটওয়ার্কের মধ্যে লাফায় — এদের প্রতিটি bot-কে ফেলে দেয়, আর ব্যবহারকারীরা একটি নীরবতার দেয়ালে ঠেকে। একটি VPS সেই সংযোগ দিনভর ধরে রাখে। এটি আপনার মেশিন থেকে সরানোর পুরো কারণ, আর এটি একই কারণে একটি Discord bot-ও একটি সার্ভারে থাকে

আপনি একটি ন্যূনতম bot সহ কেবল সবচেয়ে দ্রুত "এটি online করো" পথ চাইলে, host-a-Telegram-bot walkthrough তা কভার করে। এই লেখা এক স্তর গভীরে যায়: aiogram, নিরাপদ token-হ্যান্ডলিং, ও কখন scale করবেন জানা।

bot, একটি virtualenv-এ

SSH করে ঢুকুন ও bot-কে নিজের venv-এ isolated রাখুন — package system-wide ইনস্টল করবেন না, এটি পরে আপগ্রেড ও পরিষ্কার করা একটি জঞ্জাল বানায়:

sudo apt update && sudo apt install -y python3-venv
mkdir ~/tgbot && cd ~/tgbot
python3 -m venv venv && source venv/bin/activate
pip install -U aiogram

একটি ন্যূনতম aiogram 3 bot যা একটি hard-code-করা স্ট্রিং নয়, environment থেকে token পড়ে:

# bot.py
import asyncio, logging, os
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import CommandStart

logging.basicConfig(level=logging.INFO)
dp = Dispatcher()

@dp.message(CommandStart())
async def start(m: Message):
    await m.answer("Alive and running on a VPS.")

async def main():
    bot = Bot(os.environ["BOT_TOKEN"])
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

token আপনার কোডের বাইরে রাখুন

BotFather token কখনও bot.py-তে paste করবেন না — একটি public repo-তে একটি push আর এটি ফাঁস। বরং এটি একটি root-readable env ফাইলে রাখুন:

sudo tee /etc/tgbot.env >/dev/null <<'EOF'
BOT_TOKEN=123456:your-token-from-botfather
EOF
sudo chmod 600 /etc/tgbot.env

একটি ফাঁস-হওয়া token BotFather-এ একটি /revoke দূরে ঠিক হওয়া থেকে — কিন্তু একটি shared মেশিনে ফাঁস-হওয়া অন্য যেকোনো কিছু খারাপ। bot-এর জন্য একটি dedicated VPS সৎভাবে আপনার দৈনন্দিন ল্যাপটপের চেয়ে token-এর নিরাপদ ঘর: এটি ফাঁস হলে, আপনি একটি token ঘোরান, আপনার পুরো সেটআপ নয়।

যে অংশ এটিকে জীবিত রাখে: systemd

এটাই একটি bot যা চলে ও একটি bot যা চালু থাকে-র মধ্যে পার্থক্য করে। সার্ভিসটি তৈরি করুন:

# /etc/systemd/system/tgbot.service
[Unit]
Description=Telegram bot (aiogram)
After=network-online.target
Wants=network-online.target

[Service]
User=botuser
WorkingDirectory=/home/botuser/tgbot
EnvironmentFile=/etc/tgbot.env
ExecStart=/home/botuser/tgbot/venv/bin/python bot.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

এটিকে root নয়, একটি non-root ব্যবহারকারী (উপরে botuser) হিসেবে চালান — bot কখনও compromised হলে, আপনি এটিকে বদ্ধ চান। তারপর:

sudo systemctl daemon-reload
sudo systemctl enable --now tgbot

RestartSec=3 সহ Restart=always মানে একটি ক্র্যাশ — Telegram থেকে একটি খারাপ আপডেট, একটি unhandled exception, একটি OOM — bot-কে আপনি টের পাওয়া পর্যন্ত মৃত রাখার বদলে তিন সেকেন্ডে ফিরিয়ে আনে। এটিকে live দেখুন:

journalctl -u tgbot -f

সেটাই আপনার পুরো logging সেটআপ। ঘোরানোর কোনো log ফাইল নেই, কোনো বাড়তি tooling নেই — journald ইতিমধ্যেই এটি ধরে রেখেছে।

downtime-নাটক ছাড়া আপডেট

আপনি কোড বদলালে বা aiogram bump করলে:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # library আপগ্রেড করলে
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # এটি পরিষ্কারভাবে ফিরে এসেছে নিশ্চিত করুন

restart bot-কে এক-দুই সেকেন্ডের জন্য থমকায়। একটি polling bot-এর জন্য তা ব্যবহারকারীদের কাছে অদৃশ্য — Telegram update queue করে ও bot পুনঃসংযুক্ত হলে delivery করে।

Polling বনাম webhook — সৎ সংস্করণ

এই সিদ্ধান্ত মানুষ বেশি ভাবে। এই যে সরল সংস্করণ:

Polling (start_polling, উপরের কোড যা ব্যবহার করে) bot-কে একটি দীর্ঘজীবী সংযোগে Telegram-কে "নতুন কিছু?" জিজ্ঞেস করায়। এর outbound ইন্টারনেট ছাড়া কিছুই লাগে না — কোনো ডোমেইন, TLS, খোলা inbound পোর্ট নয়। এটি NAT-এর পেছনে ভালোই চলে। বিপুল অধিকাংশ bot-এর জন্য, এটি সঠিক আর আপনার এখানে থামা উচিত।

Webhook Telegram-কে আপনার কাছে update push করায়, মানে আপনাকে একটি পাবলিক HTTPS endpoint উন্মুক্ত করতে হবে। তার জন্য একটি ডোমেইন ও একটি পৌঁছানোযোগ্য inbound পোর্ট দরকার — তাই হয় একটি dedicated পাবলিক IP বা সামনে একটি reverse proxy। বেশি সেটআপ, বেশি জিনিস যা ভাঙে। ফল হলো বড় scale-এ কম latency ও কম overhead — হাজার concurrent ব্যবহারকারী, ভারী update-ভলিউম।

ব্যবহারিক নিয়ম: একটি NAT প্ল্যানে polling দিয়ে শুরু করুন। শুধু তখনই একটি webhook-এ যান যখন আপনি আসলে polling ছাড়িয়ে গেছেন — আর গেলে, তখনই একটি dedicated IP তার জায়গা অর্জন করে, কারণ আপনার সেই inbound HTTPS endpoint দরকার।

এটি চালাতে কত খরচ

একটি polling bot হালকা। এটি Telegram-এর long-poll-এ idle থাকে ও বার্তায় প্রতিক্রিয়া দেয়, তাই বক্সটি বেশিরভাগ অপেক্ষা করে:

Signup শুধু-ইমেল আর আপনি Base বা Ethereum-এ USDC বা USDT-তে পরিশোধ করেন — কোনো কার্ড, ID নয়। একটি কার্ডও চলে, কিন্তু on-ramp-এর একটি ~$27 ন্যূনতম আছে, তাই একটি $3 প্ল্যানের জন্য একবার একটি ছোট balance top up করা ও renewal তা থেকে টানতে দেওয়া মসৃণতর। এটি CPU-only, জার্মানিতে একটি datacenter — একটি bot-এর জন্য একটি অ-বিষয়, জানা ভালো যদি আপনার একটি GPU বা একটি নির্দিষ্ট অঞ্চল লাগত।

সৎ শেষ কথা

একটি Telegram bot আপনি সেলফ-হোস্ট করতে-পারা সবচেয়ে সস্তা জিনিসগুলোর একটি: একটি $3 বক্স, একটি systemd unit, ও polling আপনাকে একটি bot দেয় যা আপনি দেখভাল না-করেই ক্র্যাশ ও reboot-জুড়ে online। শুধু তখনই একটি webhook ও একটি বড় প্ল্যানের দিকে হাত বাড়ান যখন scale আসলে বাধ্য করে — একটি tutorial আপনাকে webhook "ভালো" বলেছে বলে নয়। ছোট বক্স নিন, token একটি env ফাইলে রাখুন, uptime systemd-কে সামলাতে দিন, আর — সবার আগে — new-VPS security checklist চালান যাতে বক্সটি নিজে লক থাকে।


আপনারটা হোস্ট করতে প্রস্তুত? একটি Telegram bot সম্পদ প্রায় ব্যবহার করে না — Nano প্ল্যান ($3/মাস) এটি ঝামেলা ছাড়াই 24/7 চালায়।

FAQ

Polling নাকি webhook — কোনটি ব্যবহার করব?

polling দিয়ে শুরু করুন। এটি outbound ইন্টারনেট সহ যেকোনো বক্স থেকে কাজ করে — কোনো ডোমেইন, খোলা পোর্ট, TLS নয় — আর এটি বেশিরভাগ bot-এর জন্য যথেষ্ট। শুধু তখনই একটি webhook-এ switch করুন যখন আপনি scale-এ চালাচ্ছেন (হাজার ব্যবহারকারী) বা সম্ভাব্য সবচেয়ে কম latency দরকার; একটি webhook-এর একটি পাবলিক HTTPS endpoint দরকার, মানে একটি ডোমেইন ও একটি পৌঁছানোযোগ্য inbound পোর্ট (একটি dedicated IP, বা একটি reverse proxy), তাই এটি বেশি moving part। 95% bot-এর জন্য, একটি ছোট VPS-এ polling সঠিক উত্তর।

একটি Telegram bot-এর জন্য কি একটি dedicated IP বা একটি ডোমেইন দরকার?

polling-এর জন্য নয় — bot শুধু Telegram-এ outbound call করে, তাই port-forwarded SSH সহ একটি NAT প্ল্যান যথেষ্ট। আপনার একটি পাবলিক HTTPS endpoint (ডোমেইন + inbound পোর্ট, অর্থাৎ একটি dedicated IP বা reverse proxy) শুধু তখনই দরকার যদি আপনি webhook মোডে switch করেন। বেশিরভাগ bot-এর কখনও লাগে না।

একটি aiogram bot-এর কোন আকারের VPS দরকার?

সবচেয়ে ছোটটা। একটি polling bot বেশিরভাগ Telegram-এর long-poll-এ অপেক্ষা করে, তাই 1 vCPU / 1 GB (একটি $3 Nano) বেশিরভাগ bot আরামে সামলায়। শুধু তখনই size বাড়ান যখন bot নিজে ভারী কাজ করে — একটি database, media processing, বা একটি local মডেল — যা আপনাকে 2 GB ($5) বা বেশির দিকে ঠেলে।

log out করার পরে bot-কে কীভাবে চালু রাখব?

এটিকে Restart=always সহ একটি systemd সার্ভিস হিসেবে চালান। আপনার terminal-এ চালু করলে SSH বন্ধ হলে এটি মরে; systemd-র অধীনে এটি logout টেকায়, ক্র্যাশে restart হয়, ও একটি reboot-এর পরে ফিরে আসে। ওটাই একটি demo ও নির্ভর করা-যায় এমন কিছুর মধ্যে রেখা।

← Back to blogSee plans & pricing →

মন্তব্য

এখনো কোনো মন্তব্য নেই। প্রথম হোন।

একটি মন্তব্য দিন

মন্তব্য প্রকাশের আগে মডারেট করা হয়।