Yaz sıcağı — her şey eriyor, fiyatlarımız bile.−25%31 Ağustos'a kadar her yıllık planda −%25Planları gör
EQVPS
Hemen başla

Bir Telegram botunu VPS üzerinde 7/24 çalıştır: aiogram, systemd, polling vs webhook

4 Tem 2026 · 5 dk okuma · EQVPS Team

aiogram ile bir Telegram botu yazdın, yerelde test ettin ve çalışıyor. Şimdi dizüstünü kapatınca uyumayan bir yerde yaşaması gerekiyor. Küçük bir VPS doğal evi — ama bir SSH oturumundaki python bot.py ile çökmeler, yeniden başlatmalar ve bağlantının kopması boyunca gerçekten ayakta kalan bir bot arasında bir uçurum var.

Bu, üretim sürümü: bir virtualenv, kodundan uzak tutulan token, botu kendi kendine dirilten bir systemd servisi ve herkesin sonunda sorduğu soruya net bir cevap — polling mi webhook mi?

Neden dizüstünde çalıştırmamalısın

Bir botun Telegram'a istikrarlı bir dışa dönük bağlantısı gerekir. Dizüstün uyur, güncellemeler için yeniden açılır ve ağlar arasında zıplar — bunların her biri botu düşürür ve kullanıcılar bir sessizlik duvarına toslar. Bir VPS o bağlantıyı günün her saati tutar. Onu makinenden taşımanın bütün nedeni budur ve aynı neden bir Discord botunun da bir sunucuya ait olmasının nedenidir.

Minimal bir botla mümkün olan en hızlı "çevrim içine al" yolunu istiyorsan, Telegram botu barındırma anlatımı bunu kapsar. Bu yazı bir kademe daha derine iner: aiogram, güvenli token yönetimi ve ne zaman ölçeklendireceğini bilmek.

Bot, bir virtualenv içinde

SSH ile bağlan ve botu kendi venv'inde izole tut — paketleri sistem geneline kurma, bu sonradan yükseltmeleri ve temizliği bir kâbusa çevirir:

sudo apt update && sudo apt install -y python3-venv
mkdir ~/tgbot && cd ~/tgbot
python3 -m venv venv && source venv/bin/activate
pip install -U aiogram

Token'ını sabit-kodlanmış bir dizeden değil, ortamdan okuyan minimal bir aiogram 3 botu:

# bot.py
import asyncio, logging, os
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import CommandStart

logging.basicConfig(level=logging.INFO)
dp = Dispatcher()

@dp.message(CommandStart())
async def start(m: Message):
    await m.answer("Alive and running on a VPS.")

async def main():
    bot = Bot(os.environ["BOT_TOKEN"])
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Token'ı kodundan uzak tut

BotFather token'ını asla bot.py içine yapıştırma — herkese açık bir depoya tek bir push ve sızdı demektir. Bunun yerine yalnızca root'un okuyabileceği bir env dosyasına koy:

sudo tee /etc/tgbot.env >/dev/null <<'EOF'
BOT_TOKEN=123456:your-token-from-botfather
EOF
sudo chmod 600 /etc/tgbot.env

Sızan bir token, BotFather'da bir /revoke ile düzeltilir — ama paylaşımlı bir makinede sızan başka herhangi bir şey daha kötüdür. Bot için ayrılmış bir VPS, token için günlük dizüstünden dürüstçe daha güvenli bir evdir: sızarsa tüm kurulumunu değil, tek bir token'ı döndürürsün.

Onu ayakta tutan kısım: systemd

Çalışan bir botu, çalışır kalan bir bottan ayıran şey budur. Servisi oluştur:

# /etc/systemd/system/tgbot.service
[Unit]
Description=Telegram bot (aiogram)
After=network-online.target
Wants=network-online.target

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

[Install]
WantedBy=multi-user.target

Onu root olarak değil, root olmayan bir kullanıcı olarak (yukarıda botuser) çalıştır — bot bir gün ele geçirilirse onu kutuda sıkışmış istersin. Sonra:

sudo systemctl daemon-reload
sudo systemctl enable --now tgbot

RestartSec=3 ile Restart=always, bir çökmenin — Telegram'dan kötü bir güncelleme, işlenmemiş bir istisna, bir OOM — botu sen fark edene dek ölü bırakmak yerine üç saniyede geri getirmesi demektir. Onu canlı izle:

journalctl -u tgbot -f

Bütün loglama kurulumun bu. Döndürülecek log dosyası yok, ekstra araç yok — journald zaten hallediyor.

Kesinti dramı olmadan güncelleme

Kodu değiştirdiğinde veya aiogram'ı yükselttiğinde:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # kütüphaneyi yükseltiyorsan
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # temiz geri geldiğini doğrula

Yeniden başlatma botu bir iki saniye kırpar. Bir polling botu için bu kullanıcılara görünmez — Telegram güncellemeleri kuyruğa alır ve bot yeniden bağlanınca teslim eder.

Polling vs webhook — dürüst sürüm

İnsanların fazla düşündüğü karar bu. İşte sade hâli:

Polling (start_polling, yukarıdaki kodun kullandığı) botun uzun ömürlü bir bağlantı üzerinden Telegram'a "yeni bir şey var mı?" diye sormasını sağlar. Dışa dönük internetten başka hiçbir şeye ihtiyacı yoktur — alan adı yok, TLS yok, açık gelen port yok. NAT arkasında gayet iyi çalışır. Botların ezici çoğunluğu için bu doğrudur ve burada durmalısın.

Webhook ise Telegram'ın güncellemeleri sana itmesini sağlar; bu da herkese açık bir HTTPS ucunu açığa çıkarman gerektiği anlamına gelir. Bu, bir alan adı ve erişilebilir bir gelen port gerektirir — yani ya özel bir herkese açık IP ya da önünde bir ters vekil. Daha çok kurulum, bozulacak daha çok şey. Ödülü, büyük ölçekte daha düşük gecikme ve daha az ek yüktür — binlerce eşzamanlı kullanıcı, ağır güncelleme hacmi.

Pratik kural: bir NAT planında polling ile başla. Webhook'a yalnızca polling'i gerçekten aştığında geç — ve geçersen, o zaman bir özel IP yerini hak eder, çünkü o gelen HTTPS ucuna ihtiyacın vardır.

Çalıştırma maliyeti

Bir polling botu hafiftir. Telegram'ın uzun-yoklamasında boşta bekler ve mesajlara tepki verir, yani kutu çoğunlukla bekler:

Kayıt yalnızca e-posta ile olur ve Base veya Ethereum üzerinde USDC ya da USDT ile ödersin — kart yok, kimlik yok. Kart da çalışır ama giriş rampasının ~27 $ minimumu vardır, yani 3 dolarlık bir plan için küçük bir bakiyeyi bir kez yükleyip yenilemeleri oradan çektirmek daha pürüzsüzdür. Yalnızca CPU'dur, Almanya'da tek bir veri merkezi — bir bot için önemsiz, GPU veya belirli bir bölge gerekiyorsa bilmeye değer.

Dürüst sonuç

Bir Telegram botu, kendin barındırabileceğin en ucuz şeylerden biridir: 3 dolarlık bir kutu, bir systemd birimi ve polling, sen dadılık etmeden çökmeler ve yeniden açılmalar boyunca çevrim içi kalan bir bot verir. Webhook'a ve daha büyük bir plana yalnızca ölçek gerçekten zorladığında uzan — bir öğretici sana webhook'ların "daha iyi" olduğunu söylediği için değil. Küçük kutuyu al, token'ı bir env dosyasında tut, çalışma süresini systemd'ye bırak ve — her şeyden önce — kutunun kendisini kilitlemek için yeni-VPS güvenlik kontrol listesini uygula.


Kendininkini barındırmaya hazır mısın? Bir Telegram botu kaynakları neredeyse hiç kullanmaz — Nano planı (3 $/ay) onu hiç uğraşmadan 7/24 çalıştırır.

SSS

Polling mi webhook mi — hangisini kullanmalıyım?

Polling ile başla. Dışa dönük internete sahip herhangi bir kutudan çalışır — alan adı yok, açık port yok, TLS yok — ve çoğu bot için fazlasıyla yeter. Webhook'a yalnızca ölçekli çalışırken (binlerce kullanıcı) ya da mümkün olan en düşük gecikmeye ihtiyacın olduğunda geç; bir webhook, herkese açık bir HTTPS ucu ister, bu da bir alan adı ve erişilebilir bir gelen port (özel IP ya da ters vekil) demektir, yani daha çok hareketli parça. Botların %95'i için küçük bir VPS üzerinde polling doğru cevaptır.

Bir Telegram botu için özel IP veya alan adı gerekir mi?

Polling için gerekmez — bot yalnızca Telegram'a giden çağrılar yapar, yani port yönlendirmeli SSH'li bir NAT planı yeter. Herkese açık bir HTTPS ucuna (alan adı + gelen port, yani özel IP ya da ters vekil) yalnızca webhook moduna geçersen ihtiyacın olur. Çoğu bot buna hiç ihtiyaç duymaz.

Bir aiogram botu ne boyutta VPS ister?

En küçüğü. Bir polling botu çoğunlukla Telegram'ın uzun-yoklamasını bekler, yani 1 vCPU / 1 GB (3 dolarlık bir Nano) çoğu botu rahatça idare eder. Ağır işi botun kendisi yaptığında — bir veritabanı, medya işleme ya da yerel bir model — 2 GB (5 $) veya daha fazlasına doğru büyütürsün.

Çıkış yaptıktan sonra botu nasıl çalışır tutarım?

Onu Restart=always ile bir systemd servisi olarak çalıştır. Terminalinde başlatırsan SSH kapanınca ölür; systemd altında çıkıştan sağ çıkar, çökmede yeniden başlar ve yeniden açılıştan sonra geri gelir. Bir demo ile güvenebileceğin bir şey arasındaki çizgi budur.

← Blog'a dönPlanları ve fiyatları gör →

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.