EQVPS
Anza

Endesha Telegram bot 24/7 kwenye VPS: aiogram, systemd, polling dhidi ya webhook

Jul 4, 2026 · 5 min read · EQVPS Team

Uliandika Telegram bot na aiogram, ukaitest locally, nayo inafanya kazi. Sasa lazima iishi mahali pasipolala unapofunga laptop. VPS ndogo ni gharama ya asili — lakini kuna pengo kati ya python bot.py katika kikao cha SSH na bot inayobaki juu dhati kupitia crashes, reboots, na muunganisho wako kudondoka.

Hii ni version ya production: virtualenv, token iliyowekwa nje ya code yako, huduma ya systemd inayoifufua bot yenyewe, na jibu la macho-wazi kwa swali kila mtu hatimaye huuliza — polling au webhook?

Kwa nini usiiendeshe tu kwenye laptop yako

Bot inahitaji muunganisho thabiti unaotoka kwa Telegram. Laptop yako hulala, huwaka upya kwa updates, na huruka kati ya networks — kila mmoja wa hizo hudondosha bot, na watumiaji hugonga ukuta wa ukimya. VPS hushikilia muunganisho huo mchana kutwa. Hiyo ndiyo sababu yote ya kuihamisha kutoka mashine yako, nayo ni sababu ileile Discord bot iko kwenye seva pia.

Kama unataka tu njia ya haraka zaidi ya "iweke mtandaoni" na bot ndogo, host-a-Telegram-bot walkthrough inaifunika. Kipande hiki huenda ngazi moja zaidi: aiogram, token handling salama, na kujua lini kuscale.

Bot, katika virtualenv

SSH ndani na uweke bot ikiwa isolated katika venv yake — usisakinishe packages system-wide, hufanya upgrades na cleanup kuwa gharabu baadaye:

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

aiogram 3 bot ndogo inayosoma token yake kutoka environment, si kutoka hard-coded 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())

Weka token nje ya code yako

Kamwe usipaste BotFather token katika bot.py — push moja kwa public repo nayo imevuja. Iweke katika root-readable env file badala yake:

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

Token iliyovuja iko /revoke moja katika BotFather kutoka kurekebishwa — lakini kitu kingine chochote kilichovuja kwenye shared machine ni mbaya zaidi. VPS ya kujitolea kwa bot ni kwa uaminifu gharama salama zaidi kwa token kuliko laptop yako ya kila siku: ikivuja, unagharibisha token moja, si usanidi wako wote.

Sehemu inayoiweka hai: systemd

Hii ndiyo inayotenganisha bot inayoendesha na bot inayobaki ikiendesha. Unda huduma:

# /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

Iendeshe kama non-root user (botuser hapo juu), si root — kama bot itasambaratika, unaitaka imefungwa. Kisha:

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

Restart=always na RestartSec=3 maana yake crash — update mbaya kutoka Telegram, unhandled exception, OOM — huleta bot tena kwa sekunde tatu badala ya kuiacha imekufa hadi ugundue. Iangalie live:

journalctl -u tgbot -f

Huo ndio logging setup wako wote. Hakuna log files za kugeuza, hakuna tooling ya ziada — journald tayari inayo.

Kuupdate bila drama ya downtime

Unapobadilisha code au kubump aiogram:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # kama unaupgrade library
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # thibitisha ilirudi safi

Restart inapepesa bot kwa sekunde moja au mbili. Kwa polling bot hiyo haionekani kwa watumiaji — Telegram huqueue updates na kuzipeleka mara bot inaporeconnect.

Polling dhidi ya webhook — version ya uaminifu

Huu ni uamuzi watu huufikiri kupita kiasi. Hii ndio version sahihi:

Polling (start_polling, ambayo code hapo juu inatumia) huifanya bot kuuliza Telegram "kuna kipya?" kwenye muunganisho wa muda mrefu. Haihitaji chochote isipokuwa outbound internet — hakuna domain, hakuna TLS, hakuna ports zilizo wazi zinazoingia. Inaendesha vizuri nyuma ya NAT. Kwa wingi mkubwa wa bots, hii ni sahihi nawe unapaswa kusimama hapa.

Webhook huifanya Telegram kusukuma updates kwako, ambayo maana yake lazima ufunue public HTTPS endpoint. Hiyo inahitaji domain na port inayofikika inayoingia — hivyo ama dedicated public IP au reverse proxy mbele. Sanidi zaidi, vitu zaidi vinavyovunjika. Faida ni latency ya chini na overhead ndogo kwa kiwango kikubwa — maelfu ya watumiaji wa wakati mmoja, wingi mzito wa updates.

Kanuni ya vitendo: anza na polling kwenye mpango wa NAT. Hamia webhook tu unapokuwa dhati umezidi polling — na kama unafanya, hapo ndipo dedicated IP inakama nafasi yake, kwa sababu unahitaji inbound HTTPS endpoint hiyo.

Inagharimu nini kuendesha

Polling bot ni nyepesi. Inakaa idle kwenye long-poll ya Telegram na kuitikia messages, hivyo sanduku kwa kiasi kikubwa husubiri:

Signup ni barua-pepe-pekee nawe unalipa kwa USDC au USDT kwenye Base au Ethereum — hakuna kadi, hakuna ID. Kadi inafanya kazi pia, lakini on-ramp ina kiwango cha chini cha ~$27, hivyo kwa mpango wa $3 ni laini zaidi kuongeza salio dogo mara moja na kuacha renewals zichote kutoka kwake. Ni CPU-pekee, datacenter moja Ujerumani — non-issue kwa bot, inastahili kujua kama ulihitaji GPU au eneo mahususi.

Mstari wa chini wa uaminifu

Telegram bot ni mojawapo ya vitu nafuu zaidi unavyoweza kujihifadhi: sanduku la $3, systemd unit, na polling hukupa bot iliyo mtandaoni kupitia crashes na reboots bila wewe kuilea. Fikia webhook na mpango mkubwa zaidi tu wakati kiwango kinapolazimisha dhati — si kwa sababu tutorial ilikuambia webhooks ni "bora." Pata sanduku ndogo, weka token katika env file, acha systemd ishughulikie uptime, na — kabla ya chochote kingine — endesha new-VPS security checklist ili sanduku lenyewe liwe limefungwa.


Uko tayari kuhifadhi yako? Telegram bot hutumia rasilimali kwa shida — mpango wa Nano ($3/mwezi) huiendesha 24/7 bila usumbufu.

FAQ

Polling au webhook — nitumie ipi?

Anza na polling. Inafanya kazi kutoka sanduku lolote lenye outbound internet — hakuna domain, hakuna ports zilizo wazi, hakuna TLS — nayo inatosha kwa bots wengi. Badilisha kwa webhook tu unapoendesha kwa kiwango kikubwa (maelfu ya watumiaji) au unahitaji latency ya chini kabisa; webhook inahitaji public HTTPS endpoint, ambayo maana yake domain na port inayofikika inayoingia (dedicated IP, au reverse proxy), hivyo ni vipande vingi zaidi vya kusonga. Kwa 95% ya bots, polling kwenye VPS ndogo ndiyo jibu sahihi.

Je ninahitaji dedicated IP au domain kwa Telegram bot?

Si kwa polling — bot hufanya outbound calls kwa Telegram tu, hivyo mpango wa NAT wenye port-forwarded SSH unatosha. Unahitaji public HTTPS endpoint (domain + inbound port, yaani dedicated IP au reverse proxy) tu kama unabadilisha kwa webhook mode. Bots wengi kamwe hawaihitaji.

aiogram bot inahitaji VPS ya saizi gani?

Ndogo zaidi. Polling bot kwa kiasi kikubwa husubiri long-poll ya Telegram, hivyo 1 vCPU / 1 GB (Nano ya $3) hushughulikia bots wengi kwa starehe. Panda saizi tu wakati bot yenyewe hufanya kazi nzito — hifadhidata, media processing, au modeli ya ndani — ambayo hukusukuma kuelekea 2 GB ($5) au zaidi.

Ninawekaje bot iendelee kuendesha baada ya kuingia nje?

Iendeshe kama huduma ya systemd na Restart=always. Iliyoanzishwa kwenye terminal yako inakufa SSH inapofunga; chini ya systemd inabaki kupitia logout, restart kwenye crash, na inarudi baada ya reboot. Hiyo ndiyo mstari kati ya demo na kitu unaweza kutegemea.

← Back to blogSee plans & pricing →

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.