Anda menulis bot Telegram dengan aiogram, menguji secara lokal, dan ia bekerja. Sekarang ia harus tinggal di suatu tempat yang tidak tidur saat Anda menutup laptop. VPS kecil adalah rumah alaminya — tapi ada kesenjangan antara python bot.py di sesi SSH dan bot yang benar-benar tetap menyala melewati crash, reboot, dan koneksi Anda putus.
Ini versi produksinya: virtualenv, token dijaga keluar dari kode Anda, layanan systemd yang membangkitkan bot sendiri, dan jawaban jernih untuk pertanyaan yang akhirnya semua orang tanyakan — polling atau webhook?
Mengapa tidak menjalankannya di laptop saja
Bot butuh koneksi keluar yang stabil ke Telegram. Laptop Anda tidur, reboot untuk pembaruan, dan berpindah antar jaringan — setiap satunya menjatuhkan bot, dan pengguna menabrak tembok keheningan. VPS memegang koneksi itu sepanjang waktu. Itulah seluruh alasan memindahkannya dari mesin Anda, dan itu alasan yang sama mengapa bot Discord pantas di server juga.
Jika Anda hanya ingin jalur "buat online" tercepat dengan bot minimal, panduan hosting-bot-Telegram menutupi itu. Karya ini masuk satu tingkat lebih dalam: aiogram, penanganan token yang aman, dan tahu kapan menskala.
Bot, dalam virtualenv
SSH masuk dan jaga bot terisolasi di venv-nya sendiri — jangan memasang paket sistem-luas, itu membuat pembaruan dan pembersihan berantakan nanti:
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
Bot aiogram 3 minimal yang membaca tokennya dari lingkungan, bukan dari string yang di-hardcode:
# 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())
Jaga token keluar dari kode Anda
Jangan pernah menempel token BotFather ke bot.py — satu push ke repo publik dan ia bocor. Taruh di berkas env yang bisa dibaca-root saja:
sudo tee /etc/tgbot.env >/dev/null <<'EOF'
BOT_TOKEN=123456:your-token-from-botfather
EOF
sudo chmod 600 /etc/tgbot.env
Token yang bocor sejauh satu /revoke di BotFather dari diperbaiki — tapi apa pun yang lain yang bocor di mesin bersama lebih buruk. VPS khusus untuk bot jujurnya rumah yang lebih aman untuk token daripada laptop harian Anda: jika bocor, Anda memutar satu token, bukan seluruh setup Anda.
Bagian yang menjaganya hidup: systemd
Inilah yang memisahkan bot yang berjalan dari bot yang tetap berjalan. Buat layanannya:
# /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
Jalankan sebagai pengguna non-root (botuser di atas), bukan root — jika bot pernah disusupi, Anda mau ia terkurung. Lalu:
sudo systemctl daemon-reload
sudo systemctl enable --now tgbot
Restart=always dengan RestartSec=3 berarti crash — pembaruan buruk dari Telegram, eksepsi tak-tertangani, OOM — mengembalikan bot dalam tiga detik alih-alih membiarkannya mati sampai Anda menyadari. Awasi langsung:
journalctl -u tgbot -f
Itulah seluruh setup logging Anda. Tanpa berkas log untuk dirotasi, tanpa perkakas tambahan — journald sudah memilikinya.
Memperbarui tanpa drama waktu-henti
Saat Anda mengubah kode atau menaikkan aiogram:
cd ~/tgbot && source venv/bin/activate
pip install -U aiogram # jika meningkatkan pustaka
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager # konfirmasi ia kembali bersih
Restart mengedipkan bot selama satu-dua detik. Untuk bot polling itu tak terlihat bagi pengguna — Telegram mengantrekan pembaruan dan mengirimkannya begitu bot tersambung kembali.
Polling vs webhook — versi jujur
Ini keputusan yang orang terlalu pikirkan. Berikut versi sederhananya:
Polling (start_polling, yang dipakai kode di atas) membuat bot bertanya ke Telegram "ada yang baru?" pada koneksi berumur-panjang. Ia tidak butuh apa pun selain internet keluar — tanpa domain, tanpa TLS, tanpa port masuk terbuka. Ia berjalan baik di balik NAT. Untuk mayoritas besar bot, ini benar dan Anda harus berhenti di sini.
Webhook membuat Telegram mendorong pembaruan kepada Anda, yang berarti Anda harus mengekspos endpoint HTTPS publik. Itu memerlukan domain dan port masuk yang dapat dijangkau — jadi entah IP publik khusus atau reverse proxy di depan. Lebih banyak penyiapan, lebih banyak hal yang rusak. Imbalannya adalah latensi lebih rendah dan overhead lebih sedikit pada skala besar — ribuan pengguna serentak, volume pembaruan berat.
Aturan praktisnya: mulai dengan polling pada paket NAT. Pindah ke webhook hanya saat Anda benar-benar sudah melampaui polling — dan jika demikian, saat itulah IP khusus mendapat tempatnya, karena Anda butuh endpoint HTTPS masuk itu.
Berapa biayanya menjalankan
Bot polling itu ringan. Ia menganggur pada long-poll Telegram dan bereaksi terhadap pesan, jadi mesin kebanyakan menunggu:
- Nano $3 (1 vCPU / 1 GB) — baik untuk kebanyakan bot, bahkan yang cukup cerewet.
- Micro $5 (2 vCPU / 2 GB) — saat bot menyimpan basis data (SQLite/Postgres), menangani media, atau melayani banyak pengguna.
- Lebih tinggi hanya jika bot sendiri melakukan kerja nyata — pemrosesan gambar, model lokal, logika per-pesan berat.
Pendaftaran cukup email dan Anda bayar dengan USDC atau USDT di Base atau Ethereum — tanpa kartu, tanpa identitas. Kartu juga bisa, tapi on-ramp punya minimum ~$27, jadi untuk paket $3 lebih mulus mengisi saldo kecil sekali dan membiarkan perpanjangan menariknya. Ini hanya CPU, satu pusat data di Jerman — bukan masalah untuk bot, layak diketahui jika Anda butuh GPU atau wilayah tertentu.
Kesimpulan jujur
Bot Telegram adalah salah satu hal termurah yang bisa Anda swa-hosting: mesin $3, unit systemd, dan polling memberi Anda bot yang online melewati crash dan reboot tanpa Anda mengasuhnya. Raih webhook dan paket lebih besar hanya saat skala benar-benar memaksanya — bukan karena tutorial memberi tahu Anda webhook "lebih baik". Dapatkan mesin kecil, jaga token di berkas env, biarkan systemd menangani uptime, dan — sebelum apa pun — jalankan daftar periksa keamanan VPS baru agar mesinnya sendiri terkunci.
Siap hosting milik Anda? Bot Telegram nyaris tidak memakai sumber daya — paket Nano ($3/bln) menjalankannya 24/7 tanpa ribet.
Komentar
Belum ada komentar. Jadilah yang pertama.