EQVPS

הריצו בוט Telegram 24/7 על VPS: aiogram, systemd, polling מול webhook

4 ביולי 2026 · 5 דק' קריאה · EQVPS Team

כתבתם בוט Telegram עם aiogram, בדקתם אותו מקומית, והוא עובד. עכשיו הוא צריך לחיות איפשהו שלא נרדם כשאתם סוגרים את המחשב הנייד. VPS קטן הוא הבית הטבעי — אבל יש פער בין python bot.py בסשן SSH לבין בוט שבאמת נשאר למעלה דרך קריסות, אתחולים, והחיבור שלכם שנופל.

זו גרסת הפרודקשן: virtualenv, הטוקן שמור מחוץ לקוד שלכם, שירות systemd שמחייה את הבוט בעצמו, ותשובה בהירה לשאלה שכולם בסוף שואלים — polling או webhook?

למה לא פשוט להריץ אותו על המחשב הנייד שלכם

בוט צריך חיבור יוצא יציב ל-Telegram. המחשב הנייד שלכם נרדם, מאותחל לעדכונים, וקופץ בין רשתות — כל אחד מאלה מפיל את הבוט, ומשתמשים פוגעים בקיר של שקט. VPS מחזיק את החיבור הזה סביב השעון. זו כל הסיבה להעביר אותו מהמכונה שלכם, וזו אותה סיבה שבוט Discord שייך לשרת גם.

אם אתם רק רוצים את הנתיב המהיר ביותר "להביא אותו למצב מקוון" עם בוט מינימלי, ההדרכה לאחסון-בוט-Telegram מכסה את זה. הפיסה הזו הולכת רמה עמוק יותר: aiogram, טיפול בטוח בטוקן, וידיעה מתי להתרחב.

הבוט, ב-virtualenv

התחברו ב-SSH ושמרו את הבוט מבודד ב-venv משלו — אל תתקינו חבילות במערכת-כולה, זה הופך שדרוגים וניקוי לבלגן אחר כך:

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.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())

שמרו את הטוקן מחוץ לקוד שלכם

לעולם אל תדביקו את הטוקן של BotFather ל-bot.py — push אחד ל-repo ציבורי והוא דלף. שימו אותו בקובץ env קריא-ל-root במקום:

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

טוקן שדלף הוא /revoke אחד ב-BotFather מלהיות מתוקן — אבל כל דבר אחר שדלף על מכונה משותפת גרוע יותר. VPS ייעודי לבוט הוא בכנות בית בטוח יותר לטוקן מהמחשב הנייד היומיומי שלכם: אם הוא דולף, אתם מסובבים טוקן אחד, לא את כל ההגדרה שלכם.

החלק ששומר אותו חי: systemd

זה מה שמפריד בין בוט שרץ לבוט שנשאר רץ. צרו את השירות:

# /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 (botuser למעלה), לא root — אם הבוט אי-פעם נפרץ, אתם רוצים אותו סגור. ואז:

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

Restart=always עם RestartSec=3 אומר שקריסה — עדכון גרוע מ-Telegram, חריגה לא-מטופלת, OOM — מחזירה את הבוט תוך שלוש שניות במקום להשאיר אותו מת עד שאתם שמים לב. צפו בו חי:

journalctl -u tgbot -f

זו כל הגדרת ה-logging שלכם. ללא קבצי לוג לסובב, ללא כלים נוספים — journald כבר יש את זה.

עדכון ללא דרמת downtime

כשאתם משנים את הקוד או מעלים את aiogram:

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 מבליח את הבוט לשנייה-שתיים. לבוט polling זה בלתי-נראה למשתמשים — Telegram מתייג עדכונים ומוסר אותם ברגע שהבוט מתחבר מחדש.

polling מול webhook — הגרסה הכנה

זו ההחלטה שאנשים חושבים עליה יותר מדי. הנה הגרסה הפשוטה:

polling (start_polling, מה שהקוד למעלה משתמש בו) גורם לבוט לשאול את Telegram "משהו חדש?" על חיבור ארוך-חיים. הוא לא צריך שום דבר חוץ מאינטרנט יוצא — ללא דומיין, ללא TLS, ללא פורטים נכנסים פתוחים. הוא רץ בסדר מאחורי NAT. לרוב הגדול של הבוטים, זה נכון וכדאי שתעצרו כאן.

webhook גורם ל-Telegram לדחוף עדכונים אליכם, מה שאומר שאתם חייבים לחשוף נקודת קצה HTTPS ציבורית. זה דורש דומיין ופורט נכנס נגיש — אז או IP ציבורי ייעודי או reverse proxy מלפנים. יותר הגדרה, יותר דברים שנשברים. התמורה היא השהיה נמוכה יותר ופחות overhead בקנה-מידה גדול — אלפי משתמשים בו-זמניים, נפח עדכונים כבד.

הכלל המעשי: התחילו עם polling על תוכנית NAT. עברו ל-webhook רק כשבאמת גדלתם מעבר ל-polling — ואם כן, זה כאשר IP ייעודי מרוויח את מקומו, כי אתם צריכים את נקודת הקצה HTTPS הנכנסת הזו.

מה זה עולה להריץ

בוט polling קל. הוא בטל על ה-long-poll של Telegram ומגיב להודעות, אז הארגז בעיקר מחכה:

ההרשמה באימייל-בלבד ואתם משלמים ב-USDC או USDT ב-Base או Ethereum — ללא כרטיס, ללא תעודה. כרטיס עובד גם, אבל ל-on-ramp יש מינימום של ~$27, אז לתוכנית של $3 חלק יותר לטעון יתרה קטנה פעם אחת ולתת לחידושים למשוך ממנה. זה CPU-בלבד, דאטה-סנטר אחד בגרמניה — לא-עניין לבוט, שווה לדעת אם הייתם צריכים GPU או אזור ספציפי.

השורה התחתונה הכנה

בוט Telegram הוא אחד הדברים הזולים ביותר שאתם יכולים לאחסן-בעצמכם: ארגז של $3, unit של systemd, ו-polling נותן לכם בוט שמקוון דרך קריסות ואתחולים בלי שתעשו לו בייביסיטר. הושיטו יד ל-webhook ולתוכנית גדולה יותר רק כשקנה-מידה באמת מכריח — לא כי מדריך אמר לכם ש-webhooks "טובים יותר". השיגו את הארגז הקטן, שמרו את הטוקן בקובץ env, תנו ל-systemd לטפל בזמן הפעילות, ו — לפני הכל — הריצו את רשימת התיוג לאבטחת VPS חדש כך שהארגז עצמו נעול.


מוכנים לארח את שלכם? בוט Telegram בקושי משתמש במשאבים — תוכנית Nano ($3/חודש) מריצה אותו 24/7 ללא טרחה.

שאלות נפוצות

polling או webhook — במה כדאי לי להשתמש?

התחילו עם polling. הוא עובד מכל ארגז עם אינטרנט יוצא — ללא דומיין, ללא פורטים פתוחים, ללא TLS — והוא בשפע לרוב הבוטים. עברו ל-webhook רק כשאתם רצים בקנה-מידה (אלפי משתמשים) או צריכים את ההשהיה הנמוכה ביותר האפשרית; webhook צריך נקודת קצה HTTPS ציבורית, שאומרת דומיין ופורט נכנס נגיש (IP ייעודי, או reverse proxy), אז זה יותר חלקים נעים. ל-95% מהבוטים, polling על VPS קטן הוא התשובה הנכונה.

האם אני צריך IP ייעודי או דומיין לבוט Telegram?

לא ל-polling — הבוט מבצע רק קריאות יוצאות ל-Telegram, אז תוכנית NAT עם SSH מועבר-פורט מספיקה. אתם צריכים נקודת קצה HTTPS ציבורית (דומיין + פורט נכנס, כלומר IP ייעודי או reverse proxy) רק אם אתם עוברים למצב webhook. רוב הבוטים אף פעם לא צריכים את זה.

איזה גודל VPS בוט aiogram צריך?

הקטן ביותר. בוט polling בעיקר מחכה ל-long-poll של Telegram, אז 1 vCPU / 1 GB (Nano של $3) מטפל ברוב הבוטים בנוחות. עלו בגודל רק כשהבוט עצמו עושה את ההרמה הכבדה — מסד נתונים, עיבוד מדיה, או מודל מקומי — שדוחף אתכם לעבר 2 GB ($5) או יותר.

איך אני שומר את הבוט רץ אחרי שאני מתנתק?

הריצו אותו כשירות systemd עם Restart=always. מופעל בטרמינל שלכם הוא מת כשה-SSH נסגר; תחת systemd הוא שורד התנתקות, מופעל מחדש בקריסה, וחוזר אחרי אתחול. זה הקו בין הדגמה למשהו שאתם יכולים לסמוך עליו.

← חזרה לבלוגראו תוכניות ומחירים →

תגובות

אין עדיין תגובות. היו הראשונים.

השאירו תגובה

התגובות עוברות מודרציה לפני שהן מופיעות.