En Telegram-bot, der kun kører, mens din bærbare er åben, kører ikke rigtigt — den demonstrerer. For at have den faktisk online, svarende klokken 3 om natten, overlevende dine genstarter og sine egne nedbrud, skal den bo på en server. Her er hele vejen, fra start til slut, med kommandoerne.
Gode nyheder først: en bot er en lille arbejdsbyrde. Den sidder mest inaktiv og venter på beskeder, så den billigste boks kører den fint — ingen dedikeret IP, intet domæne, intet fancy.
1. Få et token fra BotFather
I Telegram, skriv til @BotFather, send /newbot, vælg et navn og brugernavn. Den rækker dig et token, der ser ud som 12345:AAH.... Behandl det som en adgangskode — enhver med det kontrollerer din bot.
2. En minimal bot
SSH ind i serveren, sæt Python og biblioteket 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
En bot der svarer — ~/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()
Bemærk, den læser token'et fra en miljøvariabel — ikke hardcodet. Det betyder noget i næste trin.
3. Den del der faktisk holder den kørende: systemd
Hvis du bare kører python bot.py, dør den i det øjeblik, du lukker SSH. En systemd-tjeneste er, hvad der får den til at overleve logud, nedbrud og genstarter. Opret /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
Så:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # bør sige active (running)
journalctl -u mybot -f # live-logs
Restart=always er linjen, der laver det rigtige arbejde — crash, og den er tilbage på 5 sekunder. enable betyder, den kommer op efter en genstart. Det er hele forskellen mellem "jeg kørte en bot én gang" og "min bot er oppe".
4. Hvorfor intet domæne eller åbne porte
Botten bruger long polling — den rækker ud til Telegram efter opdateringer, så intet behøver at nå ind. Ingen offentlig URL, ingen indgående firewall-regel, ingen dedikeret IP. Det er præcis derfor, en NAT-VPS (delt IP, SSH på en port) er et fint og billigt hjem for en bot. Webhooks eksisterer til meget høj volumen, men du behøver næsten helt sikkert ikke dem for at starte.
Ærlige forbehold
- Token-hygiejne: her er det inline i unit-filen for klarhed — fint på en låst-ned-boks, men for noget delt, indlæs det fra en kun-root
EnvironmentFilei stedet, og commit det aldrig til git. Lækket? Tilbagekald i BotFather, udsted et nyt. - Tunge bots: hvis din bot laver arbejdet selv (billedgenerering, en lokal model), er den ikke længere lille — skalér op derefter.
Det er det. Lås boksen ned først med sikkerhedstjeklisten, drop tjenesten ind, og din bot forbliver online, uanset om du gør. På en krypto-betalt VPS kan du have den kørende et minut efter, du beslutter dig.
Kommentarer
Ingen kommentarer endnu. Vær den første.