حرّ الصيف — كل شيء يذوب، حتى أسعارنا.−25%−25% على كل خطة سنوية، حتى 31 أغسطسعرض الخطط
EQVPS

شغّل بوت تيليجرام على مدار الساعة على VPS: aiogram وsystemd والاستطلاع مقابل webhook

4 يوليو 2026 · 5 دقيقة قراءة · EQVPS Team

كتبت بوت تيليجرام بـ aiogram، اختبرته محليًا، وهو يعمل. الآن عليه أن يعيش في مكان لا ينام حين تُغلق الحاسوب المحمول. VPS صغير هو البيت الطبيعي — لكن هناك فجوة بين python bot.py في جلسة SSH وبوت يبقى مشتغلًا فعلًا عبر الأعطال وإعادات التشغيل وسقوط اتصالك.

هذه النسخة الإنتاجية: virtualenv، الرمز مُبقى خارج شيفرتك، خدمة systemd تبعث البوت من تلقاء نفسها، وإجابة واضحة البصيرة عن السؤال الذي يسأله الجميع في النهاية — استطلاع أم webhook؟

لماذا لا تُشغّله على حاسوبك المحمول فحسب

البوت يحتاج اتصالًا صادرًا ثابتًا إلى تيليجرام. حاسوبك المحمول ينام، يُعيد التشغيل للتحديثات، ويقفز بين الشبكات — كلٌّ من هذه يُسقط البوت، ويصطدم المستخدمون بجدار صمت. VPS يحمل ذلك الاتصال على مدار الساعة. ذلك هو كل سبب نقله عن آلتك، وهو السبب نفسه لأنّ بوت ديسكورد ينتمي إلى خادم أيضًا.

إن أردت أسرع مسار «أطلقه على الإنترنت» ببوت أدنى، فإنّ جولة استضافة بوت تيليجرام تغطّي ذلك. هذه القطعة تذهب أعمق درجةً: 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 — دفعة واحدة إلى مستودع عامّ وهو مُسرَّب. ضعه في ملف بيئة يقرؤه 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 يعني أنّ عطلًا — تحديثًا سيئًا من تيليجرام، استثناءً غير معالَج، نفاد ذاكرة — يُعيد البوت في ثلاث ثوانٍ بدل تركه ميتًا حتى تلاحظ. راقبه حيًّا:

journalctl -u tgbot -f

ذلك إعداد تسجيلك كله. لا ملفّات سجلّ لتدويرها، لا أدوات إضافية — journald لديه ذلك أصلًا.

التحديث دون دراما توقّف

حين تُغيّر الشيفرة أو ترفع aiogram:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # إن كنت ترقّي المكتبة
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # تأكّد أنه عاد نظيفًا

إعادة التشغيل تُومض البوت لثانية أو اثنتين. لبوت استطلاع ذلك غير مرئي للمستخدمين — تيليجرام يُصفّ التحديثات ويسلّمها حالما يُعيد البوت الاتصال.

الاستطلاع مقابل webhook — النسخة الصادقة

هذا القرار الذي يُفرِط الناس في التفكير به. إليك النسخة البسيطة:

الاستطلاع (start_polling، ما تستخدمه الشيفرة أعلاه) يجعل البوت يسأل تيليجرام «أي جديد؟» على اتصال طويل الأمد. لا يحتاج سوى إنترنت صادر — بلا نطاق، بلا TLS، بلا منافذ واردة مفتوحة. يعمل جيّدًا خلف NAT. للغالبية الساحقة من البوتات، هذا صحيح وينبغي أن تتوقّف هنا.

webhook يجعل تيليجرام يدفع التحديثات إليك، ما يعني أنّ عليك كشف نقطة HTTPS عامة. ذلك يتطلّب نطاقًا ومنفذًا واردًا في المتناول — فإمّا IP عامّ مخصّص أو وكيل عكسي أمامه. إعداد أكثر، أشياء أكثر تنكسر. المردود زمن استجابة أقلّ وعبء أقلّ على نطاق واسع — آلاف المستخدمين المتزامنين، حجم تحديثات ثقيل.

القاعدة العملية: ابدأ بالاستطلاع على خطة NAT. انتقل إلى webhook فقط حين تتجاوز الاستطلاع فعلًا — وإن فعلت، فحينها يكسب IP مخصّص مكانه، لأنك تحتاج تلك النقطة HTTPS الواردة.

ما يكلّفه التشغيل

بوت الاستطلاع خفيف. يخمل على استطلاع تيليجرام الطويل ويتفاعل مع الرسائل، فالصندوق ينتظر أساسًا:

التسجيل بالبريد فقط وتدفع بـ USDC أو USDT على Base أو Ethereum — بلا بطاقة، بلا هوية. البطاقة تعمل أيضًا، لكن للبوّابة حدّ أدنى ~27$، فلخطة 3$ أسلس أن تشحن رصيدًا صغيرًا مرة وتدع التجديدات تسحب منه. إنه معالج فقط، مركز بيانات واحد في ألمانيا — غير مهمّ لبوت، يجدر معرفته إن احتجت GPU أو منطقة محدّدة.

الخلاصة الصادقة

بوت تيليجرام من أرخص ما يمكنك استضافته ذاتيًا: صندوق 3$، وحدة systemd، والاستطلاع يمنحك بوتًا على الإنترنت عبر الأعطال وإعادات التشغيل دون مجالسة. الجأ إلى webhook وخطة أكبر فقط حين يفرضه النطاق فعلًا — لا لأنّ درسًا أخبرك أنّ webhooks «أفضل». خذ الصندوق الصغير، أبقِ الرمز في ملف بيئة، دع systemd يتولّى وقت التشغيل، و — قبل أي شيء — نفّذ قائمة أمان الـ VPS الجديد كي يكون الصندوق نفسه محكمًا.


مستعدّ لاستضافة بوتك؟ بوت تيليجرام بالكاد يستخدم موارد — خطة Nano (3$ شهريًا) تُشغّله على مدار الساعة دون عناء.

الأسئلة الشائعة

الاستطلاع أم webhook — أيّهما أستخدم؟

ابدأ بالاستطلاع. يعمل من أي صندوق بإنترنت صادر — بلا نطاق، بلا منافذ مفتوحة، بلا TLS — وهو وافٍ لمعظم البوتات. حوّل إلى webhook فقط حين تُشغّل على نطاق واسع (آلاف المستخدمين) أو تحتاج أدنى زمن استجابة ممكن؛ webhook يحتاج نقطة HTTPS عامة، ما يعني نطاقًا ومنفذًا واردًا في المتناول (IP مخصّص، أو وكيل عكسي)، فهو أجزاء متحرّكة أكثر. لـ 95% من البوتات، الاستطلاع على VPS صغير هو الجواب الصحيح.

هل أحتاج IP مخصّصًا أو نطاقًا لبوت تيليجرام؟

ليس للاستطلاع — البوت يجري استدعاءات صادرة فقط إلى تيليجرام، فخطة NAT بـ SSH مُحوَّل المنفذ كافية. تحتاج نقطة HTTPS عامة (نطاق + منفذ وارد، أي IP مخصّص أو وكيل عكسي) فقط إن حوّلت إلى وضع webhook. معظم البوتات لا تحتاجه أبدًا.

ما حجم الـ VPS الذي يحتاجه بوت aiogram؟

الأصغر. بوت الاستطلاع ينتظر أساسًا استطلاع تيليجرام الطويل، فـ 1 vCPU / 1 GB (Nano بـ 3$) يتعامل مع معظم البوتات بأريحية. كبّر الحجم فقط حين يقوم البوت نفسه بالعمل الثقيل — قاعدة بيانات، معالجة وسائط، أو نموذج محلي — ما يدفعك نحو 2 GB (5$) أو أكثر.

كيف أُبقي البوت يعمل بعد تسجيل الخروج؟

شغّله كخدمة systemd بـ Restart=always. مُطلقًا في طرفيتك يموت حين يُغلق SSH؛ تحت systemd ينجو من تسجيل الخروج، يُعيد التشغيل عند العطل، ويعود بعد إعادة تشغيل. ذلك هو الخطّ بين عرض توضيحي وشيء تعتمد عليه.

← العودة إلى المدوّنة← الخطط والأسعار

التعليقات

لا تعليقات بعد. كن الأول.

اترك تعليقًا

تُراجَع التعليقات قبل ظهورها.