Linux & Sunucu Yönetimi

Telegram Botunu VPS'te 7/24 Çalıştırma (Python ve systemd ile)

4 min read
Telegram Botunu VPS'te 7/24 Çalıştırma (Python ve systemd ile)
Contents

Telegram botunuzu kendi bilgisayarınızda çalıştırıyorsanız, bilgisayar kapandığında, internet kesildiğinde ya da uyku moduna geçtiğinde botunuz da yanıt vermeyi bırakır. Kesintisiz bir bot için en pratik çözüm, botu bir VPS sunucuda çalıştırmaktır. Bu rehberde Python ile yazılmış bir botu Ubuntu veya Debian yüklü bir VPS'e taşıyıp systemd ile 7/24 çalışır hale getiriyoruz.

Neden VPS?

  • Kesintisiz çalışma: Sunucu veri merkezinde 7/24 açıktır.
  • Sabit IP ve hızlı bağlantı: Bot, Telegram sunucularına düşük gecikmeyle bağlanır.
  • Birden fazla bot: Küçük bir VPS'te bile birçok botu aynı anda çalıştırabilirsiniz.
  • Webhook desteği: Kendi alan adınız ve SSL sertifikanızla webhook kullanabilirsiniz.

Basit botlar için 1-2 GB RAM genellikle yeterlidir. Henüz sunucuya bağlanmayı bilmiyorsanız önce SSH ile VPS'e bağlanma rehberimizi okuyun.

1. Sunucuyu hazırlayın

Sistemi güncelleyin ve Python araçlarını kurun:

sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-venv python3-pip git -y

Bot için ayrı bir kullanıcı oluşturmak güvenlik açısından iyi bir alışkanlıktır:

sudo adduser --disabled-password --gecos "" botuser

2. Bot dosyalarını sunucuya taşıyın

Kodunuz GitHub gibi bir depoda ise doğrudan çekebilirsiniz:

sudo -u botuser git clone https://github.com/kullanici/botum.git /home/botuser/botum

Dosyalar bilgisayarınızdaysa SFTP (FileZilla, WinSCP) veya scp ile /home/botuser/botum klasörüne yükleyin. Ardından klasörün sahibini düzeltin:

sudo chown -R botuser:botuser /home/botuser/botum

3. Sanal ortam (venv) kurun

Güncel Ubuntu ve Debian sürümleri, sistem Python'una doğrudan pip install yapılmasını engeller. Doğru yöntem, bot için ayrı bir sanal ortam oluşturmaktır:

sudo -u botuser python3 -m venv /home/botuser/botum/venv
sudo -u botuser /home/botuser/botum/venv/bin/pip install -r /home/botuser/botum/requirements.txt

requirements.txt dosyanız yoksa kullandığınız kütüphaneyi doğrudan kurabilirsiniz, örneğin pip install python-telegram-bot veya pip install aiogram.

4. Bot anahtarını koddan ayırın

Bot anahtarını (token) kodun içine yazmak yerine bir ortam değişkeni dosyasında saklayın. Böylece kodu paylaştığınızda anahtarınız açığa çıkmaz:

sudo -u botuser nano /home/botuser/botum/.env
BOT_TOKEN=buraya_botfather_anahtariniz

Dosyayı yalnızca bot kullanıcısının okuyabileceği şekilde kısıtlayın:

sudo chmod 600 /home/botuser/botum/.env

Python kodunuzda anahtarı os.environ["BOT_TOKEN"] ile okuyabilirsiniz.

5. Önce elle deneyin

Servis oluşturmadan önce botun sunucuda sorunsuz açıldığını görün:

cd /home/botuser/botum
sudo -u botuser bash -c 'set -a; . ./.env; set +a; ./venv/bin/python bot.py'

Bot Telegram'da yanıt veriyorsa Ctrl+C ile durdurun ve bir sonraki adıma geçin.

6. systemd servisi oluşturun

systemd, Linux'un servis yöneticisidir. Botunuzu bir servise dönüştürdüğünüzde sunucu açıldığında otomatik başlar, çökerse kendiliğinden yeniden başlatılır.

sudo nano /etc/systemd/system/telegram-bot.service
[Unit]
Description=Telegram botu
After=network-online.target
Wants=network-online.target

[Service]
User=botuser
WorkingDirectory=/home/botuser/botum
EnvironmentFile=/home/botuser/botum/.env
ExecStart=/home/botuser/botum/venv/bin/python bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Servisi etkinleştirip başlatın:

sudo systemctl daemon-reload
sudo systemctl enable --now telegram-bot
sudo systemctl status telegram-bot

Çıktıda active (running) görüyorsanız botunuz artık 7/24 çalışıyor.

7. Kayıtları izleyin ve güncelleyin

Botun çıktılarını ve hata mesajlarını canlı izlemek için:

sudo journalctl -u telegram-bot -f

Kodda değişiklik yaptıktan sonra botu yeniden başlatmanız yeterlidir:

sudo systemctl restart telegram-bot
KomutNe yapar?
systemctl status telegram-botBotun çalışıp çalışmadığını gösterir
systemctl restart telegram-botBotu yeniden başlatır
systemctl stop telegram-botBotu durdurur
journalctl -u telegram-bot -n 100Son 100 kayıt satırını gösterir

Polling mi, webhook mi?

  • Polling: Bot, Telegram'a düzenli aralıklarla "yeni mesaj var mı?" diye sorar. Kurulumu en kolay yöntemdir; alan adı veya SSL gerekmez.
  • Webhook: Telegram, yeni mesajları doğrudan sizin sunucunuza gönderir. Daha verimlidir ama bir alan adı ve HTTPS gerektirir. Alan adı bağlamak için alan adını VPS'e yönlendirme yazımıza bakabilirsiniz.

Çoğu bot için polling ile başlamak yeterlidir.

Sık karşılaşılan sorunlar

  • "externally-managed-environment" hatası: Paketleri sistem Python'una kuruyorsunuz. 3. adımdaki sanal ortamı kullanın.
  • Bot açılıp hemen kapanıyor: journalctl -u telegram-bot -n 50 ile hata mesajını okuyun. Çoğu zaman eksik kütüphane ya da hatalı anahtardır.
  • "Conflict: terminated by other getUpdates request": Aynı bot aynı anda iki yerde çalışıyor. Bilgisayarınızdaki kopyayı kapatın.

Sonuç

Birkaç komutla botunuzu kesintisiz çalışan bir servise dönüştürebilirsiniz. Sunucunuzu korumak için yeni VPS'te ilk güvenlik ayarları rehberimizi de uygulamayı unutmayın.

Deploy your own VPS in minutes

Pay with Bitcoin, USDT and 100+ cryptocurrencies; setup is automatic and your access details arrive in your panel instantly.

Start Free
Share: Telegram WhatsApp X