EQVPS

ایک VPS پر ایک Telegram bot 24/7 چلائیں: aiogram، systemd، polling بمقابلہ webhook

Jul 4, 2026 · 6 min read · EQVPS Team

آپ نے 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 پر ردعمل دیتا ہے، تو باکس زیادہ تر انتظار کرتا ہے:

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 چلاتا ہے۔

FAQ

Polling یا webhook — میں کون سا استعمال کروں؟

polling سے شروع کریں۔ یہ outbound انٹرنیٹ والے کسی بھی باکس سے چلتا ہے — کوئی domain، کوئی کھلے ports، کوئی TLS نہیں — اور یہ زیادہ تر bots کے لیے کافی ہے۔ webhook پر صرف تب جائیں جب آپ پیمانے پر (ہزاروں صارفین) چلا رہے ہوں یا ممکنہ کم ترین latency چاہیں؛ ایک webhook کو ایک public HTTPS endpoint چاہیے، جس کا مطلب ایک domain اور ایک پہنچنے کے قابل inbound port (ایک dedicated IP، یا ایک reverse proxy)، تو یہ زیادہ حرکت کرتے پرزے ہیں۔ 95% bots کے لیے، ایک چھوٹے VPS پر polling درست جواب ہے۔

کیا ایک Telegram bot کے لیے مجھے ایک dedicated IP یا ایک domain چاہیے؟

polling کے لیے نہیں — bot صرف Telegram کو outbound calls بناتا ہے، تو port-forwarded SSH والا ایک NAT پلان کافی ہے۔ آپ کو ایک public HTTPS endpoint (domain + inbound port، یعنی ایک dedicated IP یا reverse proxy) صرف تب چاہیے اگر آپ webhook mode پر جائیں۔ زیادہ تر bots کو کبھی اس کی ضرورت نہیں۔

ایک aiogram bot کو کتنا size VPS چاہیے؟

سب سے چھوٹا۔ ایک polling bot زیادہ تر Telegram کے long-poll پر انتظار کرتا ہے، تو 1 vCPU / 1 GB (ایک $3 Nano) زیادہ تر bots آرام سے سنبھالتا ہے۔ size صرف تب بڑھائیں جب bot خود بھاری کام کرے — ایک database، media processing، یا ایک local ماڈل — جو آپ کو 2 GB ($5) یا زیادہ کی طرف دھکیلتا ہے۔

log out کرنے کے بعد میں bot کو چلتا کیسے رکھوں؟

اسے Restart=always والی ایک systemd سروس کے طور پر چلائیں۔ آپ کے terminal میں چالو کیا یہ SSH بند ہونے پر مرتا ہے؛ systemd کے تحت یہ logout سے بچتا، کریش پر restart ہوتا، اور ایک ری بوٹ کے بعد واپس آتا ہے۔ یہی ایک demo اور کسی ایسی چیز کے بیچ لکیر ہے جس پر آپ بھروسہ کر سکیں۔

← Back to blogSee plans & pricing →

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔