Een Telegram-bot die alleen draait terwijl je laptop open is, draait niet echt — hij demonstreert. Om hem daadwerkelijk online te hebben, om 3 uur 's nachts antwoordend, je herstarts en zijn eigen crashes overlevend, moet hij op een server leven. Hier is het hele pad, van begin tot eind, met de commando's.
Eerst goed nieuws: een bot is een piepkleine workload. Hij zit meestal idle op berichten te wachten, dus de goedkoopste box draait hem prima — geen dedicated IP, geen domein, niets fancy.
1. Krijg een token van BotFather
Stuur in Telegram een bericht naar @BotFather, verstuur /newbot, kies een naam en gebruikersnaam. Het geeft je een token die eruitziet als 12345:AAH.... Behandel het als een wachtwoord — iedereen ermee bestuurt je bot.
2. Een minimale bot
SSH in de server, zet Python en de library op:
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
Een bot die antwoordt — ~/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()
Merk op dat het het token uit een omgevingsvariabele leest — niet hardcoded. Dat telt in de volgende stap.
3. Het deel dat het echt draaiend houdt: systemd
Als je gewoon python bot.py draait, sterft het op het moment dat je SSH sluit. Een systemd-service is wat het logout, crashes en herstarts laat overleven. Maak /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
Dan:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # should say active (running)
journalctl -u mybot -f # live logs
Restart=always is de regel die het echte werk doet — crash, en het is terug in 5 seconden. enable betekent dat het opkomt na een herstart. Dat is het hele verschil tussen "ik draaide een bot één keer" en "mijn bot is op."
4. Waarom geen domein of open poorten
De bot gebruikt long polling — hij reikt naar Telegram voor updates, dus niets hoeft naar binnen te reiken. Geen publieke URL, geen inkomende firewall-regel, geen dedicated IP. Dit is precies waarom een NAT-VPS (gedeeld IP, SSH op een poort) een prima en goedkoop thuis is voor een bot. Webhooks bestaan voor zeer hoog volume, maar je hebt ze vrijwel zeker niet nodig om te beginnen.
Eerlijke kanttekeningen
- Token-hygiëne: hier staat het inline in het unit-bestand voor de duidelijkheid — prima op een vergrendelde box, maar voor iets gedeelds, laad het uit een root-only
EnvironmentFilein plaats daarvan, en commit het nooit naar git. Gelekt? Trek in bij BotFather, geef een nieuwe uit. - Zware bots: als je bot het werk zelf doet (beeldgeneratie, een lokaal model), is hij niet langer piepklein — schaal dienovereenkomstig op.
Dat is het. Vergrendel de box eerst met de security-checklist, zet de service erin, en je bot blijft online of jij het nu bent of niet. Op een crypto-betaalde VPS kun je hem een minuut nadat je het besluit draaiend hebben.
Reacties
Nog geen reacties. Wees de eerste.