Telegram bot na serveru: pokretanje i automatsko pokretanje
Kako da hostuješ Telegram bot na VPS-u: izolacija pod sopstvenim korisnikom, systemd usluga, čuvanje tokena, logovi i rešavanje mrežnih prekida.
Ažurirano 23. avgust 2026.
Botu je potreban proces koji stalno radi — tu se besplatni hosting završava i počinje VDS. Botu jedva da treba resursa: čak i VDS-1 (1 jezgro, 2 GB) izdržava bota sa hiljadama korisnika.
Smeštanje
Odvojen korisnik i direktorijum — da bot ne radi kao 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
Za Node.js: npm ci --omit=dev umesto venv-a.
Token drži u fajlu sa promenljivama okruženja, ne u kodu:
install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env
Fajl sa tokenom ne sme da završi u repozitorijumu: dodaj ga u .gitignore pre prvog commit-a.
Servis
/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
Zastavica -u kod Pythona isključuje baferovanje izlaza — bez nje će se logovi u journal-u pojaviti sa zakašnjenjem od nekoliko minuta ili nikako.
Long polling ili webhook
Long polling je jednostavniji: bot sam anketira Telegram i ne moraš ništa da izlažeš. To je dovoljno za većinu zadataka.
Webhook je brži i štedi saobraćaj, ali zahteva domen i sertifikat:
location /bot/token {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
Trebaće ti Let's Encrypt i reverse proxy. Telegram nerado prihvata self-signed sertifikate — koristi običan.
Nikada ne smeju da rade dve kopije bota istovremeno: Telegram dostavlja ažuriranja samo jednom primaocu, pa će botovi početi da odgovaraju naizmenično. Posle izmena uradi restart, a ne drugo pokretanje.
Podaci
SQLite je dovoljan za podešavanja i statistiku — fajl pored bota. Odvojen server baze je potreban samo ako bot ima web panel ili više procesa.
Česte greške
| Simptom | Uzrok |
|---|---|
Conflict: terminated by other getUpdates | Rade dve kopije bota |
| Bot utihne posle noći | Restart=always nije podešen, a proces je pao pri prekidu mreže |
Unauthorized | Token je opozvan ili kopiran sa dodatnim razmacima |
| Nema logova | Baferovanje izlaza ili pisanje u fajl umesto na stdout |
| Radi ručno, pada kao servis | Nema promenljivih okruženja u systemd-u |
Token koji se pojavio na snimku ekrana, u javnom repozitorijumu ili u nečijem četu smatra se kompromitovanim. Opozovi ga preko BotFather-a i izmeni
.envfajl — ne računaj na to da niko neće primetiti.