EQVPS

Telegram bot በVPS ላይ 24/7 ማሄድ: aiogram፣ systemd፣ polling vs webhook

ጁላይ 4 2026 · 4 ደቂቃ ንባብ · EQVPS Team

Telegram bot በaiogram ጻፉ፣ በlocal ሞከሩ፣ እና ይሠራል። አሁን laptopን ሲዘጉ የማይተኛ የሆነ ቦታ መኖር አለበት። ትንሽ VPS ተፈጥሯዊ ቤት ነው — ግን በSSH session ውስጥ python bot.py እና በcrashes፣ reboots፣ እና connectionዎ በሚወድቅበት ጊዜ በእውነት up የሚቆይ bot መካከል ክፍተት አለ።

ይህ production ስሪቱ ነው: virtualenv፣ token ከcodeዎ ውጭ የተያዘ፣ botን በራሱ የሚያስነሳ systemd service፣ እና ሁሉም በመጨረሻ ለሚጠይቀው ጥያቄ ግልጽ መልስ — polling ወይስ webhook?

በlaptopዎ ላይ ብቻ ለምን አለማሄድ

bot ወደ Telegram የተረጋጋ outbound connection ይፈልጋል። laptopዎ ይተኛል፣ ለupdates ይreboot ያደርጋል፣ እና በnetworks መካከል ይዘላል — እያንዳንዱ ያ botን ያወርዳል፣ እና users የዝምታ ግድግዳ ይመታሉ። VPS ያንን connection 24 ሰዓት ይይዛል። ከmachineዎ የማንቀሳቀስ ሙሉ ምክንያት ያ ነው፣ እና Discord bot በserver ላይ የሚገባ ተመሳሳይ ምክንያት ነው።

አነስተኛ bot ጋር ፈጣኑን ሊሆን የሚችል "online አድርገው" መንገድ ብቻ ከፈለጉ፣ host-a-Telegram-bot walkthrough ያንን ይሸፍናል። ይህ ቁራጭ አንድ ደረጃ ጠለቅ ይላል: aiogram፣ ደኅንነቱ የተጠበቀ token handling፣ እና መቼ ማሳደግ እንዳለብዎ ማወቅ።

bot፣ በvirtualenv ውስጥ

SSH ያድርጉ እና botን በራሱ venv ውስጥ isolated ያድርጉ — packages system-wide አይጫኑ፣ upgrades እና cleanup ቆይቶ ብጥብጥ ያደርጋል:

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

tokenን ከenvironment የሚያነብ አነስተኛ aiogram 3 bot፣ ከ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 ውስጥ አይለጥፉ — ወደ public repo አንድ push እና ተለቋል። በምትኩ root-readable env file ውስጥ ያስቀምጡት:

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 ከመስተካከል ይርቃል — ግን በተጋራ machine ላይ የተለቀቀ ሌላ ማንኛውም የከፋ ነው። ለbot dedicated VPS ከዕለታዊ laptopዎ ይልቅ ለtoken በሐቀኝነት ደኅንነቱ የተጠበቀ ቤት ነው: ከተለቀቀ፣ አንድ token ያሽከረክራሉ፣ ሙሉ setupዎን አይደለም።

ሕያው የሚያደርገው ክፍል: systemd

ይህ የሚሮጥ botን የሚቆይ ከሚሮጥ bot የሚለየው ነው። serviceን ይፍጠሩ:

# /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 ከተበላሸ፣ boxed-in እንዲሆን ይፈልጋሉ። ከዚያ:

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

Restart=alwaysRestartSec=3 ጋር ማለት crash — ከTelegram መጥፎ update፣ ያልተያዘ exception፣ OOM — botን እስከሚያስተውሉ ድረስ ከመተው ይልቅ በሦስት ሰከንድ ይመልሰዋል። Live ይመልከቱት:

journalctl -u tgbot -f

ያ ሙሉ logging setupዎ ነው። ለማሽከርከር log files የለም፣ ተጨማሪ tooling የለም — journald አስቀድሞ አለው።

ያለdowntime drama ማዘመን

codeን ሲቀይሩ ወይም aiogram ሲbump ሲያደርጉ:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # if upgrading the library
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # confirm it came back clean

restart botን ለሰከንድ ወይም ሁለት ያblip ያደርጋል። ለpolling bot ያ ለusers የማይታይ ነው — Telegram updates ያqueue ያደርጋል እና bot እንደገና ሲገናኝ ያደርሳቸዋል።

Polling vs webhook — ግልጹ ስሪት

ይህ ሰዎች ከመጠን በላይ የሚያስቡት ውሳኔ ነው። ግልጹ ስሪት ይኸውና:

Polling (start_polling፣ ከላይ ያለው code የሚጠቀመው) botን Telegramን "አዲስ ነገር?" በlong-lived connection ላይ ይጠይቃል። ከoutbound internet በስተቀር ምንም አይፈልግም — domain የለም፣ TLS የለም፣ ክፍት inbound ports የለም። ከNAT በስተጀርባ በጥሩ ይሮጣል። ለአብዛኞቹ bots ይህ ትክክለኛ ነው እና እዚህ ማቆም አለብዎ።

Webhook Telegramን updates ወደ እርስዎ ያpush ያደርጋል፣ ይህም public HTTPS endpoint ማጋለጥ አለብዎ ማለት ነው። ያ domain እና ተደራሽ inbound port ይፈልጋል — ስለዚህ dedicated public IP ወይም ከፊት reverse proxy። ተጨማሪ setup፣ የሚሰበሩ ተጨማሪ ነገሮች። ጥቅሙ ዝቅተኛ latency እና በትልቅ skale ላይ ያነሰ overhead ነው — ሺዎች concurrent users፣ ከባድ update volume።

ተግባራዊ ደንቡ: በNAT plan ላይ በpolling ይጀምሩ። pollingን በእውነት ሲያልፉ ብቻ ወደ webhook ይንቀሳቀሱ — እና ካደረጉ፣ dedicated IP ቦታውን የሚያገኘው ያኔ ነው፣ ምክንያቱም ያንን inbound HTTPS endpoint ስለሚፈልጉ።

ለማሄድ ምን እንደሚያስከፍል

polling bot ቀላል ነው። በTelegram long-poll ላይ ይidle ያደርጋል እና ለmessages ይምላሽ ይሰጣል፣ ስለዚህ box በአብዛኛው ይጠብቃል:

Signup email-only ነው እና USDC ወይም USDT በBase ወይም Ethereum ይክፈላሉ — ካርድ የለም፣ ID የለም። ካርድ እንዲሁ ይሠራል፣ ግን on-ramp ~$27 ዝቅተኛ አለው፣ ስለዚህ ለ$3 plan ትንሽ balance አንድ ጊዜ መሙላት እና renewals ከእሱ እንዲሳቡ ማድረግ የተቀላጠፈ ነው። CPU-only ነው፣ በጀርመን አንድ datacenter — ለbot የማይሆን ጉዳይ፣ GPU ወይም የተወሰነ region ከፈለጉ ማወቅ ጠቃሚ።

ግልጹ ማጠቃለያ

Telegram bot self-host ማድረግ ከሚችሉት ርካሽ ነገሮች አንዱ ነው: $3 box፣ systemd unit፣ እና polling ሳይንከባከቡት በcrashes እና reboots online የሆነ bot ይሰጥዎታል። skale በእውነት ሲያስገድድ ብቻ ወደ webhook እና ትልቅ plan ይድረሱ — tutorial webhooks "የተሻሉ" ናቸው ስላለዎ አይደለም። ትንሹን box ያግኙ፣ tokenን በenv file ውስጥ ያቆዩ፣ systemd uptimeን እንዲያስተናግድ ይፍቀዱ፣ እና — ከሁሉም በፊት — box ራሱ እንዲቆለፍ new-VPS security checklist ያሂዱ።


የእርስዎን ለማስተናገድ ዝግጁ ነዎት? Telegram bot ብዙም resources አይጠቀምም — Nano plan ($3/ወር) ያለችግር 24/7 ያሄደዋል።

FAQ

Polling ወይስ webhook — የትኛውን መጠቀም አለብኝ?

በpolling ይጀምሩ። outbound internet ካለው ማንኛውም box ይሠራል — domain የለም፣ ክፍት ports የለም፣ TLS የለም — እና ለአብዛኞቹ bots በቂ ነው። በskale ሲሮጡ (ሺዎች users) ወይም ዝቅተኛውን ሊሆን የሚችል latency ሲፈልጉ ብቻ ወደ webhook ይቀይሩ፤ 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 plan በቂ ነው። public HTTPS endpoint (domain + inbound port፣ ማለትም dedicated IP ወይም reverse proxy) የሚፈልጉት ወደ webhook mode ከቀየሩ ብቻ ነው። አብዛኞቹ bots ፈጽሞ አይፈልጉትም።

aiogram bot ምን መጠን VPS ይፈልጋል?

ትንሹን። polling bot በአብዛኛው በTelegram long-poll ላይ ይጠብቃል፣ ስለዚህ 1 vCPU / 1 GB ($3 Nano) አብዛኞቹን bots በምቾት ያስተናግዳል። bot ራሱ ከባዱን ስራ ሲሠራ ብቻ ማሳደግ — database፣ media processing፣ ወይም local model — ይህም ወደ 2 GB ($5) ወይም ከዚያ በላይ ይገፋዎታል።

log out ካደረግኩ በኋላ botን እንዴት ማሄድ እቀጥላለሁ?

እንደ systemd service ከRestart=always ጋር ያሂዱት። በterminalዎ የተጀመረ SSH ሲዘጋ ይሞታል፤ በsystemd ስር logout ይተርፋል፣ በcrash ይrestart ያደርጋል፣ እና ከreboot በኋላ ይመለሳል። ያ በdemo እና ሊተማመኑበት በሚችሉት ነገር መካከል ያለው መስመር ነው።

← ወደ ብሎግ ተመለስዕቅዶች & ዋጋዎች ይመልከቱ →

አስተያየቶች

እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።

አስተያየት ይተዉ

አስተያየቶች ከመታየታቸው በፊት ይጣራሉ።