Bot, dizüstü bilgisayarın kapağı kapanana kadar her mesaja yanıt verir; sonrasında kullanıcılar yanıt alamaz. Küçük bir VPS, ayda birkaç dolara bu sorunu çözer. Telegram botu için en iyi VPS, botun güncellemeleri nasıl aldığına bağlıdır: ya bunları Telegram'dan ister ya da Telegram bota gönderir.
Bu seçim, gereken portları ve sertifikayı, ayrıca genel IPv4 bağlantısının gerekli olup olmadığını belirler.
Kısa Versiyon
- VPS üzerinde tek bir bot için long polling kullanın. Alan adı, sertifika veya açık port gerektirmez.
- Webhook'lar 443, 80, 88 veya 8443 portunda HTTPS ve genel bir IPv4 adresi gerektirir. Telegram, webhook'ları IPv6 üzerinden iletmez.
- 512 MB of RAM is a workable start for one bot with no local database.
- Botu systemd ile veya zaten konteyner kullanıyorsanız Docker'ın yeniden başlatma ilkesiyle çalışır durumda tutun.
- Sağlayıcıyı yalnızca liste fiyatına göre değil, IPv4 ve RAM payını dikkate alarak seçin.
Polling mi Webhook mu: Sunucu Gereksinimlerini Belirleyen Seçim
Telegram botu güncellemeleri iki yoldan biriyle alır. Long polling'de bot getUpdates çağrısı yapar; Telegram, güncelleme gelene veya zaman aşımı dolana kadar isteği açık tutar. Böylece her bağlantı sizin sunucunuzdan başlar. Webhook'ta ise setWebhook ile bir kez URL kaydedersiniz ve Telegram her güncellemeyi HTTPS üzerinden bu adrese POST isteğiyle gönderir.
| Gereksinim | Long Polling (getUpdates) |
Webhook (setWebhook) |
|---|---|---|
| Gelen bağlantı portu | Yok; yalnızca giden istekler | 443, 80, 88 veya 8443 üzerinde HTTPS |
| Genel IPv4 | Gerekmez | Gerekir; webhook'larda IPv6 desteklenmez |
| Alan adı ve sertifika | Gerekmez | Sertifika gerekir; genellikle alan adı kullanılır, ancak kendinden imzalı sertifika CN olarak IP'yi kullanabilir |
| İşlem | Sürekli çalışır | HTTPS isteklerine sürekli yanıt verir |
Webhook sütunu Telegram'ın webhook gereksinimlerine dayanır.
Botunuzun hangi yöntemi kullandığını görmek için Bot API'ye sorun:
curl "https://api.telegram.org/bot<YOUR_TOKEN>/getWebhookInfo"
Yanıtta "url":"" varsa yapılandırılmış webhook yoktur; bot long polling kullanabilir. grammY'deki bot.start() varsayılan olarak long polling yapar; python-telegram-bot ise run_polling() veya run_webhook() kullanır.
Kendi VPS'inde çalışan tek bir bot için polling seçerdim; bu aynı zamanda grammY'nin varsayılan önerisidir. Sunucuda zaten bir ters proxy (HTTPS isteklerini botunuza ileten web sunucusu) varsa, birkaç bot aynı HTTPS uç noktasını paylaşıyorsa veya sunucusuz bir platform kullanılıyorsa webhook avantajlıdır. Bu yolda Caddy, sertifikayı alıp yeniler; cron görevi gerekmez.
Kısa bir kesinti mesajları kaybetmeden geciktirir. Bot API'nin güncelleme kurallarına göre Telegram, bot hangi yöntemi kullanırsa kullansın güncellemeleri alana kadar en fazla 24 saat saklar ve vazgeçmeden önce başarısız webhook isteklerini tekrarlar.
Webhook portunu doğrudan kendisi kullanıyorsa bu portu Telegram'ın yayımladığı kaynak adres aralıklarıyla sınırlayın. Port 443, başka sitelere de hizmet veren bir ters proxy tarafından paylaşılıyorsa kısıtlamayı yalnızca webhook yoluna uygulayın veya diğer tüm HTTPS trafiğini engellemek yerine Telegram'ın gizli token'ını kullanın. Webhook kılavuzu iki kaynak adres aralığı listeler ve bunların değişebileceği konusunda uyarır. Ana makinenin güvenlik duvarı olarak UFW kullanıldığında:
sudo ufw allow 22/tcp # keep SSH open before you enable the firewall
sudo ufw allow proto tcp from 149.154.160.0/20 to any port 443
sudo ufw allow proto tcp from 91.108.4.0/22 to any port 443
sudo ufw allow 80/tcp # if your HTTPS setup uses HTTP validation or redirects HTTP to HTTPS
sudo ufw enable
Webhook 80, 88 veya 8443 portunu dinliyorsa 443 değerini değiştirin. Bu kurallar doğrudan ana makinede çalışan botu korur. Docker'ın güvenlik duvarı belgeleri yayımlanmış bir portun UFW'yi atladığını söyler; bu nedenle -p 443:443 ile başlatılan webhook konteyneri herkese açık kalır. Ayrıca setWebhook içinde bir secret_token ayarlayın. Telegram bunu her isteğin X-Telegram-Bot-Api-Secret-Token başlığında iletir; işleyiciniz de bu token'ı içermeyen istekleri reddeder.
Botu Çalışır Durumda Tutmak: systemd veya Docker
Telegram botunu 7/24 çalıştırmak, çökme ve yeniden başlatmalardan sonra onu tekrar başlatmayı gerektirir. VPS üzerinde bunu systemd yapar; bot bir imaj olarak dağıtılıyorsa Docker da kullanılabilir.
systemd birimi, başlatma sistemine programı nasıl başlatıp yeniden başlatacağını söyleyen kısa bir yapılandırma dosyasıdır. /etc/systemd/system/telegram-bot.service dosyasını oluşturun:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/bot
EnvironmentFile=/opt/bot/.env
ExecStart=/opt/bot/venv/bin/python bot.py
# Node: ExecStart=/usr/bin/node bot.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Token'ı kodun dışında tutmak için proje klasöründeki .env dosyasına BOT_TOKEN=... olarak yazın ve os.environ["BOT_TOKEN"] ile okuyun (Node: process.env.BOT_TOKEN). Ardından projeyi yerine kopyalayıp başlatın:
sudo mkdir -p /opt/bot
sudo cp -r ~/your-bot/. /opt/bot/ # your project, after git clone or scp from your machine; include .env and requirements.txt
sudo apt install -y python3-venv # Debian/Ubuntu
sudo useradd --system --no-create-home bot
sudo chown -R bot:bot /opt/bot
sudo -u bot python3 -m venv /opt/bot/venv
sudo -u bot /opt/bot/venv/bin/pip install -r /opt/bot/requirements.txt
# Node: skip the venv and pip commands above, then run:
cd /opt/bot && sudo -u bot npm ci
sudo chmod 600 /opt/bot/.env
sudo systemctl daemon-reload
sudo systemctl enable --now telegram-bot
systemctl status telegram-bot # look for: Active: active (running)
sudo journalctl -u telegram-bot -f # follow the bot's logs
Restart=always, bot normal biçimde sonlansa da çökse de yeniden başlatır; systemd.service kılavuzuna göre on-failure normal sonlanmaları atlar. RestartSec=5 denemeler arasına süre koyar; WantedBy=multi-user.target ve enable birlikte botu açılışta başlatır. Sürekli yeniden başlıyorsa sudo journalctl -u telegram-bot -n 50 hata izini gösterir. Önce BOT_TOKEN değerinin eksik olup olmadığını kontrol edin.
Docker karşılığı tek bir bayraktır:
docker run -d --name telegram-bot --restart unless-stopped --env-file .env your-bot-image
docker logs -f telegram-bot
Compose'da satır restart: unless-stopped şeklindedir. Docker'ın yeniden başlatma ilkesi belgelerine göre konteyner, işlem sonlandığında veya daemon yeniden başladığında geri gelir; siz kendiniz durdurduktan sonra değil. Docker'ın kendisi açılışta başlıyorsa bu, yeniden başlatmaları da kapsar; Debian ve Ubuntu'da varsayılan davranış budur. Diğer sistemlerde sudo systemctl enable docker.service çalıştırın.
Benim kuralım: küçük bir sunucuda tek bir betik için systemd kullanın; bellekte ek daemon olmasın. Zaten imaj oluşturuyor veya başka konteynerler çalıştırıyorsanız Docker kullanın ve daemon'ın RAM'in bir bölümünü tükettiğini hesaba katın.
Bu araçların hiçbiri botun devre dışı kaldığını bildirmez. İkinci bir sunucudaki Uptime Kuma push izleyicisi bunu yapabilir. Bot, zamanlayıcıyla izleyicinin URL'sini çağırır; çağrılar durduğunda Uptime Kuma sizi Telegram'dan uyarır.
Ücretsiz Barındırma ve Ev Sunucuları Nerede Yetersiz Kalır?
Render, 15 dakika gelen trafik olmadığında ücretsiz web hizmetini durdurur; Render'ın ücretsiz katman belgeleri uyanmanın yaklaşık bir dakika sürdüğünü belirtir. Polling botu gelen trafik almadığından durdurulur. Webhook botunu Telegram'ın POST isteği uyandırır; sessiz dönemlerden sonra soğuk başlangıç yaşanır. Dolayısıyla Telegram botu için ücretsiz barındırmanın işe yarayıp yaramaması botun kullandığı yönteme bağlıdır.
grammY kılavuzu sunucusuz platformları webhook'lar için uygun seçenekler arasında sayar; long polling ise günün her saati çalışan bir makine gerektirir. Fly.io kullanıma göre faturalandırır ve kayıtlı kart gerektirir.
Raspberry Pi veya eski bir bilgisayar; makine, elektrik ve bağlantı çalıştığı sürece polling botunu çalıştırabilir. Evden webhook kullanmak için ayrıca genel bir adres ve port yönlendirme gerekir. Hobi botu için bu ücretsiz yolların ikisi de yeterli olabilir.
VPS, sabit aylık fiyatla iki yönteme de uygundur.
Telegram Botu İçin Beş VPS Sağlayıcısının Karşılaştırması
Tablo, Telegram botu barındırmak için beş ücretli giriş planını Ekim 2026 itibarıyla geçerli, vergi öncesi ilan edilmiş aylık fiyatlarla karşılaştırır. Varsa promosyon fiyatları belirtilmiştir.
| Sağlayıcı | Giriş Planının Özellikleri | Aylık Fiyat | Genel IPv4 | Faturalandırma |
|---|---|---|---|---|
| Cloudzy | 1 vCPU (AMD EPYC), 512 MB DDR5, 20 GB NVMe, 1 TB veri aktarımı | $2.48 promosyon ($4.95 normal) | IPv6 ile birlikte dâhil | Saatlik veya aylık |
| DigitalOcean | 1 vCPU, 512 MiB, 10 GiB SSD, 500 GiB veri aktarımı | $4'ten itibaren | Dâhil | Saniyelik, aylık fiyatla sınırlı |
| Vultr | 1 vCPU, 512 MB, 10 GB SSD, 512 GB veri aktarımı | $2.50'den itibaren yalnızca IPv6; $3.50'den itibaren IPv4 ile | Yalnızca $3.50 planında | Saatlik veya aylık |
| Hetzner (Almanya/Finlandiya) | 2 vCPU, 4 GB, 40 GB SSD, 20 TB veri aktarımı | KDV hariç €5.49'dan itibaren | Ek ücret, KDV hariç aylık €0.50'den itibaren (IPv6 ücretsiz) | Saatlik, aylık fiyatla sınırlı |
| Linode (Akamai) | 1 vCPU, 1 GB, 25 GB depolama, 1 TB veri aktarımı | $5'ten itibaren | Dâhil | Saatlik veya aylık |
Vultr'ın yalnızca IPv6 planında IPv4 yoktur; Hetzner'ın fiyatı ise IPv4 adresini içermez. Bu adres olmadan ikisi de webhook kabul edemez.
api.telegram.org bir IPv6 adresine sahip olduğundan polling botu yalnızca IPv6 ile çalışabilir. Paket depoları, Git barındırıcınız ve çağırdığı her API dâhil, eriştiği diğer her şeyin de IPv6 adresi olmalıdır. Seçim yapmadan önce her sunucuyu kontrol edin:
dig +short AAAA api.telegram.org
dig +short AAAA github.com
dig +short AAAA pypi.org # repeat for every host your bot or its installs reach
Boş yanıt, ilgili sunucunun IPv6 adresi olmadığı anlamına gelir.
Telegram Botu İçin 512 MB Yeterli mi?
Yerel veritabanı olmayan tek bir botu 512 MB ile başlatırdım. python-telegram-bot belgelerinde bellek gereksinimi belirtilmez. Belirleyici olan, sunucuyu paylaşan bileşenlerdir: işletim sistemi, kullanılıyorsa Docker daemon'ı ve yerel veritabanı. Kullanımı ölçün.
free -m # "available" is your headroom; the Swap row shows swap use
ps -o rss,cmd -p "$(systemctl show -p MainPID --value telegram-bot)" # bot's resident memory, in KB
docker stats --no-stream # per-container memory, if the bot runs in Docker
journalctl -k | grep -i "out of memory" # kernel OOM kills
Bellek yetersizliği nedeniyle sonlandırma (OOM kill), çekirdeğin RAM boşaltmak için bir işlemi bitirmesidir. systemd botu yeniden başlattığından, günlükteki bu satır elinizdeki tek kanıt olabilir. OOM sonlandırmaları görüldüğünde, takas alanı sürekli kullanıldığında veya yerel veritabanı ya da ikinci bir bot eklemeden önce 1 GB'a geçin.
Hangisini Seçmeli?
Tek bir bot için genel IPv4 içeren 512 MB planı seçerdim. Sonrasında sağlayıcı seçimi fiyat, kaynak payı ve kullanıcılarınızın konumuna bağlıdır.
- Şu anki en düşük aylık fiyat: %50 promosyonu boyunca $2.48 ile Cloudzy; IPv4 ve IPv6 dâhil.
- IPv4 ile şu anki en düşük fiyat: promosyon boyunca $2.48 ile Cloudzy. Özel IPv4 ve IPv6 dâhil.
- 1 GB of headroom for Docker or a small database: Linode, from $5 a month.
- Birkaç bot veya veritabanı, Avrupa'daki kullanıcılar: plan stokta olduğunda bu tabloda avro başına en fazla kaynağı Hetzner sunar (Ekim 2026'da mevcut değil olarak listelenmişti). Webhook için IPv4 ücretini ekleyin.
- 512 MB'da daha fazla disk ve veri aktarımı: Cloudzy. 512 MB planları arasında en fazla depolama (10 yerine 20 GB NVMe) ve aktarımı (yaklaşık 500 GB yerine 1 TB) sunar; IPv4 ve IPv6 dâhildir. Cloudzy, mevcut promosyon fiyatıyla bu karşılaştırmadaki diğer giriş planlarından da ucuzdur.
Mevcut promosyon fiyatıyla Cloudzy, bu karşılaştırmadaki en düşük aylık fiyatı diğer 512 MB planlarından daha fazla depolama ve veri aktarımıyla birleştirir. Cloudzy'nin 512 MB planı saatlik faturalandırılır ve 14 günlük para iade garantisi sunar; böylece karar vermeden önce botu birkaç gün üzerinde çalıştırabilirsiniz. Kullanıcılarınıza en yakın konumu seçin, Cloudzy Linux VPS kurun ve yukarıdaki systemd birimini ekleyin.
Sıkça Sorulan Sorular
Telegram Botu Çalıştırabilen En Ucuz VPS Hangisi?
Ekim 2026 itibarıyla Cloudzy'nin 512 MB planı, %50 promosyonu boyunca aylık $2.48 ile beş planın en ucuzudur; özel IPv4 ve IPv6 dâhildir. Normal fiyatı aylık $4.95'tir. Vultr'ın yalnızca IPv6 sunan seçeneği biraz daha yüksek bir fiyattan, $2.50'den başlar.
Telegram Webhook'ları Neden HTTPS Gerektirir?
Webhook kılavuzuna göre Telegram, porttan bağımsız olarak webhook'larda SSL/TLS gerektirir. Düz HTTP'yi reddeder; TLS 1.2 ve daha yeni sürümleri kabul eder. TLS olmadan her POST, kullanıcılarınızın mesajlarını şifrelenmemiş olarak taşırdı. Let's Encrypt sertifikası uygundur; setWebhook ile yüklenen kendinden imzalı sertifika da kullanılabilir.
Telegram Botu 512 MB RAM ile Çalışabilir mi?
Yerel veritabanı olmayan tek bir bot için genellikle evet. Çekirdek günlüğünde bellek yetersizliği sonlandırmalarını izleyin; bunlar ortaya çıkarsa veya veritabanı eklediğinizde 1 GB'a geçin.
Telegram Botunu Yeniden Başlatma Sonrasında Nasıl Çalışır Tutabilirim?
systemd hizmetini sudo systemctl enable --now telegram-bot ile etkinleştirin veya konteyneri --restart unless-stopped ile çalıştırıp Docker'ın açılışta başlaması için docker.service hizmetini etkinleştirin.
Telegram Botlara IP Adresine Göre Hız Sınırı Uygular mı?
Telegram'ın bot sınırları SSS'si, sınırları bot ve sohbet başına açıklar; yeni bir sunucuya geçmek bu sınırları aşma yöntemi olarak görülmemelidir. Sınır aşıldığında API, retry_after değeriyle HTTP 429 döndürür. Tekrar denemeden önce belirtilen saniye kadar bekleyin.
Telegram Botu İçin Hangi Sunucu Bölgesini Seçmeliyim?
Kullanıcılarınıza ve botunuzun çağırdığı hizmetlere en yakın konumu seçin; ardından her adaydan bağlantı süresini curl -o /dev/null -s -w '%{time_connect}\n' https://api.telegram.org ile ölçün.
Tartışma
Yorumlar
Tartışmaya katılmak için giriş yapın.