Skip to content
VDS · Aplikasi dan bot

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

GejalaPenyebab
Conflict: terminated by other getUpdatesDua salinan bot sedang berjalan
Bot diam setelah semalamanRestart=always tidak dikonfigurasi, dan proses crash saat koneksi jaringan terputus
UnauthorizedToken dicabut atau tersalin dengan spasi tambahan
Tidak ada logOutput buffering, atau menulis ke file alih-alih ke stdout
Berjalan manual, crash sebagai serviceTidak 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.