Telegram botunu nereye yerleştirmeli: Hosting seçiminden ilk çalıştırmaya
Telegram botunun kararlı çalışması için Linux tabanlı (örneğin Ubuntu) bir VPS, yüklü Python ve otomatik başlatma servisi (systemd) yapılandırması en uygun seçenektir. Bu yaklaşım tam kontrol, düşük maliyet (ayda 3–5 dolardan başlayan) ve HTTPS üzerinden Webhook kullanma imkânı sağlar. Yönetim gerektirmeyen basit projeler için PaaS platformları (Render, Railway), yüksek yük altındaki sistemler için ise konteynerleştirme (Docker) veya Serverless fonksiyonları uygundur.
Barındırma yönteminin seçimi; yük miktarına, bütçeye ve sistem yönetimi becerilerinize bağlıdır. Aşağıda ana seçenekleri, donanım gereksinimlerini ele alacak ve en popüler ile güvenilir çözüm olan klasik VPS kurulumu için hazır bir rehber sunacağız.
Kısa cevap: Yeni başlıyorsanız veya fiyat-performans dengesi arıyorsanız, bir VPS (1 çekirdek, 1–2 GB RAM) alın. İçine Ubuntu ve Python kurun, sanal ortamı ayarlayın ve botu systemd üzerinden çalıştırın. Webhook için SSL sertifikatını unutmayın.
Barındırma yöntemlerinin karşılaştırılması
Sunucu kiralamadan önce mimariye karar verin. İşte üç ana yol:
1. VPS / VDS (Sanal Özel Sunucu)
Klasik seçenek. Root erişimine sahip "çıplak" bir sunucu elde edersiniz.
- Avantajlar: Tam kontrol, sabit fiyat, aynı makinede birden fazla bot ve veritabanı barındırabilme.
- Dezavantajlar: Linux komut satırıyla çalışmayı, güvenliği ve güncellemeleri ayarlamayı bilmek gerekir.
- Kimler için: Çoğu bireysel geliştirici ve küçük işletme için.
2. PaaS (Hizmet Olarak Platform)
Render, Railway, Heroku veya PythonAnywhere gibi platformlar. Kodu genellikle doğrudan GitHub'dan yüklersiniz.
- Avantajlar: Linux, SSH ve güvenlik duvarları hakkında düşünmenize gerek kalmaz. Hızlı başlangıç.
- Dezavantajlar: Ölçeklendirmede daha pahalı, ücretsiz planlarda kısıtlamalar (bot "uykuya" geçer), ağ sorunlarını hata ayıklamak daha zordur.
- Kimler için: Prototipler, eğitim projeleri veya yönetim işlerine kesinlikle bulaşmak istemeyenler için.
3. Serverless (AWS Lambda, Cloud Functions)
Kod yalnızca Telegram'dan mesaj alındığı anda çalıştırılır.
- Avantajlar: Sadece çalışma süresi kadar ödeme, sonsuz ölçeklenebilirlik.
- Dezavantajlar: Karmaşık kurulum (API Gateway gerekir), "soğuk başlama" sorunu (ilk yanıtta gecikme), fonksiyon çalışma süresi sınırı.
- Kimler için: Seyrek istek alan veya ani aktivite artışları yaşayan botlar için.
Karşılaştırmalı tablo
| Parametre | VPS (Linux) | PaaS (Render/Railway) | Serverless |
|---|---|---|---|
| Başlangıç zorluğu | Orta | Düşük | Yüksek |
| Maliyet | Düşük (ayda 3–10 $) | Orta/Yüksek | Çok düşük (düşük yükte) |
| Kontrol | Tam | Sınırlı | Minimal |
| Güvenilirlik | Size bağlı | Yüksek | Yüksek |
| Teknolojiler | Herhangi biri | Platforma bağlı | Sağlayıcıya bağlı |
Sunucu gereksinimleri
Çoğu metin tabanlı bot için aşırı güçlere ihtiyaç yoktur.
- CPU: Günde binlerce mesajı işlemek için 1 çekirdek (vCPU) yeterlidir.
- RAM: Minimum 512 MB, önerilen 1 GB. Ağır kütüphaneler (örneğin görüntü işleme için) veya aynı sunucuda PostgreSQL veritabanı kullanıyorsanız 2 GB alın.
- Disk: 10–20 GB SSD. Loglar ve veritabanı az yer kaplar ancak sistem güncellemeleri için alana ihtiyaç vardır.
- İşletim Sistemi: Ubuntu 22.04 LTS veya 24.04 LTS, Debian 12. En iyi belgelenmiş dağıtımlardır.
Coğrafi konum tavsiyesi: Sunucuyu kullanıcılarınıza yakın bir bölgede veya Orta Avrupa'da (Frankfurt, Amsterdam) seçin. Bu, Telegram sunucularına olan ping'i düşürür ve bot yanıt hızını artırır.
Adım adım VPS kurulumu (Ubuntu + Python + systemd)
Bu, dağıtım için "altın standarttır". Rehber, zaten satın alınmış bir VPS'iniz ve SSH ile erişiminiz olduğunu varsayar.
Adım 1. Sistem hazırlığı
Sunucuya bağlanın ve paketleri güncelleyin:
sudo apt update && sudo apt upgrade -y
Gerekli araçları yükleyin: Python, pip, sanal ortam ve SSL için ters proxy olarak Nginx:
sudo apt install -y python3 python3-venv python3-pip nginx certbot python3-certbot-nginx git
Adım 2. Kodun dağıtımı
Proje için bir klasör oluşturun ve kodu klonlayın (veya SFTP ile yükleyin):
mkdir -p /opt/mybot
cd /opt/mybot
# Git'ten klonlama örneği
git clone https://github.com/yourusername/yourbot.git .
Bot bağımlılıklarını sistemden izole etmek için sanal ortam oluşturun ve etkinleştirin:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Token güvenliği: Bot token'ını asla kod içinde saklamayın! Ortam değişkenlerini kullanın. Proje klasöründe bir .env dosyası oluşturun ve içine BOT_TOKEN=tokeniniz ekleyin. .env dosyasını .gitignore listesine ekleyin.
Adım 3. systemd ile otomatik başlatma ayarı
Botun sürekli çalışmasını ve sunucu yeniden başlatıldığında veya çöktüğünde tekrar başlamasını sağlamak için bir servis oluşturun.
Servis dosyasını açın:
sudo nano /etc/systemd/system/mybot.service
Aşağıdaki yapılandırmayı yapıştırın (yolları ve kullanıcıyı düzenleyin):
[Unit]
Description=My Telegram Bot
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/mybot
Environment="PATH=/opt/mybot/venv/bin"
ExecStart=/opt/mybot/venv/bin/python bot.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Servisi başlatın ve otomatik başlatmaya ekleyin:
sudo systemctl daemon-reload
sudo systemctl enable mybot
sudo systemctl start mybot
Durumu şu komutla kontrol edebilirsiniz: sudo systemctl status mybot.
Adım 4. Webhook ve SSL ayarı (Nginx + Let's Encrypt)
Telegram, Webhook için HTTPS gerektirir. Ücretsiz sertifika almanın en kolay yolu Certbot'u Nginx ile birlikte kullanmaktır.
- Alan adınız için bir Nginx yapılandırması oluşturun (örneğin
bot.example.com):
sudo nano /etc/nginx/sites-available/bot.example.com
Örnek yapılandırma:
server {
listen 80;
server_name bot.example.com;
location / {
proxy_pass http://127.0.0.1:8080; # Botunuzun dinlediği port
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- Siteyi etkinleştirin:
sudo ln -s /etc/nginx/sites-available/bot.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
- SSL sertifikası alın:
sudo certbot --nginx -d bot.example.com
Certbot, Nginx yapılandırmasını otomatik olarak güncelleyerek HTTPS ekler ve 80. porttan yönlendirme yapar.
- Önemli: Telegram'a yeni webhook URL'sini bildirin:
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://bot.example.com/webhook
( /webhook yolu, bot kodunuzda ve Nginx'te ayarladığınız yol ile eşleşmelidir).
Dağıtım sırasında sık yapılan hatalar
-
Bot çöküyor ve ayağa kalkmıyor.
- Neden: systemd'de
Restartayarı yok veya kodda hata var. - Çözüm: Logları kontrol edin:
sudo journalctl -u mybot -f. Kodu düzeltin ve servisi yeniden başlatın.
- Neden: systemd'de
-
"Connection refused" hatası veya zaman aşımları.
- Neden: Güvenlik duvarı portları engelliyor veya bot yanlış arayüzü dinliyor.
- Çözüm: UFW'nin HTTP/HTTPS'e izin verdiğinden emin olun:
sudo ufw allow 'Nginx Full'. Önünde Nginx varsa botun dış IP yerine127.0.0.1dinlediğini kontrol edin.
-
Site açılıyor ama Webhook çalışmıyor.
- Neden: Bot kodundaki port ile Nginx yapılandırmasındaki port uyuşmazlığı veya kendinden imzalı sertifika (Telegram halka açık botlar için bunları kabul etmez).
- Çözüm: Sadece geçerli sertifikalar (Let's Encrypt) kullanın. Nginx loglarını kontrol edin:
/var/log/nginx/error.log.
-
Bellek sızıntısı.
- Neden: Global değişkenler zamanla büyüyor veya veritabanı bağlantıları kapatılmıyor.
- Çözüm: Profil oluşturucular kullanın, izleme ayarlayın (örneğin
htopveya basit bir RAM tüketim kontrol scripti).
SSS
Bot için özel bir IP adresine ihtiyacım var mı? Hayır, normal bir bot için hosting sağlayıcısının sunduğu paylaşımlı IP yeterlidir. Özel IP sadece toplu mesajlaşma planlıyorsanız ve e-posta da gönderiyorsanız spam listelerine girmekten korkuyorsanız gereklidir.
Hangisi daha iyi: Long Polling mi yoksa Webhook mu? Prodüksiyon ortamı için Webhook daha iyidir. Sunucu kaynaklarını korur (Telegram API'sini sürekli sorgulamanıza gerek kalmaz) ve daha hızlı çalışır. Long Polling yalnızca yerel geliştirme ve hata ayıklama için kullanışlıdır.
Kesinti olmadan botu nasıl güncellerim?
Systemd kullanıyorsanız: Yeni kodu yükleyin, sudo systemctl restart mybot komutunu çalıştırın. Kesinti 1–2 saniye sürer. Sıfır kesinti (Zero Downtime) için yük dengeleyiciler ve birden fazla bot örneği içeren daha karmaşık şemalar kullanılır.
Botu evde Raspberry Pi üzerinde barındırabilir miyim? Teknik olarak evet. Ancak sağlayıcınızdan "beyaz" statik bir IP almanız veya tünel ayarlamanız (Cloudflare Tunnel, Ngrok) gerekir. Ev interneti genellikle kararsızdır, bu nedenle ciddi projeler için önerilmez.