Gå til hovedindhold
50% rabat alle planer, tidsbegrænset. Fra $2.48/mo
Tilbage: 11 min.
Cloud-arkitektur og IT

Bedste VPS til en Telegram-bot: polling, webhooks, IPv4 og månedspris

C Af Chike 11 min læsning
Hosting af en Telegram-bot på en VPS med konstant forbindelse

Botten svarer på alle beskeder, indtil den bærbare bliver lukket. Derefter får brugerne intet svar. En lille VPS løser det for få dollars om måneden. Den bedste VPS til en Telegram-bot afhænger af, hvordan botten modtager opdateringer: enten beder den Telegram om dem, eller også sender Telegram dem til botten.

Det valg afgør, hvilke porte og hvilket certifikat du skal bruge, og om en offentlig IPv4-forbindelse er nødvendig.

Den korte version

  • Brug long polling til én bot på en VPS. Det kræver hverken domæne, certifikat eller åben port.
  • Webhooks kræver HTTPS på port 443, 80, 88 eller 8443 og en offentlig IPv4-adresse. Telegram leverer ikke webhooks over IPv6.
  • 512 MB of RAM is a workable start for one bot with no local database.
  • Hold botten kørende med systemd eller Dockers genstartspolitik, hvis du allerede distribuerer containere.
  • Vælg udbyder efter IPv4 og ledig RAM-kapacitet, ikke kun listeprisen.

Polling eller webhooks: valget, der bestemmer serverkravene

Long polling- og webhookforbindelser mellem Telegram og en VPS

En Telegram-bot modtager opdateringer på en af to måder. Med long polling kalder botten getUpdates, og Telegram holder forespørgslen åben, indtil der kommer en opdatering, eller tidsgrænsen udløber. Alle forbindelser starter derfor fra din server. Med en webhook registrerer du en URL én gang med setWebhook, hvorefter Telegram sender hver opdatering til den med POST over HTTPS.

Krav Long polling (getUpdates) Webhook (setWebhook)
Indgående port Ingen; kun udgående forespørgsler HTTPS på 443, 80, 88 eller 8443
Offentlig IPv4 Ikke påkrævet Påkrævet; IPv6 understøttes ikke til webhooks
Domæne og certifikat Ikke nødvendigt Certifikat påkrævet; et domæne er normalt, men et selvsigneret certifikat kan bruge IP-adressen som CN
Proces Kører kontinuerligt Besvarer HTTPS-forespørgsler kontinuerligt

Webhookkolonnen følger Telegrams krav til webhooks.

Spørg Bot API for at se, hvilken metode din bot bruger:

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

Hvis svaret indeholder "url":"", er der ikke konfigureret en webhook, og botten kan bruge long polling. grammY's bot.start() bruger long polling som standard; python-telegram-bot bruger run_polling() eller run_webhook().

Til én bot på sin egen VPS ville jeg vælge polling, som også er grammY's standardanbefaling. Webhooks er bedst, når maskinen allerede kører en reverse proxy (en webserver, der videresender HTTPS-forespørgsler til botten), når flere bots deler ét HTTPS-endpoint, eller på en serverless-platform. Her henter og fornyer Caddy certifikatet uden et cronjob.

En kort afbrydelse forsinker beskeder uden at miste dem. Ifølge Bot API's regler for opdateringer gemmer Telegram opdateringer i op til 24 timer, indtil botten modtager dem, med begge metoder, og gentager mislykkede webhookforespørgsler, før det giver op.

Hvis webhooken bruger sin port direkte, skal du begrænse porten til Telegrams offentliggjorte kildeadresseområder. Hvis port 443 deles af en reverse proxy, der betjener andre websites, skal begrænsningen kun gælde webhookens sti, eller du kan bruge Telegrams hemmelige token i stedet for at blokere al anden HTTPS-trafik. Webhookvejledningen angiver to kildeadresseområder og advarer om, at de kan ændre sig. Med UFW som værtens firewall:

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

Skift 443, hvis webhooken lytter på 80, 88 eller 8443. Disse regler beskytter en bot, der kører direkte på værten. Dockers firewalldokumentation oplyser, at en publiceret port omgår UFW, så en webhookcontainer startet med -p 443:443 stadig er åben for alle. Angiv også et secret_token i setWebhook. Telegram sender det med i headeren X-Telegram-Bot-Api-Secret-Token i hver forespørgsel, og din håndteringskode afviser forespørgsler uden det.

Hold botten kørende: systemd eller Docker

Hold en Telegram-bot kørende med systemd eller Docker

At køre en Telegram-bot døgnet rundt kræver genstart efter nedbrud og genstart af maskinen. På en VPS klarer systemd det, eller Docker, hvis botten leveres som et image.

En systemd-unit er en kort konfigurationsfil, der fortæller init-systemet, hvordan det skal starte og genstarte et program. Opret /etc/systemd/system/telegram-bot.service:

[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

Læg tokenet i en .env-fil i projektmappen som BOT_TOKEN=..., og læs det med os.environ["BOT_TOKEN"] (Node: process.env.BOT_TOKEN), så det holdes ude af koden. Kopiér derefter projektet på plads, og start det:

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 genstarter botten efter både normal afslutning og nedbrud; on-failure springer normale afslutninger over ifølge manualen til systemd.service. RestartSec=5 giver mellemrum mellem forsøgene, og WantedBy=multi-user.target sammen med enable starter botten ved systemstart. Hvis den bliver ved med at genstarte, viser sudo journalctl -u telegram-bot -n 50 fejlsporet. Kontrollér først, om BOT_TOKEN mangler.

I Docker svarer det til ét flag:

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

docker logs -f telegram-bot

I Compose er linjen restart: unless-stopped. Dokumentationen for Dockers genstartspolitikker siger, at containeren starter igen, når den afsluttes, eller daemonen genstarter, men ikke når du selv har stoppet den. Det dækker genstart af maskinen, hvis Docker selv starter ved systemstart, hvilket det gør som standard på Debian og Ubuntu. Kør ellers sudo systemctl enable docker.service.

Min regel: ét script på en lille maskine får systemd uden en ekstra daemon i hukommelsen. Hvis du allerede bygger images eller kører andre containere, så brug Docker, og medregn daemonens RAM-forbrug.

Ingen af værktøjerne fortæller dig, at botten er nede. Det kan en Uptime Kuma-pushmonitor på en anden server. Botten kalder monitorens URL med faste intervaller, og Uptime Kuma advarer dig i Telegram, når kaldene ophører.

Hvor gratis hosting og hjemmeservere kommer til kort

Render lukker en gratis webtjeneste ned efter 15 minutter uden indgående trafik, og Renders dokumentation for gratisniveauet angiver en opvågningstid på cirka ét minut. En pollingbot modtager ingen indgående trafik og bliver derfor stoppet. En webhookbot vækkes af Telegrams POST, med en koldstart efter stille perioder. Om gratis hosting til en Telegram-bot fungerer, afhænger altså af bottens metode.

grammY's vejledning nævner serverless-platforme som velegnede til webhooks, mens long polling kræver en maskine, der kører døgnet rundt. Fly.io afregner efter forbrug og kræver et registreret betalingskort.

En Raspberry Pi eller gammel pc kan køre en pollingbot, så længe maskinen, strømmen og forbindelsen fungerer. Webhooks hjemmefra kræver også en offentlig adresse og portvideresendelse. Til en hobbybot kan begge gratis muligheder være nok.

En VPS passer til begge metoder til en fast månedspris.

Fem VPS-udbydere sammenlignet til en Telegram-bot

Fem VPS-udbydere sammenlignet til hosting af Telegram-bots

Tabellen sammenligner fem betalte basisabonnementer til hosting af Telegram-bots til de annoncerede månedspriser pr. oktober 2026, før afgifter. Kampagnepriser er angivet, hvor det er relevant.

Udbyder Basisabonnementets specifikationer Månedspris Offentlig IPv4 Fakturering
Cloudzy 1 vCPU (AMD EPYC), 512 MB DDR5, 20 GB NVMe, 1 TB dataoverførsel 2,48 USD kampagne (4,95 USD normalt) Inkluderet, plus IPv6 Pr. time eller måned
DigitalOcean 1 vCPU, 512 MiB, 10 GiB SSD, 500 GiB dataoverførsel Fra 4 USD Inkluderet Pr. sekund, med månedsprisen som loft
Vultr 1 vCPU, 512 MB, 10 GB SSD, 512 GB dataoverførsel Fra 2,50 USD kun IPv6; fra 3,50 USD med IPv4 Kun med abonnementet til 3,50 USD Pr. time eller måned
Hetzner (Tyskland/Finland) 2 vCPU, 4 GB, 40 GB SSD, 20 TB dataoverførsel Fra 5,49 EUR ekskl. moms Ekstra, fra 0,50 EUR/måned ekskl. moms (IPv6 gratis) Pr. time, højst månedsprisen
Linode (Akamai) 1 vCPU, 1 GB, 25 GB lager, 1 TB dataoverførsel Fra 5 USD Inkluderet Pr. time eller måned

Vultrs abonnement med kun IPv6 har ikke IPv4, og Hetzners pris inkluderer ikke IPv4-adressen. Uden den kan ingen af dem modtage en webhook.

En pollingbot kan køre udelukkende på IPv6, fordi api.telegram.org har en IPv6-adresse. Alt andet, den tilgår, skal også have en, herunder pakkeregistre, din Git-vært og hver API, den kalder. Kontrollér hver vært, før du vælger:

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

Et tomt svar betyder, at værten ikke har en IPv6-adresse.

Er 512 MB nok til en Telegram-bot?

Jeg ville starte én bot uden lokal database på 512 MB. Dokumentationen til python-telegram-bot angiver ikke et hukommelseskrav. Det afhænger af, hvad der deler maskinen: operativsystemet, Docker-daemonen, hvis den bruges, og eventuelle lokale databaser. Mål forbruget.

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

Ved en out-of-memory-afslutning (OOM) stopper kernen en proces for at frigøre RAM. systemd genstarter botten, så den loglinje kan være dit eneste spor. Skift til 1 GB, når OOM-afslutninger opstår, swap bruges konstant, eller inden du tilføjer en lokal database eller endnu en bot.

Hvilken skal du vælge?

Til én bot ville jeg vælge et abonnement med 512 MB og offentlig IPv4 inkluderet. Valget af udbyder afhænger derefter af pris, ledig kapacitet og brugernes placering.

  • Laveste aktuelle månedspris: Cloudzy til 2,48 USD under kampagnen med 50 % rabat, med IPv4 og IPv6 inkluderet.
  • Laveste aktuelle pris med IPv4: Cloudzy til 2,48 USD under kampagnen. Dedikeret IPv4 og IPv6 er inkluderet.
  • 1 GB of headroom for Docker or a small database: Linode, from $5 a month.
  • Flere bots eller en database, brugere i Europa: Hetzner, med flest ressourcer pr. euro i tabellen, når abonnementet er på lager (det var angivet som utilgængeligt i oktober 2026). Læg IPv4-gebyret til ved webhooks.
  • Mere disk og dataoverførsel med 512 MB: Cloudzy. Blandt abonnementerne med 512 MB har det mest lager (20 GB NVMe mod 10) og dataoverførsel (1 TB mod cirka 500 GB), med IPv4 og IPv6 inkluderet. Til den aktuelle kampagnepris er Cloudzy også billigere end de øvrige basisabonnementer i sammenligningen.

Til den aktuelle kampagnepris kombinerer Cloudzy den laveste månedspris i sammenligningen med mere lager og dataoverførsel end de øvrige abonnementer med 512 MB. Cloudzys abonnement med 512 MB afregnes pr. time og har 14 dages pengene-tilbage-garanti, så du kan køre botten i nogle dage, før du beslutter dig. Vælg placeringen nærmest dine brugere, opret en Linux-VPS hos Cloudzy, og tilføj systemd-unitten ovenfor.

Ofte stillede spørgsmål

Hvilken VPS er billigst til en Telegram-bot?

Pr. oktober 2026 er Cloudzys abonnement med 512 MB det billigste af de fem til 2,48 USD om måneden under kampagnen med 50 % rabat, med dedikeret IPv4 og IPv6 inkluderet. Normalprisen er 4,95 USD om måneden. Vultrs mulighed med kun IPv6 starter lidt højere, fra 2,50 USD.

Hvorfor kræver Telegram-webhooks HTTPS?

Telegram kræver SSL/TLS til webhooks uanset porten ifølge sin webhookvejledning. Det afviser almindelig HTTP og accepterer TLS 1.2 eller nyere. Uden TLS ville hver POST sende brugernes beskeder ukrypteret. Et Let's Encrypt-certifikat virker, og det gør et selvsigneret certifikat uploadet med setWebhook også.

Kan en Telegram-bot køre med 512 MB RAM?

Normalt ja, for én bot uden lokal database. Hold øje med kerneloggen efter afslutninger på grund af hukommelsesmangel, og skift til 1 GB, hvis de opstår, eller når du tilføjer en database.

Hvordan holder jeg en Telegram-bot kørende efter en genstart?

Aktivér dens systemd-tjeneste med sudo systemctl enable --now telegram-bot, eller kør containeren med --restart unless-stopped, og aktivér docker.service, så Docker starter ved systemstart.

Begrænser Telegram bots' forespørgselsrate efter IP-adresse?

Telegrams bot-FAQ om grænser beskriver dem pr. bot og pr. chat; et skift til en ny server bør ikke betragtes som en måde at omgå grænserne på. Ved overskridelse returnerer API'en HTTP 429 med en retry_after-værdi. Vent det antal sekunder, før du prøver igen.

Hvilken serverregion skal jeg vælge til en Telegram-bot?

Vælg placeringen nærmest dine brugere og de tjenester, botten kalder, og mål derefter forbindelsestiden fra hver kandidat med curl -o /dev/null -s -w '%{time_connect}\n' https://api.telegram.org.

Del

Diskussion

Kommentarer

Log ind for at deltage i diskussionen.

Mere fra bloggen

Læs videre.

Klar til at udrulle? Fra 2,48 $/md.

Uafhængig cloud siden 2008. AMD EPYC, NVMe, 40 Gbps. 14 dages pengene-tilbage-garanti.