Un bot Telegram qui ne tourne que tant que votre portable est ouvert n'est pas vraiment en marche — il fait une démo. Pour l'avoir réellement en ligne, répondant à 3 h du matin, survivant à vos redémarrages et à ses propres plantages, il doit vivre sur un serveur. Voici tout le chemin, du début à la fin, avec les commandes.
Bonne nouvelle d'abord : un bot est une charge minuscule. Il reste surtout au repos à attendre des messages, donc la machine la moins chère le fait tourner très bien — sans IP dédiée, sans domaine, rien de sophistiqué.
1. Obtenez un jeton de BotFather
Dans Telegram, écrivez à @BotFather, envoyez /newbot, choisissez un nom et un nom d'utilisateur. Il vous remet un jeton qui ressemble à 12345:AAH.... Traitez-le comme un mot de passe — quiconque l'a contrôle votre bot.
2. Un bot minimal
Connectez-vous en SSH au serveur, configurez Python et la bibliothèque :
sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot
Un bot qui répond — ~/mybot/bot.py :
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Alive and on a server. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Remarquez qu'il lit le jeton depuis une variable d'environnement — pas en dur. C'est important à l'étape suivante.
3. La partie qui le garde réellement en marche : systemd
Si vous lancez juste python bot.py, il meurt dès que vous fermez SSH. Un service systemd est ce qui le fait survivre à la déconnexion, aux plantages et aux redémarrages. Créez /etc/systemd/system/mybot.service :
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
[Install]
WantedBy=multi-user.target
Puis :
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # devrait indiquer active (running)
journalctl -u mybot -f # journaux en direct
Restart=always est la ligne qui fait le vrai travail — un plantage, et il revient en 5 secondes. enable signifie qu'il remonte après un redémarrage. C'est toute la différence entre « j'ai fait tourner un bot une fois » et « mon bot est debout ».
4. Pourquoi pas de domaine ni de ports ouverts
Le bot utilise le long polling — il va chercher les mises à jour chez Telegram, donc rien n'a besoin d'entrer. Pas d'URL publique, pas de règle de pare-feu entrante, pas d'IP dédiée. C'est exactement pourquoi un VPS NAT (IP partagée, SSH sur un port) est un foyer parfait et bon marché pour un bot. Les webhooks existent pour de très gros volumes, mais vous n'en avez presque certainement pas besoin pour démarrer.
Réserves honnêtes
- Hygiène du jeton : ici il est en clair dans le fichier d'unité pour la clarté — acceptable sur une machine verrouillée, mais pour tout ce qui est partagé, chargez-le depuis un
EnvironmentFileaccessible root uniquement, et ne le commitez jamais dans git. Fuité ? Révoquez dans BotFather, émettez-en un nouveau. - Bots lourds : si votre bot fait lui-même le travail (génération d'images, un modèle local), il n'est plus minuscule — dimensionnez en conséquence.
C'est tout. Verrouillez d'abord la machine avec la checklist de sécurité, déposez le service, et votre bot reste en ligne que vous le soyez ou non. Sur un VPS payé en crypto, vous pouvez l'avoir en marche une minute après l'avoir décidé.
Commentaires
Pas encore de commentaires. Soyez le premier.