EQVPS

გაუშვით Telegram ბოტი 24/7 VPS-ზე: aiogram, systemd, polling vs webhook

Jul 4, 2026 · 4 წთ კითხვა · EQVPS Team

დაწერეთ Telegram ბოტი aiogram-ით, დატესტეთ ლოკალურად და ის მუშაობს. ახლა მას სადმე უნდა ცხოვრება, რომელიც არ იძინებს, როცა laptop-ს ხურავთ. პატარა VPS ბუნებრივი სახლია — მაგრამ არის ხარვეზი python bot.py-ს შორის SSH სესიაში და ბოტს შორის, რომელიც რეალურად ინარჩუნებს ჩართვას crash-ების, გადატვირთვებისა და თქვენი კავშირის გათიშვის დროს.

ეს არის production ვერსია: virtualenv, token-ი თქვენი კოდის გარეთ დაცული, systemd სერვისი, რომელიც ბოტს თავად აცოცხლებს, და ნათელი პასუხი კითხვაზე, რომელსაც ყველა ბოლოს სვამს — polling თუ webhook?

რატომ არ გავუშვათ ის laptop-ზე

ბოტს სჭირდება მდგრადი გამავალი კავშირი Telegram-თან. თქვენი laptop იძინებს, გადაიტვირთება განახლებებისთვის და ხტება ქსელებს შორის — თითოეული ამათგანი აგდებს ბოტს, და მომხმარებლები დუმილის კედელს ხვდებიან. VPS ინახავს ამ კავშირს დღეღამის განმავლობაში. ეს არის მისი მანქანიდან გადატანის მთელი მიზეზი, და იგივე მიზეზი, რის გამოც Discord ბოტიც სერვერს ეკუთვნის.

თუ უბრალოდ ყველაზე სწრაფი „გავუშვათ ონლაინ“ გზა გინდათ მინიმალური ბოტით, Telegram-ბოტის-ჰოსტინგის გაცნობა ფარავს ამას. ეს ნაწილი ერთი დონით ღრმად მიდის: aiogram, უსაფრთხო token-ის დამუშავება და ცოდნა, როდის გაზარდოთ.

ბოტი, virtualenv-ში

შედით SSH-ით და შეინახეთ ბოტი იზოლირებული საკუთარ venv-ში — ნუ დააინსტალებთ პაკეტებს system-wide, ეს განახლებებსა და გაწმენდას მოგვიანებით ართულებს:

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 ბოტი, რომელიც კითხულობს თავის token-ს environment-იდან, არა hardcoded სტრიქონიდან:

# 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())

შეინახეთ token თქვენი კოდის გარეთ

არასოდეს ჩასვათ BotFather token bot.py-ში — ერთი push საჯარო repo-ზე და ის გაჟონა. ჩადეთ ის root-readable env ფაილში ნაცვლად:

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

გაჟონილი token ერთი /revoke-ის მოშორებითაა BotFather-ში გასასწორებლად — მაგრამ გაჟონილი ნებისმიერი სხვა რამ საზიარო მანქანაზე უარესია. გამოყოფილი VPS ბოტისთვის გულწრფელად უფრო უსაფრთხო სახლია token-ისთვის, ვიდრე თქვენი ყოველდღიური laptop: თუ ის გაჟონავს, ატრიალებთ ერთ token-ს, არა მთელ დაყენებას.

ნაწილი, რომელიც ინახავს მას ცოცხლად: systemd

ეს არის ის, რაც ბოტს, რომელიც მუშაობს, ბოტისგან, რომელიც ინარჩუნებს მუშაობას, აშორებს. შექმენით სერვისი:

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

გაუშვით ის non-root მომხმარებლად (botuser ზემოთ), არა root-ად — თუ ბოტი ოდესმე კომპრომეტირდება, გინდათ ის შემოსაზღვრული იყოს. შემდეგ:

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

Restart=always RestartSec=3-ით ნიშნავს, რომ crash — ცუდი განახლება Telegram-იდან, დაუმუშავებელი exception, OOM — აბრუნებს ბოტს სამ წამში, მისი მკვდრად დატოვების ნაცვლად, სანამ შეამჩნევთ. უყურეთ მას ცოცხლად:

journalctl -u tgbot -f

ეს არის თქვენი მთელი logging დაყენება. არავითარი log ფაილი როტაციისთვის, დამატებითი ხელსაწყო — journald უკვე აქვს ის.

განახლება downtime-ის დრამის გარეშე

როცა კოდს ცვლით ან aiogram-ს ანახლებთ:

cd ~/tgbot && source venv/bin/activate
pip install -U aiogram          # if upgrading the library
sudo systemctl restart tgbot
journalctl -u tgbot -n 30 --no-pager   # confirm it came back clean

რესტარტი ახახუნებს ბოტს წამ-ორ წამში. polling ბოტისთვის ეს უხილავია მომხმარებლებისთვის — Telegram რიგში აყენებს განახლებებს და აწვდის მათ, როგორც კი ბოტი ხელახლა დაუკავშირდება.

Polling vs webhook — გულწრფელი ვერსია

ეს არის გადაწყვეტილება, რომელსაც ხალხი ზედმეტად ფიქრობს. აი მარტივი ვერსია:

Polling (start_polling, რასაც ზემოთ კოდი იყენებს) ბოტს ეკითხება Telegram-ს „რამე ახალი?“ გრძელ-ცოცხალ კავშირზე. მას არაფერი სჭირდება გამავალი ინტერნეტის გარდა — არავითარი დომენი, TLS, ღია შემომავალი პორტი. ის მუშაობს NAT-ის უკან. ბოტების აბსოლუტური უმრავლესობისთვის ეს სწორია და უნდა გაჩერდეთ აქ.

Webhook Telegram-ს ატანინებს განახლებებს თქვენთან, რაც ნიშნავს, რომ უნდა გამოაშკარაოთ საჯარო HTTPS endpoint. ამას სჭირდება დომენი და მიწვდომადი შემომავალი პორტი — ასე რომ ან გამოყოფილი საჯარო IP ან reverse proxy წინ. მეტი დაყენება, მეტი რამ, რაც ტყდება. მოგება არის უფრო დაბალი შეყოვნება და ნაკლები overhead დიდ მასშტაბზე — ათასობით ერთდროული მომხმარებელი, მძიმე განახლების მოცულობა.

პრაქტიკული წესი: დაიწყეთ polling-ით NAT ტარიფზე. გადადით webhook-ზე მხოლოდ მაშინ, როცა რეალურად გადააჭარბეთ polling-ს — და თუ გადახვალთ, სწორედ მაშინ იმსახურებს გამოყოფილი IP თავის ადგილს, რადგან ის შემომავალი HTTPS endpoint გჭირდებათ.

რა ღირს მისი გაშვება

polling ბოტი მსუბუქია. ის უმოქმედოა Telegram-ის long-poll-ზე და რეაგირებს შეტყობინებებზე, ასე რომ box ძირითადად ელოდება:

რეგისტრაცია მხოლოდ-ელფოსტაა და იხდით USDC ან USDT Base-ზე ან Ethereum-ზე — ბარათის, ID-ის გარეშე. ბარათიც მუშაობს, მაგრამ on-ramp-ს აქვს ~$27 მინიმუმი, ასე რომ $3 ტარიფისთვის უფრო მარტივია პატარა ბალანსის ერთხელ შევსება და renewal-ების მისგან წაღება. ის CPU-only-ია, ერთი დატაცენტრი გერმანიაში — არა-საკითხი ბოტისთვის, ღირს ცოდნა, თუ GPU ან კონკრეტული რეგიონი გჭირდებოდათ.

გულწრფელი დასკვნა

Telegram ბოტი ერთ-ერთი ყველაზე იაფი რამაა, რომლის თვით-ჰოსტინგიც შეგიძლიათ: $3 box, systemd unit და polling გაძლევთ ბოტს, რომელიც ონლაინაა crash-ებისა და გადატვირთვების დროსაც, თქვენი ძიძობის გარეშე. მიწვდით webhook-სა და უფრო დიდ ტარიფს მხოლოდ მაშინ, როცა მასშტაბი რეალურად აიძულებს — არა იმიტომ, რომ სახელმძღვანელომ გითხრათ, რომ webhook-ები „უკეთესია“. აიღეთ პატარა box, შეინახეთ token env ფაილში, დაანებეთ systemd-ს uptime-ის მართვა და — ყველაფერზე ადრე — გაუშვით ახალი-VPS უსაფრთხოების ჩეკ-ლისტი, რომ თავად box დაბლოკილი იყოს.


მზად ხართ თქვენის ჰოსტინგისთვის? Telegram ბოტი ძლივს იყენებს რესურსებს — Nano ტარიფი ($3/თვე) უშვებს მას 24/7 უფუსფუსოდ.

ხდკ

Polling თუ webhook — რომელი გამოვიყენო?

დაიწყეთ polling-ით. ის მუშაობს ნებისმიერი box-იდან გამავალი ინტერნეტით — დომენის, ღია პორტების, TLS-ის გარეშე — და ის საკმარისია უმეტესი ბოტისთვის. გადადით webhook-ზე მხოლოდ მაშინ, როცა მასშტაბზე მუშაობთ (ათასობით მომხმარებელი) ან ყველაზე დაბალი შეყოვნება გჭირდებათ; webhook-ს სჭირდება საჯარო HTTPS endpoint, რაც ნიშნავს დომენსა და მიწვდომად შემომავალ პორტს (გამოყოფილი IP ან reverse proxy), ასე რომ ის მეტი მოძრავი ნაწილია. ბოტების 95%-ისთვის polling პატარა VPS-ზე სწორი პასუხია.

მჭირდება გამოყოფილი IP ან დომენი Telegram ბოტისთვის?

არა polling-ისთვის — ბოტი მხოლოდ გამავალ ზარებს აკეთებს Telegram-თან, ასე რომ NAT ტარიფი პორტ-გადამისამართებული SSH-ით საკმარისია. საჯარო HTTPS endpoint (დომენი + შემომავალი პორტი, ანუ გამოყოფილი IP ან reverse proxy) მხოლოდ მაშინ გჭირდებათ, თუ webhook რეჟიმზე გადახვალთ. უმეტეს ბოტს ის არასოდეს სჭირდება.

რა ზომის VPS სჭირდება aiogram ბოტს?

ყველაზე პატარა. polling ბოტი ძირითადად Telegram-ის long-poll-ს ელოდება, ასე რომ 1 vCPU / 1 GB ($3 Nano) უმკლავდება უმეტეს ბოტს კომფორტულად. გაზარდეთ ზომა მხოლოდ მაშინ, როცა ბოტი თავად აკეთებს მძიმე სამუშაოს — მონაცემთა ბაზა, media დამუშავება ან ლოკალური მოდელი — რაც 2 GB-სკენ ($5) ან მეტისკენ გიბიძგებთ.

როგორ შევინარჩუნო ბოტი გაშვებული გამოსვლის შემდეგ?

გაუშვით ის systemd სერვისად Restart=always-ით. თქვენს ტერმინალში გაშვებული ის კვდება, როცა SSH იხურება; systemd-ის ქვეშ ის გადარჩება გამოსვლას, რესტარტს აკეთებს crash-ზე და ბრუნდება გადატვირთვის შემდეგ. ეს არის ხაზი დემოსა და რაღაცას შორის, რომელსაც შეიძლება დაეყრდნოთ.

← ბლოგზე დაბრუნებატარიფებისა და ფასების ნახვა →

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.