Telegram ბოტი, რომელიც მუშაობს მხოლოდ სანამ თქვენი laptop ღიაა, სინამდვილეში არ მუშაობს — ის დემონსტრირებს. მისი რეალურად ონლაინ ყოფნისთვის, პასუხისთვის ღამის 3 საათზე, თქვენი გადატვირთვებისა და საკუთარი crash-ების გადასარჩენად, მას სერვერზე უნდა ცხოვრება. აი მთელი გზა, თავიდან ბოლომდე, ბრძანებებით.
ჯერ კარგი ამბავი: ბოტი პაწაწინა დატვირთვაა. ის ძირითადად უმოქმედოდ ზის და შეტყობინებებს ელოდება, ასე რომ ყველაზე იაფი box უშვებს მას კარგად — არავითარი გამოყოფილი IP, დომენი, არაფერი ფანტაზიური.
1. მიიღეთ token BotFather-იდან
Telegram-ში მისწერეთ @BotFather-ს, გააგზავნეთ /newbot, აირჩიეთ სახელი და username. ის გაძლევთ token-ს, რომელიც ჰგავს 12345:AAH...-ს. მოეპყარით მას პაროლივით — ნებისმიერს, ვისაც ის აქვს, აკონტროლებს თქვენს ბოტს.
2. მინიმალური ბოტი
შედით სერვერზე SSH-ით, დააყენეთ Python და ბიბლიოთეკა:
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
ბოტი, რომელიც პასუხობს — ~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Alive and on a server. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
შენიშნეთ, რომ ის კითხულობს token-ს environment variable-იდან — არა hardcoded. ამას მნიშვნელობა აქვს შემდეგ ნაბიჯში.
3. ნაწილი, რომელიც რეალურად ინახავს მას გაშვებული: systemd
თუ უბრალოდ გაუშვებთ python bot.py-ს, ის კვდება იმ მომენტში, როცა SSH-ს დახურავთ. systemd სერვისი არის ის, რაც მას გადაარჩენინებს გამოსვლას, crash-ებსა და გადატვირთვებს. შექმენით /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
შემდეგ:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # should say active (running)
journalctl -u mybot -f # live logs
Restart=always არის ხაზი, რომელიც რეალურ სამუშაოს აკეთებს — crash, და ის უკან არის 5 წამში. enable ნიშნავს, რომ ის ჩნდება გადატვირთვის შემდეგ. ეს არის მთელი განსხვავება „ერთხელ გავუშვი ბოტი“-სა და „ჩემი ბოტი ჩართულია“-ს შორის.
4. რატომ არავითარი დომენი ან ღია პორტი
ბოტი იყენებს long polling-ს — ის მიწვდება Telegram-ს განახლებებისთვის, ასე რომ არაფერს სჭირდება შიგნით მიწვდომა. არავითარი საჯარო URL, შემომავალი firewall წესი, გამოყოფილი IP. სწორედ ამიტომ NAT VPS (საზიარო IP, SSH პორტზე) კარგი და იაფი სახლია ბოტისთვის. Webhook-ები არსებობს ძალიან მაღალი მოცულობისთვის, მაგრამ თითქმის ნამდვილად არ გჭირდებათ ისინი დასაწყებად.
გულწრფელი გაფრთხილებები
- Token ჰიგიენა: აქ ის inline-ია unit ფაილში სიცხადისთვის — კარგია დაბლოკილ box-ზე, მაგრამ ყველაფრისთვის, რაც საზიაროა, ჩატვირთეთ ის root-only
EnvironmentFile-იდან და არასოდეს commit-ოთ ის git-ში. გაჟონა? გააუქმეთ BotFather-ში, გასცეთ ახალი. - მძიმე ბოტები: თუ თქვენი ბოტი თავად აკეთებს სამუშაოს (image გენერაცია, ლოკალური მოდელი), ის აღარ არის პაწაწინა — შესაბამისად გაზარდეთ ზომა.
ეს არის. ჯერ დაბლოკეთ box უსაფრთხოების ჩეკ-ლისტით, ჩააგდეთ სერვისი და თქვენი ბოტი ონლაინ რჩება, ჩართული ხართ თუ არა თქვენ. კრიპტოთი-გადახდილ VPS-ზე შეგიძლიათ ის გაშვებული გქონდეთ წუთში მას შემდეგ, რაც გადაწყვეტთ.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.