Bot Telegram, który działa tylko, gdy Twój laptop jest otwarty, tak naprawdę nie działa — robi demo. By był faktycznie online, odpowiadając o 3 nad ranem, przetrwał Twoje restarty i własne awarie, musi żyć na serwerze. Oto cała ścieżka, od początku do końca, z poleceniami.
Najpierw dobra wiadomość: bot to malutkie obciążenie. Głównie siedzi bezczynnie, czekając na wiadomości, więc najtańsza maszyna uruchamia go dobrze — bez dedykowanego IP, bez domeny, nic wymyślnego.
1. Zdobądź token od BotFather
W Telegramie napisz do @BotFather, wyślij /newbot, wybierz nazwę i nazwę użytkownika. Wręcza Ci token wyglądający jak 12345:AAH.... Traktuj go jak hasło — każdy, kto go ma, kontroluje Twojego bota.
2. Minimalny bot
Zaloguj się przez SSH na serwer, skonfiguruj Pythona i bibliotekę:
sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot
Bot, który odpowiada — ~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Żywy i na serwerze. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Zwróć uwagę, że odczytuje token ze zmiennej środowiskowej — nie zakodowany na twardo. To ma znaczenie w następnym kroku.
3. Część, która faktycznie utrzymuje go działającym: systemd
Jeśli po prostu uruchomisz python bot.py, umiera w chwili, gdy zamkniesz SSH. Usługa systemd to to, co sprawia, że przetrwa wylogowanie, awarie i restarty. Utwórz /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
[Install]
WantedBy=multi-user.target
Potem:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # powinno mówić active (running)
journalctl -u mybot -f # logi na żywo
Restart=always to linia wykonująca prawdziwą pracę — awaria, a jest z powrotem w 5 sekund. enable oznacza, że wstaje po restarcie. To cała różnica między „uruchomiłem bota raz” a „mój bot jest włączony”.
4. Dlaczego bez domeny czy otwartych portów
Bot używa long pollingu — sięga do Telegrama po aktualizacje, więc nic nie musi docierać do środka. Bez publicznego URL, bez reguły zapory przychodzącej, bez dedykowanego IP. Właśnie dlatego VPS NAT (współdzielone IP, SSH na porcie) jest dobrym i tanim domem dla bota. Webhooki istnieją dla bardzo dużego wolumenu, ale prawie na pewno nie potrzebujesz ich na start.
Uczciwe zastrzeżenia
- Higiena tokenu: tutaj jest inline w pliku jednostki dla jasności — w porządku na zablokowanej maszynie, ale dla czegokolwiek współdzielonego załaduj go zamiast tego z
EnvironmentFiletylko dla root i nigdy nie commituj do gita. Wyciekł? Cofnij w BotFather, wydaj nowy. - Ciężkie boty: jeśli Twój bot sam wykonuje pracę (generowanie obrazów, lokalny model), nie jest już malutki — zwiększ rozmiar odpowiednio.
To tyle. Najpierw zablokuj maszynę listą kontrolną bezpieczeństwa, wrzuć usługę, a Twój bot pozostaje online, niezależnie od tego, czy Ty jesteś. Na VPS płaconym kryptowalutą możesz mieć go działającego minutę po tym, jak zdecydujesz.
Komentarze
Brak komentarzy. Bądź pierwszy.