Bot menjawab setiap pesan sampai penutup laptop ditutup, lalu pengguna tidak mendapat respons. VPS kecil mengatasi masalah ini dengan biaya beberapa dolar per bulan. VPS terbaik untuk bot Telegram bergantung pada cara bot menerima pembaruan: bot memintanya ke Telegram atau Telegram mengirimkannya ke bot.
Pilihan itu menentukan port dan sertifikat yang diperlukan, serta apakah koneksi IPv4 publik dibutuhkan.
Versi Singkat
- Untuk satu bot di VPS, gunakan long polling. Tidak perlu domain, sertifikat, atau port terbuka.
- Webhook memerlukan HTTPS pada port 443, 80, 88, atau 8443 serta alamat IPv4 publik. Telegram tidak mengirim webhook melalui IPv6.
- 512 MB of RAM is a workable start for one bot with no local database.
- Jaga bot tetap berjalan dengan systemd, atau kebijakan restart Docker jika Anda sudah menggunakan kontainer.
- Pilih penyedia berdasarkan IPv4 dan cadangan RAM, bukan hanya harga yang tercantum.
Polling atau Webhook: Pilihan yang Menentukan Kebutuhan Server
Bot Telegram menerima pembaruan melalui salah satu dari dua cara. Dengan long polling, bot memanggil getUpdates dan Telegram menahan permintaan tetap terbuka hingga pembaruan tiba atau waktu tunggu habis, sehingga setiap koneksi dimulai dari server Anda. Dengan webhook, Anda mendaftarkan URL sekali menggunakan setWebhook, lalu Telegram mengirim setiap pembaruan ke URL tersebut melalui POST dengan HTTPS.
| Persyaratan | Long Polling (getUpdates) |
Webhook (setWebhook) |
|---|---|---|
| Port masuk | Tidak ada; hanya permintaan keluar | HTTPS pada 443, 80, 88, atau 8443 |
| IPv4 publik | Tidak diperlukan | Diperlukan; IPv6 tidak didukung untuk webhook |
| Domain dan sertifikat | Tidak diperlukan | Sertifikat diperlukan; domain biasanya digunakan, tetapi sertifikat yang ditandatangani sendiri dapat memakai IP sebagai CN |
| Proses | Berjalan terus-menerus | Menjawab permintaan HTTPS terus-menerus |
Kolom webhook mengikuti persyaratan webhook Telegram.
Untuk melihat metode yang digunakan bot Anda, tanyakan ke Bot API:
curl "https://api.telegram.org/bot<YOUR_TOKEN>/getWebhookInfo"
Jika respons berisi "url":"", belum ada webhook yang dikonfigurasi, sehingga bot dapat menggunakan long polling. bot.start() milik grammY menggunakan long polling secara default; python-telegram-bot menggunakan run_polling() atau run_webhook().
Untuk satu bot di VPS tersendiri, saya akan memilih polling, yang juga merupakan saran default grammY. Webhook lebih unggul ketika server sudah menjalankan reverse proxy (server web yang meneruskan permintaan HTTPS ke bot), ketika beberapa bot berbagi satu endpoint HTTPS, atau pada platform serverless. Untuk opsi itu, Caddy mengambil dan memperbarui sertifikat tanpa tugas cron.
Gangguan singkat menunda pesan tanpa menghilangkannya. Menurut aturan pembaruan Bot API, Telegram menyimpan pembaruan hingga 24 jam sampai bot menerimanya, dengan kedua metode tersebut, serta mengulangi permintaan webhook yang gagal sebelum menyerah.
Jika webhook menggunakan port khususnya secara langsung, batasi port tersebut ke rentang alamat sumber yang dipublikasikan Telegram. Jika port 443 dipakai bersama oleh reverse proxy yang melayani situs lain, terapkan pembatasan hanya pada jalur webhook atau gunakan token rahasia Telegram alih-alih memblokir seluruh lalu lintas HTTPS lainnya. Panduan webhook mencantumkan dua rentang alamat sumber dan memperingatkan bahwa rentang tersebut dapat berubah. Dengan UFW sebagai firewall host:
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
Ubah 443 jika webhook mendengarkan pada 80, 88, atau 8443. Aturan ini melindungi bot yang berjalan langsung pada host. Dokumentasi firewall Docker menyatakan bahwa port yang dipublikasikan melewati UFW, sehingga kontainer webhook yang dijalankan dengan -p 443:443 tetap terbuka untuk semua orang. Tetapkan juga secret_token di setWebhook. Telegram mengirimkannya kembali di header X-Telegram-Bot-Api-Secret-Token setiap permintaan, dan handler Anda menolak permintaan tanpa token tersebut.
Menjaga Bot Tetap Berjalan: systemd atau Docker
Menjalankan bot Telegram 24/7 berarti memulainya kembali setelah crash dan reboot. Pada VPS, systemd melakukannya, atau Docker jika bot didistribusikan sebagai image.
Unit systemd adalah berkas konfigurasi singkat yang memberi tahu sistem init cara memulai dan memulai ulang program. Buat /etc/systemd/system/telegram-bot.service:
[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
Masukkan token ke berkas .env di folder proyek sebagai BOT_TOKEN=... dan baca dengan os.environ["BOT_TOKEN"] (Node: process.env.BOT_TOKEN), agar token tidak berada di dalam kode. Lalu salin proyek ke tempatnya dan jalankan:
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 memulai ulang bot baik setelah keluar secara normal maupun crash; on-failure melewatkan keluar normal, sesuai manual systemd.service. RestartSec=5 memberi jeda antarpercobaan, sedangkan WantedBy=multi-user.target bersama enable menjalankan bot saat boot. Jika bot terus memulai ulang, sudo journalctl -u telegram-bot -n 50 menampilkan traceback. Periksa terlebih dahulu apakah BOT_TOKEN belum disetel.
Padanannya di Docker hanyalah satu flag:
docker run -d --name telegram-bot --restart unless-stopped --env-file .env your-bot-image
docker logs -f telegram-bot
Di Compose, barisnya adalah restart: unless-stopped. Dokumentasi kebijakan restart Docker menyatakan bahwa kontainer kembali berjalan ketika prosesnya keluar atau daemon dimulai ulang, bukan setelah Anda menghentikannya sendiri. Ini mencakup reboot jika Docker sendiri berjalan saat boot, sebagaimana default pada Debian dan Ubuntu. Pada sistem lain, jalankan sudo systemctl enable docker.service.
Aturan saya: satu skrip pada server kecil menggunakan systemd, tanpa daemon tambahan di memori. Jika Anda sudah membuat image atau menjalankan kontainer lain, gunakan Docker dan perhitungkan bahwa daemon-nya memakai sebagian RAM.
Kedua alat tersebut tidak memberi tahu Anda bahwa bot sedang mati. Monitor push Uptime Kuma di server kedua dapat melakukannya. Bot memanggil URL monitor secara berkala, dan Uptime Kuma memberi peringatan melalui Telegram ketika panggilan berhenti.
Keterbatasan Hosting Gratis dan Server Rumahan
Render menghentikan layanan web gratis setelah 15 menit tanpa lalu lintas masuk, dan dokumentasi paket gratis Render memperkirakan waktu bangunnya sekitar satu menit. Bot polling tidak menerima lalu lintas masuk, sehingga dihentikan. Bot webhook dibangunkan oleh POST Telegram, dengan cold start setelah masa sepi. Jadi, cocok atau tidaknya hosting gratis untuk bot Telegram bergantung pada metode yang digunakan bot.
Panduan grammY mencantumkan platform serverless sebagai pilihan yang cocok untuk webhook, sedangkan long polling memerlukan mesin yang berjalan sepanjang waktu. Fly.io menagih berdasarkan penggunaan dan mengharuskan kartu tersimpan di akun.
Raspberry Pi atau PC lama dapat menjalankan bot polling selama mesin, listrik, dan koneksi tetap aktif. Webhook dari rumah juga memerlukan alamat publik dan penerusan port. Untuk bot hobi, kedua opsi gratis ini bisa mencukupi.
VPS cocok untuk kedua metode dengan harga bulanan tetap.
Perbandingan Lima Penyedia VPS untuk Bot Telegram
Tabel membandingkan lima paket berbayar tingkat awal untuk hosting bot Telegram berdasarkan harga bulanan yang diiklankan per Oktober 2026, sebelum pajak. Harga promosi ditandai bila berlaku.
| Penyedia | Spesifikasi Paket Awal | Harga Bulanan | IPv4 publik | Penagihan |
|---|---|---|---|---|
| Cloudzy | 1 vCPU (AMD EPYC), 512 MB DDR5, 20 GB NVMe, transfer 1 TB | $2.48 promosi ($4.95 reguler) | Termasuk, beserta IPv6 | Per jam atau bulanan |
| DigitalOcean | 1 vCPU, 512 MiB, SSD 10 GiB, transfer 500 GiB | Mulai dari $4 | Termasuk | Per detik, maksimum sebesar harga bulanan |
| Vultr | 1 vCPU, 512 MB, SSD 10 GB, transfer 512 GB | Mulai dari $2.50 hanya IPv6; mulai dari $3.50 dengan IPv4 | Hanya pada paket $3.50 | Per jam atau bulanan |
| Hetzner (Jerman/Finlandia) | 2 vCPU, 4 GB, SSD 40 GB, transfer 20 TB | Mulai dari €5.49 belum termasuk PPN | Tambahan, mulai dari €0.50/bulan belum termasuk PPN (IPv6 gratis) | Per jam, dengan batas harga bulanan |
| Linode (Akamai) | 1 vCPU, 1 GB, penyimpanan 25 GB, transfer 1 TB | Mulai dari $5 | Termasuk | Per jam atau bulanan |
Paket Vultr yang hanya IPv6 tidak memiliki IPv4, dan harga Hetzner tidak mencakup alamat IPv4. Tanpa alamat tersebut, keduanya tidak dapat menerima webhook.
Bot polling dapat berjalan hanya dengan IPv6 karena api.telegram.org memiliki alamat IPv6. Semua layanan lain yang diakses juga memerlukannya, termasuk registri paket, host Git Anda, dan setiap API yang dipanggil. Periksa setiap host sebelum memilih:
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
Jawaban kosong berarti host tersebut tidak memiliki alamat IPv6.
Apakah 512 MB Cukup untuk Bot Telegram?
Saya akan memulai satu bot tanpa basis data lokal dengan 512 MB. Dokumentasi python-telegram-bot tidak mencantumkan kebutuhan memori. Yang menentukan adalah komponen yang berbagi server: OS, daemon Docker jika digunakan, dan basis data lokal. Ukur penggunaannya.
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
Penghentian akibat kehabisan memori (OOM kill) terjadi ketika kernel mengakhiri proses untuk membebaskan RAM. systemd memulai ulang bot, sehingga baris log itu mungkin satu-satunya bukti. Beralihlah ke 1 GB ketika OOM kill muncul, swap terus digunakan, atau sebelum menambahkan basis data lokal maupun bot kedua.
Mana yang Sebaiknya Dipilih?
Untuk satu bot, saya akan memilih paket 512 MB yang sudah mencakup IPv4 publik. Selanjutnya, pilihan penyedia bergantung pada harga, cadangan sumber daya, dan lokasi pengguna Anda.
- Harga bulanan terendah saat ini: Cloudzy seharga $2.48 selama promosi diskon 50%, termasuk IPv4 dan IPv6.
- Harga terendah saat ini dengan IPv4: Cloudzy seharga $2.48 selama promosi. IPv4 khusus dan IPv6 sudah termasuk.
- 1 GB of headroom for Docker or a small database: Linode, from $5 a month.
- Beberapa bot atau basis data, pengguna di Eropa: Hetzner menawarkan sumber daya terbanyak per euro dalam tabel ini saat paketnya tersedia (paket ini tercantum tidak tersedia pada Oktober 2026). Tambahkan biaya IPv4 untuk webhook.
- Lebih banyak disk dan transfer pada 512 MB: Cloudzy. Di antara paket 512 MB, Cloudzy memiliki penyimpanan terbanyak (20 GB NVMe dibandingkan 10) dan transfer terbanyak (1 TB dibandingkan sekitar 500 GB), termasuk IPv4 dan IPv6. Dengan harga promosi saat ini, Cloudzy juga lebih murah daripada paket awal lain dalam perbandingan ini.
Dengan harga promosi saat ini, Cloudzy menggabungkan harga bulanan terendah dalam perbandingan ini dengan penyimpanan dan transfer yang lebih besar daripada paket 512 MB lainnya. Paket 512 MB Cloudzy ditagih per jam dengan jaminan uang kembali 14 hari, sehingga Anda dapat menjalankan bot selama beberapa hari sebelum memutuskan. Pilih lokasi terdekat dengan pengguna Anda, siapkan Linux VPS Cloudzy, lalu tambahkan unit systemd di atas.
Pertanyaan yang Sering Diajukan
Apa VPS Termurah yang Dapat Menjalankan Bot Telegram?
Per Oktober 2026, paket 512 MB Cloudzy adalah yang termurah dari lima pilihan, seharga $2.48 per bulan selama promosi diskon 50%, termasuk IPv4 khusus dan IPv6. Harga regulernya $4.95 per bulan. Opsi Vultr yang hanya IPv6 sedikit lebih mahal, mulai dari $2.50.
Mengapa Webhook Telegram Memerlukan HTTPS?
Telegram mewajibkan SSL/TLS untuk webhook pada port apa pun, sesuai panduan webhook. Telegram menolak HTTP biasa dan menerima TLS 1.2 atau yang lebih baru. Tanpa TLS, setiap POST akan membawa pesan pengguna tanpa enkripsi. Sertifikat Let's Encrypt dapat digunakan, begitu juga sertifikat yang ditandatangani sendiri yang diunggah dengan setWebhook.
Bisakah Bot Telegram Berjalan dengan RAM 512 MB?
Biasanya bisa, untuk satu bot tanpa basis data lokal. Pantau log kernel untuk penghentian akibat kehabisan memori, lalu beralihlah ke 1 GB jika itu muncul atau ketika Anda menambahkan basis data.
Bagaimana Menjaga Bot Telegram Berjalan Setelah Reboot?
Aktifkan layanan systemd-nya dengan sudo systemctl enable --now telegram-bot, atau jalankan kontainer dengan --restart unless-stopped dan aktifkan docker.service agar Docker berjalan saat boot.
Apakah Telegram Membatasi Laju Bot Berdasarkan Alamat IP?
FAQ batasan bot Telegram menjelaskan batasan per bot dan per obrolan; pindah ke server baru tidak boleh dianggap sebagai cara melewati batas tersebut. Jika batas terlampaui, API mengembalikan HTTP 429 dengan nilai retry_after. Tunggu selama jumlah detik tersebut sebelum mencoba lagi.
Wilayah Server Mana yang Sebaiknya Dipilih untuk Bot Telegram?
Pilih lokasi terdekat dengan pengguna dan layanan yang dipanggil bot Anda, lalu ukur waktu koneksi dari setiap kandidat dengan curl -o /dev/null -s -w '%{time_connect}\n' https://api.telegram.org.
Diskusi
Komentar
Masuk untuk bergabung dalam diskusi.