بوت Telegram على خادم: التشغيل والتشغيل التلقائي
كيف تستضيف بوت Telegram على VPS: العزل تحت مستخدم خاص به، وخدمة systemd، وتخزين الرمز، والسجلات، والتعامل مع انقطاعات الشبكة.
آخر تحديث 23 أغسطس 2026
يحتاج البوت إلى عملية تعمل باستمرار — وهنا تنتهي الاستضافة المجانية ويبدأ VPS. لا يحتاج البوت إلى موارد تُذكر: حتى VDS-1 (نواة واحدة، 2 GB) يكفي لبوت يخدم آلاف المستخدمين.
التثبيت
مستخدم ودليل منفصلان — حتى لا يعمل البوت بصلاحيات root:
useradd -r -m -d /srv/bot -s /usr/sbin/nologin botuser
cd /srv/bot && sudo -u botuser git clone https://github.com/you/bot.git .
sudo -u botuser python3 -m venv venv
sudo -u botuser venv/bin/pip install -r requirements.txt
مع Node.js: استخدم npm ci --omit=dev بدلًا من venv.
احفظ الرمز في ملف بيئة، لا في الكود:
install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env
يجب ألا يصل الملف الذي يحتوي على الرمز إلى المستودع: أضفه إلى .gitignore قبل أول commit.
الخدمة
/etc/systemd/system/tgbot.service:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=botuser
WorkingDirectory=/srv/bot
EnvironmentFile=/srv/bot/.env
ExecStart=/srv/bot/venv/bin/python -u bot.py
Restart=always
RestartSec=10
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tgbot
journalctl -u tgbot -f
تعطّل راية -u في Python تخزين المخرجات مؤقتًا — وبدونها ستظهر السجلات في journal بتأخير يبلغ عدة دقائق، أو لن تظهر إطلاقًا.
Long polling أم webhook
Long polling أبسط: البوت يستعلم Telegram بنفسه، ولا تحتاج إلى كشف أي شيء. وهذا يكفي لمعظم المهام.
webhook أسرع وأوفر في حركة البيانات، لكنه يتطلب نطاقًا وشهادة:
location /bot/token {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
ستحتاج إلى Let's Encrypt ووسيط عكسي. يقبل Telegram الشهادات الموقّعة ذاتيًا على مضض — استخدم شهادة عادية.
يجب ألا تعمل نسختان من البوت في الوقت نفسه أبدًا: يسلّم Telegram التحديثات إلى مستلم واحد فقط، وسيبدأ البوت بالرد بشكل متقطع. بعد التعديلات، نفّذ restart، لا تشغيلًا ثانيًا.
البيانات
يكفي SQLite للإعدادات والإحصاءات — ملف بجوار البوت. لا تحتاج إلى خادم قاعدة بيانات منفصل إلا إذا كان للبوت لوحة ويب أو عدة عمليات.
الأخطاء الشائعة
| العَرَض | السبب |
|---|---|
Conflict: terminated by other getUpdates | نسختان من البوت تعملان |
| يصمت البوت بعد ليلة | لم يُضبط Restart=always، وتعطّلت العملية عند انقطاع الشبكة |
Unauthorized | أُلغي الرمز أو نُسخ مع مسافات زائدة |
| لا توجد سجلات | تخزين المخرجات مؤقتًا، أو الكتابة إلى ملف بدلًا من stdout |
| يعمل يدويًا، ويتعطّل كخدمة | لا توجد متغيرات بيئة في systemd |
الرمز الذي ظهر في لقطة شاشة أو مستودع عام أو محادثة شخص آخر يُعدّ مكشوفًا. ألغِه عبر BotFather وغيّر ملف
.env— ولا تعتمد على أن لا يلاحظه أحد.