Sommerhitze — alles schmilzt, sogar unsere Preise.−25%−25 % auf jeden Jahresplan, bis 31. Aug.Pläne ansehen
EQVPS
Loslegen

Einen Telegram-Bot 24/7 auf einem VPS betreiben: aiogram, systemd, Polling vs Webhook

4. Juli 2026 · 5 Min. Lesezeit · EQVPS Team

Du hast einen Telegram-Bot mit aiogram geschrieben, ihn lokal getestet, und er funktioniert. Jetzt muss er irgendwo leben, das nicht schläft, wenn du den Laptop schließt. Ein kleiner VPS ist das natürliche Zuhause — aber es gibt eine Lücke zwischen python bot.py in einer SSH-Sitzung und einem Bot, der tatsächlich durch Abstürze, Neustarts und das Wegfallen deiner Verbindung oben bleibt.

Das ist die Produktionsversion: ein virtualenv, der Token aus deinem Code herausgehalten, ein systemd-Dienst, der den Bot von selbst wiederbelebt, und eine klaräugige Antwort auf die Frage, die irgendwann jeder stellt — Polling oder Webhook?

Warum nicht einfach auf deinem Laptop betreiben

Ein Bot braucht eine stetige ausgehende Verbindung zu Telegram. Dein Laptop schläft, startet für Updates neu und springt zwischen Netzwerken — jedes davon lässt den Bot fallen, und Nutzer treffen auf eine Wand aus Stille. Ein VPS hält diese Verbindung rund um die Uhr. Das ist der ganze Grund, ihn von deiner Maschine wegzuziehen, und es ist derselbe Grund, warum auch ein Discord-Bot auf einen Server gehört.

Wenn du nur den schnellstmöglichen „bring es online“-Weg mit einem minimalen Bot willst, deckt die Telegram-Bot-hosten-Anleitung das ab. Dieses Stück geht eine Ebene tiefer: aiogram, sichere Token-Handhabung und zu wissen, wann zu skalieren ist.

Der Bot, in einem virtualenv

Logg dich per SSH ein und halte den Bot in seinem eigenen venv isoliert — installiere keine Pakete systemweit, das macht Upgrades und Aufräumen später zu einem Durcheinander:

sudo apt update && sudo apt install -y python3-venv
mkdir ~/tgbot && cd ~/tgbot
python3 -m venv venv && source venv/bin/activate
pip install -U aiogram

Ein minimaler aiogram-3-Bot, der seinen Token aus der Umgebung liest, nicht aus einem fest codierten String:

# bot.py
import asyncio, logging, os
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import CommandStart

logging.basicConfig(level=logging.INFO)
dp = Dispatcher()

@dp.message(CommandStart())
async def start(m: Message):
    await m.answer("Alive and running on a VPS.")

async def main():
    bot = Bot(os.environ["BOT_TOKEN"])
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Halte den Token aus deinem Code

Füg den BotFather-Token nie in bot.py ein — ein Push in ein öffentliches Repo und er ist geleakt. Leg ihn stattdessen in eine root-lesbare Env-Datei:

sudo tee /etc/tgbot.env >/dev/null <<'EOF'
BOT_TOKEN=123456:your-token-from-botfather
EOF
sudo chmod 600 /etc/tgbot.env

Ein geleakter Token ist ein /revoke in BotFather davon entfernt, behoben zu sein — aber ein geleaktes irgendetwas anderes auf einer geteilten Maschine ist schlimmer. Ein dedizierter VPS für den Bot ist ehrlich gesagt ein sichereres Zuhause für den Token als dein Alltags-Laptop: wenn er leakt, rotierst du einen Token, nicht dein ganzes Setup.

Der Teil, der ihn am Leben hält: systemd

Das ist, was einen Bot, der läuft, von einem Bot trennt, der oben bleibt. Erstelle den Dienst:

# /etc/systemd/system/tgbot.service
[Unit]
Description=Telegram bot (aiogram)
After=network-online.target
Wants=network-online.target

[Service]
User=botuser
WorkingDirectory=/home/botuser/tgbot
EnvironmentFile=/etc/tgbot.env
ExecStart=/home/botuser/tgbot/venv/bin/python bot.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Betreibe ihn als Nicht-root-Benutzer (botuser oben), nicht als root — falls der Bot je kompromittiert wird, willst du ihn eingeschachtelt. Dann:

sudo systemctl daemon-reload
sudo systemctl enable --now tgbot

Restart=always mit RestartSec=3 bedeutet, dass ein Absturz — ein schlechtes Update von Telegram, eine unbehandelte Ausnahme, ein OOM — den Bot in drei Sekunden zurückbringt, statt ihn tot zu lassen, bis du es bemerkst. Sieh ihm live zu:

journalctl -u tgbot -f

Das ist dein ganzes Logging-Setup. Keine Log-Dateien zu rotieren, kein zusätzliches Tooling — journald hat es bereits.

Aktualisieren ohne Ausfall-Drama

Wenn du den Code änderst oder aiogram hochziehst:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # falls die Bibliothek aktualisiert wird
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # bestätige, dass er sauber zurückkam

Der Neustart lässt den Bot für ein, zwei Sekunden blinken. Für einen Polling-Bot ist das für Nutzer unsichtbar — Telegram stellt Updates in eine Warteschlange und liefert sie, sobald der Bot sich neu verbindet.

Polling vs Webhook — die ehrliche Version

Das ist die Entscheidung, die Leute überdenken. Hier ist die einfache Version:

Polling (start_polling, was der Code oben nutzt) lässt den Bot Telegram auf einer langlebigen Verbindung fragen „irgendetwas Neues?“. Es braucht nichts als ausgehendes Internet — keine Domain, kein TLS, keine offenen eingehenden Ports. Es läuft gut hinter NAT. Für die überwältigende Mehrheit der Bots ist das richtig und du solltest hier aufhören.

Webhook lässt Telegram Updates zu dir pushen, was bedeutet, dass du einen öffentlichen HTTPS-Endpunkt offenlegen musst. Das erfordert eine Domain und einen erreichbaren eingehenden Port — also entweder eine dedizierte öffentliche IP oder einen Reverse-Proxy davor. Mehr Einrichtung, mehr Dinge, die kaputtgehen. Der Gewinn ist niedrigere Latenz und weniger Overhead im großen Maßstab — Tausende gleichzeitiger Nutzer, schweres Update-Volumen.

Die praktische Regel: beginne mit Polling auf einem NAT-Plan. Wechsle nur zu einem Webhook, wenn du Polling tatsächlich entwachsen bist — und wenn du es tust, dann verdient eine dedizierte IP ihren Platz, weil du diesen eingehenden HTTPS-Endpunkt brauchst.

Was der Betrieb kostet

Ein Polling-Bot ist leicht. Er ruht auf Telegrams Long-Poll und reagiert auf Nachrichten, also wartet die Maschine meist:

Die Registrierung ist nur E-Mail und du zahlst in USDC oder USDT auf Base oder Ethereum — keine Karte, kein Ausweis. Eine Karte funktioniert auch, aber die Auffahrt hat ein ~27-$-Minimum, also ist es für einen 3-$-Plan reibungsloser, einmal ein kleines Guthaben aufzuladen und Verlängerungen daraus ziehen zu lassen. Es ist reine CPU, ein Rechenzentrum in Deutschland — kein Thema für einen Bot, gut zu wissen, wenn du eine GPU oder eine bestimmte Region brauchtest.

Das ehrliche Fazit

Ein Telegram-Bot ist eines der günstigsten Dinge, die du selbst hosten kannst: eine 3-$-Maschine, eine systemd-Unit und Polling geben dir einen Bot, der durch Abstürze und Neustarts online ist, ohne dass du ihn babysittest. Greif zu einem Webhook und einem größeren Plan nur, wenn der Maßstab es tatsächlich erzwingt — nicht weil ein Tutorial dir sagte, Webhooks seien „besser“. Hol die kleine Maschine, halte den Token in einer Env-Datei, lass systemd die Verfügbarkeit handhaben, und — vor allem anderen — führe die Neuer-VPS-Sicherheits-Checkliste aus, damit die Maschine selbst abgeriegelt ist.


Bereit, deinen zu hosten? Ein Telegram-Bot nutzt kaum Ressourcen — der Nano-Plan (3 $/Mon.) betreibt ihn 24/7 ohne Aufhebens.

FAQ

Polling oder Webhook — was sollte ich nutzen?

Beginne mit Polling. Es funktioniert von jeder Maschine mit ausgehendem Internet — keine Domain, keine offenen Ports, kein TLS — und es reicht für die meisten Bots. Wechsle nur zu einem Webhook, wenn du im großen Maßstab läufst (Tausende Nutzer) oder die niedrigstmögliche Latenz brauchst; ein Webhook braucht einen öffentlichen HTTPS-Endpunkt, was eine Domain und einen erreichbaren eingehenden Port bedeutet (eine dedizierte IP oder einen Reverse-Proxy), also mehr bewegliche Teile. Für 95 % der Bots ist Polling auf einem kleinen VPS die richtige Antwort.

Brauche ich eine dedizierte IP oder eine Domain für einen Telegram-Bot?

Nicht für Polling — der Bot macht nur ausgehende Aufrufe an Telegram, also reicht ein NAT-Plan mit portweitergeleitetem SSH. Du brauchst einen öffentlichen HTTPS-Endpunkt (Domain + eingehender Port, d. h. eine dedizierte IP oder einen Reverse-Proxy) nur, wenn du in den Webhook-Modus wechselst. Die meisten Bots brauchen ihn nie.

Welche VPS-Größe braucht ein aiogram-Bot?

Die kleinste. Ein Polling-Bot wartet meist auf Telegrams Long-Poll, also bewältigt 1 vCPU / 1 GB (ein 3-$-Nano) die meisten Bots bequem. Skaliere nur hoch, wenn der Bot selbst die Schwerarbeit macht — eine Datenbank, Medienverarbeitung oder ein lokales Modell — was dich Richtung 2 GB (5 $) oder mehr drückt.

Wie halte ich den Bot am Laufen, nachdem ich mich abmelde?

Betreibe ihn als systemd-Dienst mit Restart=always. In deinem Terminal gestartet stirbt er, wenn SSH schließt; unter systemd übersteht er die Abmeldung, startet bei einem Absturz neu und kommt nach einem Neustart zurück. Das ist die Grenze zwischen einer Demo und etwas, worauf du dich verlassen kannst.

← Zurück zum BlogPläne & Preise ansehen →

Kommentare

Noch keine Kommentare. Sei der Erste.

Kommentar hinterlassen

Kommentare werden vor der Anzeige moderiert.