আপনি 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 থাকে ও বার্তায় প্রতিক্রিয়া দেয়, তাই বক্সটি বেশিরভাগ অপেক্ষা করে:
- $3 Nano (1 vCPU / 1 GB) — বেশিরভাগ bot-এর জন্য ঠিক, এমনকি বেশ বকবকেগুলোও।
- $5 Micro (2 vCPU / 2 GB) — যখন bot একটি database (SQLite/Postgres) রাখে, media সামলায়, বা অনেক ব্যবহারকারী পরিবেশন করে।
- বেশি শুধু যদি bot নিজে আসল কাজ করে — image processing, একটি local মডেল, ভারী per-message যুক্তি।
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 চালায়।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।