En Telegram-bot som bara körs medan din laptop är öppen körs inte riktigt — den demonstrerar. För att faktiskt ha den online, svarande klockan 3 på natten, överlevande dina omstarter och sina egna krascher, behöver den leva på en server. Här är hela vägen, från början till slut, med kommandona.
Goda nyheter först: en bot är en pytteliten arbetsbelastning. Den sitter mestadels idle och väntar på meddelanden, så den billigaste boxen kör den bra — ingen dedikerad IP, ingen domän, inget fancy.
1. Få en token från BotFather
I Telegram, skicka meddelande till @BotFather, skicka /newbot, välj ett namn och användarnamn. Den ger dig en token som ser ut som 12345:AAH.... Behandla den som ett lösenord — vem som helst med den styr din bot.
2. En minimal bot
SSH:a in i servern, sätt upp Python och biblioteket:
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 som svarar — ~/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()
Notera att den läser token från en miljövariabel — inte hårdkodad. Det spelar roll i nästa steg.
3. Delen som faktiskt håller den igång: systemd
Om du bara kör python bot.py dör den i det ögonblick du stänger SSH. En systemd-tjänst är vad som får den att överleva utloggning, krascher och omstarter. Skapa /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
Sedan:
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 är raden som gör det verkliga jobbet — krasch, och den är tillbaka på 5 sekunder. enable betyder att den kommer upp efter en omstart. Det är hela skillnaden mellan "jag körde en bot en gång" och "min bot är uppe."
4. Varför ingen domän eller öppna portar
Boten använder long polling — den når ut till Telegram efter uppdateringar, så inget behöver nå in. Ingen publik URL, ingen inkommande brandväggsregel, ingen dedikerad IP. Det är precis därför en NAT-VPS (delad IP, SSH på en port) är ett bra och billigt hem för en bot. Webhooks finns för väldigt hög volym, men du behöver dem nästan säkert inte för att börja.
Ärliga förbehåll
- Token-hygien: här är den inline i unit-filen för tydlighet — bra på en nedlåst box, men för något delat, ladda den från en root-only
EnvironmentFileistället, och committa den aldrig till git. Läckt? Återkalla i BotFather, utfärda en ny. - Tunga bottar: om din bot gör arbetet själv (bildgenerering, en lokal modell) är den inte längre pytteliten — skala upp därefter.
Det är det. Lås ner boxen först med säkerhetschecklistan, släpp in tjänsten, och din bot stannar online oavsett om du gör det. På en krypto-betald VPS kan du ha den igång en minut efter att du bestämt dig.
Kommentarer
Inga kommentarer än. Bli först.