آپ نے aiogram سے ایک Telegram bot لکھا، اسے locally ٹیسٹ کیا، اور یہ چلتا ہے۔ اب اسے کہیں رہنا ہے جو آپ کے لیپ ٹاپ بند کرنے پر نہ سوئے۔ ایک چھوٹا VPS فطری گھر ہے — لیکن ایک SSH سیشن میں python bot.py اور ایک ایسے bot کے بیچ ایک فرق ہے جو کریشز، reboots، اور آپ کے کنکشن گرنے میں دراصل اوپر رہتا ہے۔
یہ production ورژن ہے: ایک virtualenv، token آپ کے code سے باہر رکھا، ایک systemd سروس جو bot کو خود زندہ کرتی ہے، اور اُس سوال کا ایک صاف-نظر جواب جو ہر کوئی بالآخر پوچھتا ہے — polling یا webhook؟
بس اسے اپنے لیپ ٹاپ پر کیوں نہ چلاؤں
ایک bot کو Telegram سے ایک مستحکم outbound کنکشن چاہیے۔ آپ کا لیپ ٹاپ سوتا، updates کو ری بوٹ ہوتا، اور networks کے بیچ کودتا ہے — ان میں سے ہر ایک bot کو گراتا ہے، اور صارفین خاموشی کی ایک دیوار سے ٹکراتے ہیں۔ ایک VPS اُس کنکشن کو دن رات رکھتا ہے۔ یہی اسے آپ کی مشین سے ہٹانے کی پوری وجہ ہے، اور یہی وجہ ہے کہ ایک Discord bot بھی ایک سرور پر ہے۔
اگر آپ بس ایک minimal bot کے ساتھ تیز ترین "اسے آن لائن کرو" راستہ چاہیں، تو host-a-Telegram-bot رہنمائی اسے کور کرتی ہے۔ یہ ٹکڑا ایک درجہ گہرا جاتا ہے: aiogram، محفوظ token handling، اور کب scale کرنا جاننا۔
bot، ایک virtualenv میں
SSH کریں اور bot کو اس کے اپنے venv میں isolated رکھیں — packages system-wide انسٹال نہ کریں، یہ بعد میں upgrades اور صفائی کو ایک گڑبڑ بناتا ہے:
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
ایک minimal aiogram 3 bot جو اپنا token environment سے پڑھتا ہے، ایک hard-coded string سے نہیں:
# 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 کو اپنے code سے باہر رکھیں
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 کے لیے ایک وقف 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
اسے ایک non-root user کے طور پر چلائیں (اوپر botuser)، root نہیں — اگر bot کبھی سمجھوتہ ہو، تو آپ اسے محدود چاہتے ہیں۔ پھر:
sudo systemctl daemon-reload
sudo systemctl enable --now tgbot
Restart=always RestartSec=3 کے ساتھ مطلب ایک کریش — Telegram سے ایک برا update، ایک unhandled exception، ایک OOM — bot کو تین سیکنڈ میں واپس لاتا ہے بجائے اسے مردہ چھوڑنے کے جب تک آپ نوٹ نہ کریں۔ اسے live دیکھیں:
journalctl -u tgbot -f
یہی آپ کا پورا logging سیٹ اپ ہے۔ گھمانے کو کوئی log فائلیں نہیں، کوئی اضافی tooling نہیں — journald کے پاس پہلے ہی یہ ہے۔
بغیر downtime ڈرامے کے اپ ڈیٹ کرنا
جب آپ code بدلیں یا aiogram bump کریں:
cd ~/tgbot && source venv/bin/activate
pip install -U aiogram # اگر لائبریری upgrade کر رہے ہوں
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager # تصدیق کریں یہ صاف واپس آیا
restart bot کو ایک یا دو سیکنڈ کے لیے لمحہ بھر روکتا ہے۔ ایک polling bot کے لیے یہ صارفین کو نظر نہیں آتا — Telegram updates queue کرتا اور bot کے دوبارہ کنیکٹ ہوتے ہی انہیں پہنچاتا ہے۔
Polling بمقابلہ webhook — ایماندار ورژن
یہ وہ فیصلہ ہے جسے لوگ زیادہ سوچتے ہیں۔ یہ رہا سادہ ورژن:
Polling (start_polling، جو اوپر کا code استعمال کرتا ہے) bot سے Telegram کو ایک دیرپا کنکشن پر "کچھ نیا؟" پوچھواتا ہے۔ اسے outbound انٹرنیٹ کے سوا کچھ نہیں چاہیے — کوئی domain، کوئی TLS، کوئی کھلے inbound ports نہیں۔ یہ NAT کے پیچھے خوب چلتا ہے۔ bots کی زبردست اکثریت کے لیے، یہ درست ہے اور آپ کو یہیں رکنا چاہیے۔
Webhook Telegram سے updates آپ کو دھکیلواتا ہے، جس کا مطلب آپ کو ایک public HTTPS endpoint expose کرنا ہوگا۔ اس کے لیے ایک domain اور ایک پہنچنے کے قابل inbound port چاہیے — تو یا تو ایک dedicated public IP یا سامنے ایک reverse proxy۔ زیادہ سیٹ اپ، زیادہ چیزیں جو ٹوٹتی ہیں۔ فائدہ بڑے پیمانے پر کم latency اور کم overhead ہے — ہزاروں concurrent صارفین، بھاری update حجم۔
عملی قاعدہ: ایک NAT پلان پر polling سے شروع کریں۔ ایک webhook پر صرف تب جائیں جب آپ دراصل polling سے بڑھ جائیں — اور اگر آپ جائیں، تو تبھی ایک dedicated IP اپنی جگہ کماتا ہے، کیونکہ آپ کو وہ inbound HTTPS endpoint چاہیے۔
اسے چلانے کی لاگت
ایک polling bot ہلکا ہے۔ یہ Telegram کے long-poll پر idle رہتا اور messages پر ردعمل دیتا ہے، تو باکس زیادہ تر انتظار کرتا ہے:
- $3 Nano (1 vCPU / 1 GB) — زیادہ تر bots کے لیے ٹھیک، کافی باتونی بھی۔
- $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 پلان کے لیے ایک بار ایک چھوٹا بیلنس top up کرنا اور تجدیدوں کو اس سے کھینچنے دینا ہموار تر ہے۔ یہ CPU-only ہے، جرمنی میں ایک datacenter — ایک bot کے لیے ایک غیر-مسئلہ، جاننا فائدہ مند اگر آپ کو ایک GPU یا ایک مخصوص علاقہ چاہیے تھا۔
ایماندار مختصر بات
ایک Telegram bot سب سے سستی چیزوں میں سے ایک ہے جو آپ self-host کر سکتے ہیں: ایک $3 باکس، ایک systemd unit، اور polling آپ کو ایک ایسا bot دیتا ہے جو کریشز اور reboots میں آپ کے نگرانی کیے بغیر آن لائن رہتا ہے۔ ایک webhook اور ایک بڑے پلان کو صرف تب پکڑیں جب scale دراصل مجبور کرے — اس لیے نہیں کہ ایک tutorial نے آپ کو بتایا کہ webhooks "بہتر" ہیں۔ چھوٹا باکس لیں، token کو ایک env فائل میں رکھیں، systemd کو uptime سنبھالنے دیں، اور — کسی بھی چیز سے پہلے — new-VPS security checklist چلائیں تاکہ باکس خود لاک ہو۔
اپنا host کرنے کو تیار؟ ایک Telegram bot بمشکل وسائل استعمال کرتا ہے — Nano پلان ($3/ماہ) اسے بغیر جھنجھٹ 24/7 چلاتا ہے۔
تبصرے
ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔