Skip to content
VDS · Applications et bots

Bot Telegram sur un serveur : lancement et démarrage automatique

Comment héberger un bot Telegram sur un VPS : isolation sous son propre utilisateur, un service systemd, stockage du token, journaux, et gestion des coupures réseau.

Mis à jour le 23 août 2026

Un bot a besoin d'un processus constamment actif — c'est là que l'hébergement gratuit s'arrête et que le VDS commence. Un bot consomme très peu de ressources : même un VDS-1 (1 cœur, 2 Go) fait tourner un bot avec des milliers d'utilisateurs.

Mise en place

Un utilisateur et un répertoire dédiés — pour que le bot ne tourne pas en 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

Pour Node.js : npm ci --omit=dev au lieu d'un venv.

Conservez le token dans un fichier d'environnement, pas dans le code :

install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env

Le fichier contenant le token ne doit pas se retrouver dans le dépôt : ajoutez-le au .gitignore avant le premier commit.

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

L'option -u de Python désactive la mise en tampon de la sortie — sans elle, les logs apparaîtront dans le journal avec plusieurs minutes de retard, voire pas du tout.

Long polling ou webhook

Le long polling est plus simple : le bot interroge Telegram lui-même et vous n'avez rien à exposer. Cela suffit pour la plupart des tâches.

Un webhook est plus rapide et plus économe en trafic, mais il exige un domaine et un certificat :

location /bot/token {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
}

Vous aurez besoin de Let's Encrypt et d'un reverse proxy. Telegram accepte à contrecœur les certificats auto-signés — utilisez un certificat classique.

Il ne doit jamais y avoir deux copies du bot en fonctionnement simultané : Telegram ne livre les mises à jour qu'à un seul destinataire, et les bots se mettront à répondre par intermittence. Après des modifications, faites un restart, pas un second lancement.

Données

SQLite suffit pour les paramètres et les statistiques — un fichier à côté du bot. Un serveur de base de données séparé n'est nécessaire que si le bot dispose d'un panneau web ou de plusieurs processus.

Erreurs courantes

SymptômeCause
Conflict: terminated by other getUpdatesDeux copies du bot sont en fonctionnement
Le bot devient muet après une nuitRestart=always n'est pas configuré et le processus a planté lors d'une coupure réseau
UnauthorizedLe token a été révoqué ou copié avec des espaces en trop
Aucun logMise en tampon de la sortie, ou écriture dans un fichier au lieu de stdout
Fonctionne manuellement, plante en serviceVariables d'environnement absentes dans systemd

Un token apparu dans une capture d'écran, un dépôt public ou la conversation de quelqu'un d'autre est considéré comme compromis. Révoquez-le via BotFather et modifiez le fichier .env — ne comptez pas sur le fait que personne ne le remarque.