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
| Komut | Ne yapar? |
|---|---|
systemctl status telegram-bot | Botun çalışıp çalışmadığını gösterir |
systemctl restart telegram-bot | Botu yeniden başlatır |
systemctl stop telegram-bot | Botu durdurur |
journalctl -u telegram-bot -n 100 | Son 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 50ile 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.




