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 (გამავალი მისამართი თქვენი საკუთარი არ არის, SSH პორტზე) კარგი და იაფი სახლია ბოტისთვის. Webhook-ები არსებობს ძალიან მაღალი მოცულობისთვის, მაგრამ თითქმის ნამდვილად არ გჭირდებათ ისინი დასაწყებად.
გულწრფელი გაფრთხილებები
- Token ჰიგიენა: აქ ის inline-ია unit ფაილში სიცხადისთვის — კარგია დაბლოკილ box-ზე, მაგრამ ყველაფრისთვის, რაც საზიაროა, ჩატვირთეთ ის root-only
EnvironmentFile-იდან და არასოდეს commit-ოთ ის git-ში. გაჟონა? გააუქმეთ BotFather-ში, გასცეთ ახალი. - მძიმე ბოტები: თუ თქვენი ბოტი თავად აკეთებს სამუშაოს (image გენერაცია, ლოკალური მოდელი), ის აღარ არის პაწაწინა — შესაბამისად გაზარდეთ ზომა.
ეს არის. ჯერ დაბლოკეთ box უსაფრთხოების ჩეკ-ლისტით, ჩააგდეთ სერვისი და თქვენი ბოტი ონლაინ რჩება, ჩართული ხართ თუ არა თქვენ. კრიპტოთი-გადახდილ VPS-ზე შეგიძლიათ ის გაშვებული გქონდეთ წუთში მას შემდეგ, რაც გადაწყვეტთ.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.