Bot Telegram di server: menjalankan dan autostart
Cara menghosting bot Telegram di VPS: isolasi di bawah user sendiri, layanan systemd, penyimpanan token, log, dan penanganan gangguan jaringan.
Diperbarui 23 Agustus 2026
Bot membutuhkan proses yang berjalan terus-menerus — di situlah hosting gratis berakhir dan VDS dimulai. Bot hampir tidak membutuhkan sumber daya apa pun: bahkan VDS-1 (1 core, 2 GB) mampu menangani bot dengan ribuan pengguna.
Penempatan
User dan direktori terpisah — agar bot tidak berjalan sebagai root:
useradd -r -m -d /srv/bot -s /usr/sbin/nologin botuser
cd /srv/bot && sudo -u botuser git clone https://github.com/you/bot.git .
sudo -u botuser python3 -m venv venv
sudo -u botuser venv/bin/pip install -r requirements.txt
Untuk Node.js: npm ci --omit=dev sebagai ganti venv.
Simpan token di file environment, bukan di dalam kode:
install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env
File berisi token tidak boleh masuk ke repositori: tambahkan ke .gitignore sebelum commit pertama.
Service
/etc/systemd/system/tgbot.service:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=botuser
WorkingDirectory=/srv/bot
EnvironmentFile=/srv/bot/.env
ExecStart=/srv/bot/venv/bin/python -u bot.py
Restart=always
RestartSec=10
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tgbot
journalctl -u tgbot -f
Flag -u pada Python menonaktifkan output buffering — tanpa itu, log akan muncul di journal dengan jeda beberapa menit, atau tidak muncul sama sekali.
Long polling atau webhook
Long polling lebih sederhana: bot melakukan polling ke Telegram sendiri, dan Anda tidak perlu mengekspos apa pun. Itu cukup untuk sebagian besar tugas.
Webhook lebih cepat dan lebih hemat traffic, tetapi membutuhkan domain dan sertifikat:
location /bot/token {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
Anda memerlukan Let's Encrypt dan reverse proxy. Telegram menerima sertifikat self-signed dengan enggan — gunakan sertifikat biasa.
Jangan pernah ada dua salinan bot yang berjalan sekaligus: Telegram mengirimkan update hanya ke satu penerima, dan bot akan mulai merespons secara terputus-putus. Setelah melakukan perubahan, lakukan restart, bukan menjalankan ulang sebagai proses kedua.
Data
SQLite cukup untuk pengaturan dan statistik — sebuah file di samping bot. Server database terpisah hanya diperlukan jika bot memiliki panel web atau beberapa proses.
Kesalahan umum
| Gejala | Penyebab |
|---|---|
Conflict: terminated by other getUpdates | Dua salinan bot sedang berjalan |
| Bot diam setelah semalaman | Restart=always tidak dikonfigurasi, dan proses crash saat koneksi jaringan terputus |
Unauthorized | Token dicabut atau tersalin dengan spasi tambahan |
| Tidak ada log | Output buffering, atau menulis ke file alih-alih ke stdout |
| Berjalan manual, crash sebagai service | Tidak ada environment variable di systemd |
Token yang pernah muncul di screenshot, repositori publik, atau chat orang lain dianggap sudah bocor. Cabut melalui BotFather dan ubah file
.env— jangan mengandalkan bahwa tidak ada yang menyadarinya.