Ga naar hoofdinhoud
50% korting alle plannen, beperkte tijd. Vanaf $2.48/mo
Resterend: 11 min
Cloudarchitectuur en IT

Beste VPS voor een Telegram-bot: polling, webhooks, IPv4 en maandkosten

C Door Chike 11 min leestijd
Een Telegram-bot hosten op een VPS met doorlopende verbinding

De bot beantwoordt elk bericht totdat de laptop dichtgaat. Daarna krijgen gebruikers geen antwoord meer. Een kleine VPS lost dat op voor een paar dollar per maand. De beste VPS voor een Telegram-bot hangt af van de manier waarop de bot updates ontvangt: hij vraagt ze zelf bij Telegram op, of Telegram stuurt ze naar de bot.

Die keuze bepaalt welke poorten en welk certificaat nodig zijn en of een openbare IPv4-verbinding vereist is.

De korte versie

  • Gebruik long polling voor één bot op een VPS. Daarvoor zijn geen domein, certificaat of open poort nodig.
  • Webhooks vereisen HTTPS op poort 443, 80, 88 of 8443 en een openbaar IPv4-adres. Telegram levert geen webhooks via IPv6.
  • 512 MB of RAM is a workable start for one bot with no local database.
  • Houd de bot actief met systemd, of met het herstartbeleid van Docker als je al containers uitrolt.
  • Kies een aanbieder op basis van IPv4 en beschikbare RAM-reserve, niet alleen op de geadverteerde prijs.

Polling of webhooks: de keuze die je serververeisten bepaalt

Longpolling- en webhookverbindingen tussen Telegram en een VPS

Een Telegram-bot ontvangt updates op twee manieren. Bij long polling roept de bot getUpdates aan en houdt Telegram het verzoek open totdat een update binnenkomt of de wachttijd verstrijkt. Elke verbinding begint dus op je server. Bij een webhook registreer je eenmalig een URL met setWebhook, waarna Telegram elke update via HTTPS met een POST-verzoek naar die URL stuurt.

Vereiste Long polling (getUpdates) Webhook (setWebhook)
Inkomende poort Geen; alleen uitgaande verzoeken HTTPS op 443, 80, 88 of 8443
Openbaar IPv4 Niet vereist Vereist; IPv6 wordt niet ondersteund voor webhooks
Domein en certificaat Niet nodig Certificaat vereist; een domein is gebruikelijk, maar een zelfondertekend certificaat kan het IP-adres als CN gebruiken
Proces Draait continu Beantwoordt continu HTTPS-verzoeken

De webhookkolom volgt de webhookvereisten van Telegram.

Vraag de Bot API op om te zien welke methode je bot gebruikt:

curl "https://api.telegram.org/bot<YOUR_TOKEN>/getWebhookInfo"

Als het antwoord "url":"" bevat, is er geen webhook ingesteld en kan de bot long polling gebruiken. grammY gebruikt met bot.start() standaard long polling; python-telegram-bot gebruikt run_polling() of run_webhook().

Voor één bot op een eigen VPS zou ik polling gebruiken, wat ook het standaardadvies van grammY is. Webhooks zijn gunstiger als de server al een reverse proxy draait (een webserver die HTTPS-verzoeken doorstuurt naar je bot), als meerdere bots één HTTPS-endpoint delen, of op een serverlessplatform. Daarbij haalt Caddy het certificaat op en vernieuwt het zonder cronjob.

Een korte storing vertraagt berichten zonder ze te verliezen. Volgens de updateregels van de Bot API bewaart Telegram updates maximaal 24 uur totdat de bot ze ontvangt, bij beide methoden, en herhaalt het mislukte webhookverzoeken voordat het opgeeft.

Als de webhook zijn poort rechtstreeks gebruikt, beperk de toegang dan tot de bronbereiken die Telegram publiceert. Als een reverse proxy poort 443 deelt met andere sites, pas de beperking dan alleen toe op het webhookpad of gebruik het geheime token van Telegram in plaats van al het overige HTTPS-verkeer te blokkeren. De webhookhandleiding noemt twee bronbereiken en waarschuwt dat ze kunnen veranderen. Met UFW als firewall van de host:

sudo ufw allow 22/tcp    # keep SSH open before you enable the firewall

sudo ufw allow proto tcp from 149.154.160.0/20 to any port 443

sudo ufw allow proto tcp from 91.108.4.0/22 to any port 443

sudo ufw allow 80/tcp    # if your HTTPS setup uses HTTP validation or redirects HTTP to HTTPS

sudo ufw enable

Wijzig 443 als de webhook op 80, 88 of 8443 luistert. Deze regels beschermen een bot die rechtstreeks op de host draait. Volgens de Docker-firewalldocumentatie omzeilt een gepubliceerde poort UFW, waardoor een webhookcontainer gestart met -p 443:443 voor iedereen bereikbaar blijft. Stel ook een secret_token in bij setWebhook. Telegram stuurt dit mee in de header X-Telegram-Bot-Api-Secret-Token van elk verzoek, en je afhandelingscode weigert verzoeken zonder die waarde.

De bot actief houden: systemd of Docker

Een Telegram-bot draaiende houden met systemd of Docker

Een Telegram-bot 24/7 draaien betekent dat hij na crashes en herstarts opnieuw moet starten. Op een VPS doet systemd dat, of Docker als de bot als image wordt geleverd.

Een systemd-unit is een kort configuratiebestand dat het init-systeem vertelt hoe het een programma start en herstart. Maak /etc/systemd/system/telegram-bot.service aan:

[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target

[Service]
User=bot
WorkingDirectory=/opt/bot
EnvironmentFile=/opt/bot/.env
ExecStart=/opt/bot/venv/bin/python bot.py
# Node: ExecStart=/usr/bin/node bot.js
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Zet het token in een .env-bestand in de projectmap als BOT_TOKEN=... en lees het met os.environ["BOT_TOKEN"] (Node: process.env.BOT_TOKEN), zodat het buiten de code blijft. Kopieer het project vervolgens naar de juiste plek en start het:

sudo mkdir -p /opt/bot

sudo cp -r ~/your-bot/. /opt/bot/        # your project, after git clone or scp from your machine; include .env and requirements.txt

sudo apt install -y python3-venv         # Debian/Ubuntu

sudo useradd --system --no-create-home bot

sudo chown -R bot:bot /opt/bot

sudo -u bot python3 -m venv /opt/bot/venv

sudo -u bot /opt/bot/venv/bin/pip install -r /opt/bot/requirements.txt

# Node: skip the venv and pip commands above, then run:

cd /opt/bot && sudo -u bot npm ci

sudo chmod 600 /opt/bot/.env

sudo systemctl daemon-reload

sudo systemctl enable --now telegram-bot

systemctl status telegram-bot    # look for: Active: active (running)

sudo journalctl -u telegram-bot -f    # follow the bot's logs

Restart=always herstart de bot na zowel een normale afsluiting als een crash; on-failure slaat normale afsluitingen over, volgens de systemd.service-handleiding. RestartSec=5 laat tijd tussen pogingen, en WantedBy=multi-user.target samen met enable start de bot bij het opstarten. Als hij blijft herstarten, toont sudo journalctl -u telegram-bot -n 50 de fouttrace. Controleer eerst of BOT_TOKEN ontbreekt.

Bij Docker volstaat één optie:

docker run -d --name telegram-bot --restart unless-stopped --env-file .env your-bot-image

docker logs -f telegram-bot

In Compose is de regel restart: unless-stopped. De documentatie over Dockers herstartbeleid zegt dat de container terugkomt nadat hij stopt of de daemon herstart, maar niet nadat je hem zelf hebt gestopt. Dit dekt serverherstarts als Docker zelf bij het opstarten start, wat standaard gebeurt op Debian en Ubuntu. Voer elders sudo systemctl enable docker.service uit.

Mijn regel: voor één script op een kleine server gebruik je systemd, zonder extra daemon in het geheugen. Als je al images bouwt of andere containers draait, gebruik dan Docker en houd rekening met het RAM-verbruik van de daemon.

Geen van beide tools meldt dat je bot uitgevallen is. Een Uptime Kuma-pushmonitor op een tweede server kan dat wel. De bot roept periodiek de URL van de monitor aan, en Uptime Kuma waarschuwt je via Telegram wanneer die aanroepen stoppen.

Waar gratis hosting en thuisservers tekortschieten

Render schakelt een gratis webservice uit na 15 minuten zonder inkomend verkeer, en volgens de documentatie van Renders gratis abonnement duurt het ontwaken ongeveer een minuut. Een pollingbot ontvangt geen inkomend verkeer en wordt dus gestopt. Een webhookbot wordt gewekt door Telegrams POST-verzoek, met een koude start na rustige perioden. Of gratis hosting voor een Telegram-bot werkt, hangt dus af van de gebruikte methode.

De grammY-handleiding noemt serverlessplatforms geschikt voor webhooks, terwijl long polling een machine nodig heeft die dag en nacht draait. Fly.io rekent naar gebruik en vereist een geregistreerde betaalkaart.

Een Raspberry Pi of oude pc kan een pollingbot draaien zolang de machine, stroom en verbinding beschikbaar blijven. Voor webhooks thuis zijn ook een openbaar adres en portforwarding nodig. Voor een hobbybot kan elk van deze gratis mogelijkheden voldoende zijn.

Een VPS ondersteunt beide methoden tegen een vaste maandprijs.

Vijf VPS-aanbieders vergeleken voor een Telegram-bot

Vijf VPS-aanbieders vergeleken voor Telegram-bothosting

De tabel vergelijkt vijf betaalde instapabonnementen voor Telegram-bothosting tegen de geadverteerde maandprijzen per oktober 2026, exclusief belastingen. Actieprijzen worden waar van toepassing vermeld.

Aanbieder Specificaties instapabonnement Maandprijs Openbaar IPv4 Facturering
Cloudzy 1 vCPU (AMD EPYC), 512 MB DDR5, 20 GB NVMe, 1 TB dataverkeer $ 2,48 actie ($ 4,95 normaal) Inbegrepen, plus IPv6 Per uur of per maand
DigitalOcean 1 vCPU, 512 MiB, 10 GiB SSD, 500 GiB dataverkeer Vanaf $ 4 Inbegrepen Per seconde, met de maandprijs als maximum
Vultr 1 vCPU, 512 MB, 10 GB SSD, 512 GB dataverkeer Vanaf $ 2,50 alleen IPv6; vanaf $ 3,50 met IPv4 Alleen bij het abonnement van $ 3,50 Per uur of per maand
Hetzner (Duitsland/Finland) 2 vCPU, 4 GB, 40 GB SSD, 20 TB dataverkeer Vanaf € 5,49 excl. btw Extra, vanaf € 0,50/maand excl. btw (IPv6 gratis) Per uur, tot maximaal de maandprijs
Linode (Akamai) 1 vCPU, 1 GB, 25 GB opslag, 1 TB dataverkeer Vanaf $ 5 Inbegrepen Per uur of per maand

Vultrs IPv6-abonnement bevat geen IPv4 en bij Hetzner is het IPv4-adres niet in de prijs inbegrepen. Zonder IPv4 kunnen beide geen webhook ontvangen.

Een pollingbot kan uitsluitend op IPv6 draaien, omdat api.telegram.org een IPv6-adres heeft. Alle andere bestemmingen hebben dat ook nodig, waaronder pakketregisters, je Git-host en elke API die de bot aanroept. Controleer elke host voordat je kiest:

dig +short AAAA api.telegram.org

dig +short AAAA github.com

dig +short AAAA pypi.org    # repeat for every host your bot or its installs reach

Een leeg antwoord betekent dat die host geen IPv6-adres heeft.

Is 512 MB genoeg voor een Telegram-bot?

Ik zou één bot zonder lokale database op 512 MB starten. De documentatie van python-telegram-bot noemt geen geheugenvereiste. Wat de server deelt, bepaalt het verbruik: het besturingssysteem, de Docker-daemon als je die gebruikt, en een eventuele lokale database. Meet het.

free -m                   # "available" is your headroom; the Swap row shows swap use

ps -o rss,cmd -p "$(systemctl show -p MainPID --value telegram-bot)"   # bot's resident memory, in KB

docker stats --no-stream  # per-container memory, if the bot runs in Docker

journalctl -k | grep -i "out of memory"   # kernel OOM kills

Bij een out-of-memory-beëindiging (OOM) stopt de kernel een proces om RAM vrij te maken. systemd herstart de bot, dus die logregel kan het enige bewijs zijn. Ga naar 1 GB zodra OOM-beëindigingen optreden, swap voortdurend wordt gebruikt, of voordat je een lokale database of tweede bot toevoegt.

Welke kies je?

Voor één bot zou ik een abonnement van 512 MB met openbaar IPv4 inbegrepen kiezen. De aanbieder hangt vervolgens af van prijs, reservecapaciteit en waar je gebruikers zitten.

  • Laagste huidige maandprijs: Cloudzy voor $ 2,48 tijdens de actie met 50% korting, inclusief IPv4 en IPv6.
  • Laagste huidige prijs met IPv4: Cloudzy voor $ 2,48 tijdens de actie. Eigen IPv4 en IPv6 zijn inbegrepen.
  • 1 GB of headroom for Docker or a small database: Linode, from $5 a month.
  • Meerdere bots of een database, gebruikers in Europa: Hetzner, met de meeste middelen per euro in deze tabel als het abonnement beschikbaar is (in oktober 2026 stond het als niet beschikbaar vermeld). Tel voor webhooks de IPv4-kosten erbij op.
  • Meer opslag en dataverkeer bij 512 MB: Cloudzy. Van de abonnementen van 512 MB biedt het de meeste opslag (20 GB NVMe tegenover 10) en het meeste dataverkeer (1 TB tegenover ongeveer 500 GB), inclusief IPv4 en IPv6. Met de huidige actieprijs is Cloudzy ook goedkoper dan de andere instapabonnementen in deze vergelijking.

Met de huidige actieprijs combineert Cloudzy de laagste maandprijs in deze vergelijking met meer opslag en dataverkeer dan de andere abonnementen van 512 MB. Het Cloudzy-abonnement van 512 MB wordt per uur afgerekend en heeft een geld-teruggarantie van 14 dagen, zodat je de bot enkele dagen kunt uitproberen voordat je je vastlegt. Kies de locatie die het dichtst bij je gebruikers ligt, implementeer een Cloudzy Linux-VPS en voeg de systemd-unit van hierboven toe.

Veelgestelde vragen

Wat is de goedkoopste VPS waarop een Telegram-bot kan draaien?

Per oktober 2026 is het Cloudzy-abonnement van 512 MB het goedkoopste van de vijf: $ 2,48 per maand tijdens de actie met 50% korting, inclusief eigen IPv4 en IPv6. De normale prijs is $ 4,95 per maand. Vultrs optie met alleen IPv6 begint iets hoger, vanaf $ 2,50.

Waarom hebben Telegram-webhooks HTTPS nodig?

Telegram vereist SSL/TLS voor webhooks ongeacht de gebruikte poort, volgens de webhookhandleiding. Het weigert gewoon HTTP en accepteert TLS 1.2 of nieuwer. Zonder TLS zou elk POST-verzoek de berichten van je gebruikers onversleuteld versturen. Een Let's Encrypt-certificaat werkt, net als een zelfondertekend certificaat dat je uploadt met setWebhook.

Kan een Telegram-bot draaien op 512 MB RAM?

Meestal wel, voor één bot zonder lokale database. Controleer het kernellog op beëindigingen wegens geheugentekort en ga naar 1 GB als ze optreden of wanneer je een database toevoegt.

Hoe houd ik een Telegram-bot actief na een herstart?

Schakel de systemd-service in met sudo systemctl enable --now telegram-bot, of start de container met --restart unless-stopped en schakel docker.service in zodat Docker bij het opstarten start.

Beperkt Telegram de aanvraagsnelheid van bots per IP-adres?

Telegrams bot-FAQ over limieten beschrijft limieten per bot en per chat; overstappen naar een nieuwe server mag je niet zien als een manier om ze te omzeilen. Bij overschrijding retourneert de API HTTP 429 met een waarde voor retry_after. Wacht zoveel seconden voordat je het opnieuw probeert.

Welke serverregio kies ik voor een Telegram-bot?

Kies de locatie het dichtst bij je gebruikers en de diensten die je bot aanroept, en meet vervolgens de verbindingstijd vanaf elke kandidaat met curl -o /dev/null -s -w '%{time_connect}\n' https://api.telegram.org.

Delen

Discussie

Reacties

Log in om mee te praten.

Meer van de blog

Blijf lezen.

Klaar om uit te rollen? Vanaf $2,48/mnd.

Onafhankelijke cloud, sinds 2008. AMD EPYC, NVMe, 40 Gbps. 14 dagen niet-goed-geld-terug.