Skip to content
VDS · التطبيقات والبوتات

بوت 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 — ولا تعتمد على أن لا يلاحظه أحد.