Letni upał — wszystko się topi, nawet nasze ceny.−25%−25% na każdy plan roczny, do 31 sierpniaZobacz plany
EQVPS
Zacznij

Uruchom bota Telegram 24/7 na VPS: aiogram, systemd, polling vs webhook

4 lip 2026 · 5 min czytania · Zespół EQVPS

Napisałeś bota Telegram z aiogram, przetestowałeś lokalnie i działa. Teraz musi żyć gdzieś, co nie śpi, gdy zamkniesz laptop. Mały VPS to naturalny dom — ale jest przepaść między python bot.py w sesji SSH a botem, który faktycznie pozostaje włączony przez awarie, restarty i spadki Twojego połączenia.

To wersja produkcyjna: virtualenv, token trzymany poza kodem, usługa systemd, która wskrzesza bota sama, i jasna odpowiedź na pytanie, które wszyscy w końcu zadają — polling czy webhook?

Dlaczego nie po prostu uruchomić go na laptopie

Bot potrzebuje stałego wychodzącego połączenia z Telegramem. Twój laptop zasypia, restartuje się po aktualizacje i skacze między sieciami — każde z tych zrzuca bota, a użytkownicy trafiają na ścianę ciszy. VPS trzyma to połączenie całą dobę. To cały powód, by przenieść go z maszyny, i ten sam powód, dla którego bot Discord też należy na serwer.

Jeśli chcesz po prostu najszybszej ścieżki „postaw go online” z minimalnym botem, przewodnik hostowania bota Telegram to obejmuje. Ten tekst idzie poziom głębiej: aiogram, bezpieczna obsługa tokenu i wiedza, kiedy skalować.

Bot, w virtualenv

Zaloguj się przez SSH i trzymaj bota izolowanego we własnym venv — nie instaluj pakietów systemowo, to robi bałagan z aktualizacjami i sprzątaniem później:

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

Minimalny bot aiogram 3, który czyta token ze środowiska, nie ze zakodowanego na twardo ciągu:

# 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("Żywy i działający na VPS.")

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

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

Trzymaj token poza kodem

Nigdy nie wklejaj tokenu BotFather do bot.py — jeden push do publicznego repozytorium i wyciekł. Umieść go zamiast tego w pliku env czytelnym dla root:

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

Wyciekły token jest o jedno /revoke w BotFather od naprawienia — ale wyciekłe cokolwiek innego na współdzielonej maszynie jest gorsze. Dedykowany VPS dla bota jest szczerze bezpieczniejszym domem dla tokenu niż Twój codzienny laptop: jeśli wycieknie, rotujesz jeden token, nie całą konfigurację.

Część, która utrzymuje go przy życiu: systemd

To, co oddziela bota, który działa, od bota, który pozostaje działający. Utwórz usługę:

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

Uruchom go jako użytkownik inny niż root (botuser powyżej), nie root — jeśli bot kiedyś zostanie skompromitowany, chcesz go mieć zamkniętego. Potem:

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

Restart=always z RestartSec=3 oznacza, że awaria — zła aktualizacja od Telegrama, nieobsłużony wyjątek, OOM — przywraca bota w trzy sekundy zamiast zostawiać go martwym, aż zauważysz. Obserwuj na żywo:

journalctl -u tgbot -f

To cała Twoja konfiguracja logowania. Żadnych plików logów do rotowania, żadnych dodatkowych narzędzi — journald już to ma.

Aktualizowanie bez dramatu przestoju

Gdy zmieniasz kod lub podbijasz aiogram:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # jeśli aktualizujesz bibliotekę
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # potwierdź, że wrócił czysto

Restart mruga botem na sekundę lub dwie. Dla bota odpytującego to niewidoczne dla użytkowników — Telegram kolejkuje aktualizacje i dostarcza je, gdy bot się połączy ponownie.

Polling vs webhook — uczciwa wersja

To decyzja, którą ludzie przemyśliwają. Oto zwykła wersja:

Polling (start_polling, tego używa kod powyżej) sprawia, że bot pyta Telegram „coś nowego?” na długotrwałym połączeniu. Nie potrzebuje niczego poza wychodzącym internetem — bez domeny, bez TLS, bez otwartych portów przychodzących. Działa dobrze za NAT. Dla przytłaczającej większości botów to poprawne i powinieneś się tu zatrzymać.

Webhook sprawia, że Telegram wypycha aktualizacje do Ciebie, co oznacza, że musisz wystawić publiczny punkt końcowy HTTPS. To wymaga domeny i osiągalnego portu przychodzącego — więc albo dedykowanego publicznego IP, albo reverse proxy z przodu. Więcej konfiguracji, więcej rzeczy, które się psują. Zapłatą jest niższa latencja i mniejszy narzut na dużej skali — tysiące jednoczesnych użytkowników, ciężki wolumen aktualizacji.

Praktyczna zasada: zacznij od pollingu na planie NAT. Przejdź na webhook dopiero, gdy faktycznie przerośniesz polling — a jeśli tak, to wtedy dedykowane IP zarabia na swoje miejsce, bo potrzebujesz tego przychodzącego punktu końcowego HTTPS.

Ile kosztuje uruchomienie

Bot odpytujący jest lekki. Bezczynnie czeka na long-poll Telegrama i reaguje na wiadomości, więc maszyna głównie czeka:

Rejestracja jest tylko e-mailem, a płacisz w USDC lub USDT na Base lub Ethereum — bez karty, bez dokumentu. Karta też działa, ale on-ramp ma minimum ~27 $, więc dla planu za 3 $ wygodniej doładować małe saldo raz i pozwolić odnowieniom z niego czerpać. To tylko CPU, jedno centrum danych w Niemczech — nieistotne dla bota, warto wiedzieć, jeśli potrzebowałbyś GPU lub konkretnego regionu.

Uczciwa konkluzja

Bot Telegram to jedna z najtańszych rzeczy, które możesz hostować samodzielnie: maszyna za 3 $, jednostka systemd i polling dają Ci bota, który jest online przez awarie i restarty bez Twojego pilnowania. Sięgnij po webhook i większy plan tylko, gdy skala faktycznie to wymusza — nie dlatego, że tutorial powiedział Ci, że webhooki są „lepsze”. Weź małą maszynę, trzymaj token w pliku env, pozwól systemd obsłużyć dostępność i — przed czymkolwiek innym — uruchom listę kontrolną bezpieczeństwa nowego VPS, by sama maszyna była zablokowana.


Gotowy hostować swojego? Bot Telegram ledwie zużywa zasoby — plan Nano (3 $/mies.) uruchamia go 24/7 bez zamieszania.

FAQ

Polling czy webhook — którego użyć?

Zacznij od pollingu. Działa z dowolnej maszyny z wychodzącym internetem — bez domeny, bez otwartych portów, bez TLS — i to w zupełności wystarcza dla większości botów. Przełącz się na webhook tylko, gdy działasz na skalę (tysiące użytkowników) lub potrzebujesz najniższej możliwej latencji; webhook potrzebuje publicznego punktu końcowego HTTPS, co oznacza domenę i osiągalny port przychodzący (dedykowane IP lub reverse proxy), więc to więcej ruchomych części. Dla 95% botów polling na małym VPS to właściwa odpowiedź.

Czy potrzebuję dedykowanego IP lub domeny dla bota Telegram?

Nie dla pollingu — bot wykonuje tylko wychodzące wywołania do Telegrama, więc plan NAT z przekierowanym SSH wystarczy. Publicznego punktu końcowego HTTPS (domena + port przychodzący, czyli dedykowane IP lub reverse proxy) potrzebujesz tylko, jeśli przełączysz się w tryb webhook. Większość botów nigdy tego nie potrzebuje.

Jakiego rozmiaru VPS potrzebuje bot aiogram?

Najmniejszego. Bot odpytujący głównie czeka na long-poll Telegrama, więc 1 vCPU / 1 GB (Nano za 3 $) obsługuje większość botów wygodnie. Zwiększaj rozmiar tylko, gdy sam bot wykonuje ciężką pracę — baza danych, przetwarzanie mediów lub lokalny model — co pcha Cię ku 2 GB (5 $) lub więcej.

Jak utrzymać bota działającego po wylogowaniu?

Uruchom go jako usługę systemd z Restart=always. Uruchomiony w terminalu umiera, gdy SSH się zamyka; pod systemd przetrwa wylogowanie, restartuje się przy awarii i wraca po restarcie. To granica między demem a czymś, na czym możesz polegać.

← Powrót do blogaZobacz plany i ceny →

Komentarze

Brak komentarzy. Bądź pierwszy.

Zostaw komentarz

Komentarze są moderowane przed pojawieniem się.