Telegram bot üçün server: botu 7/24 necə işlətmək
Telegram botunu yazdınız, öz kompüterinizdə işləyir, amma noutbuku bağlayanda bot da "yatır". Bot 7/24 cavab verməlidirsə, onu daimi işləyən serverdə, yəni VPS-də saxlamaq lazımdır. Bu yazıda botu Ubuntu 24.04 serverə necə köçürəcəyinizi, systemd xidməti kimi necə işlədəcəyinizi, logları necə oxuyacağınızı və tokeni necə qoruyacağınızı göstəririk.
Niyə öz kompüteriniz uyğun deyil
- Kompüter sönür və ya yuxu rejiminə keçir. Bu müddətdə gələn mesajlar cavabsız qalır.
- Ev internetinin IP-si dəyişir və webhook rejimi üçün sabit ünvan yoxdur.
- Xəta baş verəndə bot sadəcə dayanır və kimsə onu əl ilə yenidən işə salana qədər gözləyir.
- Token və məlumat bazası şəxsi kompüterdə, digər proqramlarla bir yerdə saxlanır.
Adi bot üçün böyük server lazım deyil. 1 vCPU və 2 GB RAM olan VPS bir neçə botu eyni anda rahat işlədir. Lokasiya seçimində əsas sual botun hansı xidmətlərlə danışmasıdır: bot yalnız Telegram ilə işləyirsə, fərq azdır. Bot Azərbaycan IP-si tələb edən yerli API-lərə və ya saytlara müraciət edirsə, Bakıdakı server daha uyğundur.
Polling və webhook: hansını seçmək
| Polling (getUpdates) | Webhook | |
|---|---|---|
| Necə işləyir | Bot Telegram-dan daim "yeni mesaj var?" deyə soruşur | Telegram yeni mesajı sizin HTTPS ünvanınıza göndərir |
| Nə lazımdır | Yalnız internet çıxışı | Domen, SSL sertifikatı, açıq port |
| Portlar | Gələn port açmaq lazım deyil | Telegram yalnız 443, 80, 88 və 8443 portlarını qəbul edir |
| Kimə uyğundur | Əksər kiçik və orta botlar | Çox yüklü botlar, artıq veb serveri olan layihələr |
Webhook rejimində bot adətən Nginx arxasında lokal portda işləyir, Nginx isə HTTPS sorğularını ona ötürür. Bu, bir az daha çox qurulum tələb edir, amma bot boş vaxtda Telegram-a sorğu göndərmir və yük artanda daha yaxşı miqyaslanır.
Başlanğıc üçün polling ən sadə yoldur. Bir vacib qayda: eyni token ilə iki nüsxə polling edə bilməz. Bot həm noutbukda, həm serverdə işləyirsə, Telegram 409 Conflict xətası qaytarır. Serverə köçəndən sonra lokal nüsxəni dayandırın. Webhook aktiv olan botda da getUpdates işləmir.
Botu serverə köçürmək: addım-addım
1. Serveri hazırlayın
Bot üçün ayrıca, girişi olmayan sistem istifadəçisi yaradın. Bot sındırılsa belə, təcavüzkar root hüququ əldə etməyəcək:
sudo apt update
sudo apt install -y python3-venv
sudo useradd --system --create-home --home-dir /opt/mybot --shell /usr/sbin/nologin botuser
Virtual mühit yaradın və kitabxananı quraşdırın (nümunədə python-telegram-bot):
sudo -u botuser python3 -m venv /opt/mybot/venv
sudo -u botuser /opt/mybot/venv/bin/pip install python-telegram-bot
2. Bot kodu
sudo -u botuser nano /opt/mybot/bot.py ilə faylı yaradın:
import os
from telegram.ext import Application, CommandHandler
async def start(update, context):
await update.message.reply_text("Salam! Bot serverdə işləyir.")
def main():
app = Application.builder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
if __name__ == "__main__":
main()
Diqqət edin: token kodun içində yazılmayıb, mühit dəyişənindən oxunur. Kodu Git-ə yükləsəniz də token sızmayacaq.
Hazır botunuz varsa, faylları kompüterdən serverə scp ilə köçürün və sahibini dəyişin. Layihədə requirements.txt varsa, asılılıqları da ondan quraşdırın:
scp bot.py requirements.txt istifadeci@SERVER_IP:/tmp/
sudo mv /tmp/bot.py /tmp/requirements.txt /opt/mybot/
sudo chown botuser:botuser /opt/mybot/bot.py /opt/mybot/requirements.txt
sudo -u botuser /opt/mybot/venv/bin/pip install -r /opt/mybot/requirements.txt
Birinci əmr öz kompüterinizdə, qalanları serverdə icra olunur.
3. Tokeni ayrıca faylda saxlayın
sudo nano /etc/mybot.env
BOT_TOKEN=123456789:BURAYA_BOTFATHER_TOKENI
sudo chown root:root /etc/mybot.env
sudo chmod 600 /etc/mybot.env
Faylı yalnız root oxuyur. systemd onu xidməti işə salmazdan əvvəl oxuyub dəyişəni prosesə ötürür.
4. systemd xidməti
sudo nano /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=botuser
WorkingDirectory=/opt/mybot
EnvironmentFile=/etc/mybot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/mybot/venv/bin/python /opt/mybot/bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
systemctl status mybot
Restart=always bot çökəndə 5 saniyə sonra onu yenidən işə salır, enable isə server yenidən başlayanda botun avtomatik qalxmasını təmin edir. systemd-nin digər imkanları üçün systemd ilə avtomatik xidmətlər yazısına baxın.
Loglar, yeniləmə və nəzarət
journalctl -u mybot -f
journalctl -u mybot --since "1 hour ago"
sudo systemctl restart mybot
Birinci əmr logları canlı göstərir, ikincisi son bir saatı. PYTHONUNBUFFERED=1 sayəsində print çıxışı jurnala gecikmədən düşür. Kodu yenilədikdən sonra sadəcə xidməti yenidən başladın.
Botunuz Node.js ilə yazılıbsa, eyni unit faylında ExecStart sətrini /usr/bin/node /opt/mybot/index.js kimi dəyişmək kifayətdir. Alternativ olaraq PM2 ilə Node.js prosesini idarə etmək də mümkündür.
Token təhlükəsizliyi
- Token botun parolu deməkdir: onu bilən hər kəs botunuzun adından mesaj göndərə bilər.
- Token sızıbsa, @BotFather-də
/revokeəmri ilə köhnəsini ləğv edib yenisini alın, sonra/etc/mybot.envfaylını yeniləyin. - "Botunuz bloklanacaq, tokeni təsdiqləyin" kimi mesaj və məktublar saxtakarlıqdır. Telegram heç vaxt tokeni soruşmur. Komandanızı belə hallara hazırlamaq üçün fişinq e-poçtlarından qorunma təlimatından istifadə edin.
Tez-tez verilən suallar
Bir serverdə neçə bot işlədə bilərəm?
Hər botun öz istifadəçisi, qovluğu və unit faylı olmaqla bir neçəsini. Sadə botlar az yaddaş tələb edir, ona görə əsas məhdudiyyət botların öz məntiqidir.
Bot cavab vermir, haradan başlamalı?
systemctl status mybot və journalctl -u mybot -n 50 ilə son xətaları oxuyun. Ən çox səbəb səhv token, 409 Conflict (ikinci nüsxə) və ya çatışmayan kitabxanadır.
Bot hər şeyi avtomatlaşdırmaq üçün yeganə yoldurmu?
Xeyr. Sadə bildirişlər üçün kod yazmadan n8n ilə iş proseslərini avtomatlaşdırmaq daha sürətli ola bilər.
Eyni serverdə oyun serveri də saxlamaq olar?
Olar, amma oyun serveri çox RAM və CPU istifadə edir. Resursları əvvəlcədən hesablayın, bu barədə Minecraft və oyun serveri üçün VPS yazısında yazmışıq.
Botunuzun dayanmadan işləməsi üçün kiçik, amma daimi server kifayətdir: VPS Starter sifariş edin və ya bütün VPS paketlərinə baxın. Qurulum zamanı sualınız olarsa, Hostinq.az dəstəyi 24/7 Azərbaycan dilində kömək edir.