Перейти до вмісту

Рішення · Боти

VPS для Telegram-бота

Бот у режимі очікування споживає менше ста мегабайтів і майже весь час чекає, тож машина майже ніколи не є обмеженням: U1-1 за $6.90 на місяць повноцінно запускає одного бота. Насправді рахунок визначають медіа і те, чи запускаєте ви власний сервер Bot API. І те, й інше – арифметика, наведена нижче.

Рішення під рішенням

Вебхук чи long polling

Саме це, а не тариф, визначає, чи потрібні вашому боту домен, сертифікат і відкритий порт.

Long polling

Ваш бот підключається до Telegram і чекає оновлень. Ні домену, ні TLS-сертифіката, ні відкритого в інтернет порту, працює за NAT. Це найшвидший спосіб щось запустити і цілком добре постійне рішення для більшості ботів.

Вебхук

Telegram підключається до вас. Потрібні публічна адреса, дійсний сертифікат і відкритий порт (усе це може будь-який тариф тут), а натомість немає циклу опитування, і бот краще масштабується під реальним навантаженням. Переходьте, коли цього вимагають навантаження або затримка, не раніше.

Арифметика

Скільки ботів насправді вміщує тариф

Боти = (RAM − 300 MB на операційну систему) ÷ обсяг пам’яті одного бота. Два стовпці: бот команд без стану та бот з ORM, планувальником і кешем.

Ємність для процесів ботів і місячний ліміт трафіку для кожного тарифу з актуальними цінами
ТарифRAMЛегкі ботиВажкі ботиТрафікЦінаРозгорнути
U1-1Один бот, аудиторія будь-якого розміру1 GB124Unmetered$6.90Розгорнути
C1-1-25Один бот, трафік рахується, але дешево1 GB1241 TB$9.90Розгорнути
GL2-4Кілька ботів або бот із базою даних4 GB6325Unmetered$11.90Розгорнути
BD-8Власний сервер Bot API8 GB1315232 TB$12.90Розгорнути

Кількості користувачів вашого бота в цій арифметиці немає, бо її немає і в задачі: Telegram передає вашому процесу оновлення по одному, а не відкриває з’єднання на кожного користувача. Відповідь змінює стан, який ви зберігаєте самі: великий кеш, вбудована в процес база даних, модель.

Число, яке визначає рахунок

Медіа, а не пам’ять

Середній розмір файлу × повідомлень на день × 30. Враховуються обидва напрямки: отриманий файл теж є трафіком.

Щомісячний трафік за типом повідомлень при ста, п’яти тисячах і п’ятдесяти тисячах повідомлень на день
Що передає бот100/день5,000/день50,000/день
Лише текстКоманда і відповідь. Практично безкоштовно.< 1 GB< 1 GB3 GB
ФотоСтиснене зображення, надіслане й отримане.< 1 GB44 GB439 GB
Голосові повідомлення та короткі відеоЗвичайне навантаження бота спільноти.9 GB439 GB4.3 TB
Документи та довгі відеоВласна стеля Telegram на завантаження для звичайного бота.59 GB2.9 TB28.6 TB

Єдине, що змінює машину

Бот на публічному Bot API може завантажувати файли до 20 MB і вивантажувати до 50 MB (це обмеження Telegram, а не наші), і файли ніколи не потрапляють на ваш диск. Запустіть власний сервер Bot API, і стеля стане 2 GB, а кожен файл потраплятиме на ваш сервер. Саме тоді диск і трафік перестають бути другорядними: BD-8 дає 100 GB SSD і 32 TB за $12.90, що якраз підходить. Якщо ви цього не робите, не платіть за це.

Чесно кажучи

Що ми купили б насправді

Ми самі тримаємо Telegram-бота. Ось машина, на яку ми б його поставили.

Для одного бота

U1-1 · $6.90/міс

1 ядро, 1 GB, 15 GB SSD і без лічильника трафіку, тож бот, який несподівано почне передавати медіа, не створить рахунку, якого ви не очікували. Запустіть бота під systemd з Restart=always, і єдиною причиною його падіння залишиться ваш власний код. Якщо ви з нього виростете, перенести бота означає скопіювати каталог і токен.

Запитання

Що запитують перед покупкою.

Скільки RAM потрібно Telegram-боту?
Набагато менше, ніж зазвичай продають. Бот – це довготривалий процес, який майже весь час чекає: бот команд без стану займає близько 60 MB, а бот з ORM, планувальником і кешем ближче до 150 MB. Після того як операційна система забере свої приблизно 300 MB, на машині з 1 GB ще залишається місце для 4 важких ботів або 12 легких. Кількість КОРИСТУВАЧІВ майже не впливає, бо Telegram доставляє оновлення вашому процесу по одному, а не через окреме з’єднання для кожного користувача. Відповідь змінює лише стан, який ви самі тримаєте в пам’яті: великий кеш, вбудована база даних, модель.
Вебхук чи long polling?
Для початку long polling, вебхуки тоді, коли це має значення. З long polling ваш бот сам відкриває з’єднання з Telegram і чекає: йому не потрібні ні домен, ні сертифікат, ні відкритий порт, тож він працює за NAT, і це найшвидший спосіб щось запустити. З вебхуком Telegram підключається до ВАС, тому потрібні публічна адреса, дійсний TLS-сертифікат і відкритий в інтернет порт, а натомість цикл опитування зникає повністю, і бот краще масштабується, коли він справді завантажений. Обидва варіанти добре працюють на найменшій машині тут. Чесна причина переходити: навантаження або затримка, а не мода.
Які обмеження на розмір файлів?
Це обмеження Telegram, а не наші: бот, що використовує публічний Bot API, може завантажувати файли до 20 MB і вивантажувати до 50 MB. Власний сервер Bot API піднімає ліміт до 2 GB і, що важливіше, файли потрапляють на диск вашого сервера, а не проходять через Telegram. Це єдина зміна, яка справді впливає на те, яка машина вам потрібна: раптом важливими стають диск і трафік, тому таблиця вище ставить BD-8 навпроти цього рядка, а не інших.
Чи не закінчиться в мене трафік?
Текстовий бот – ніколи. Медіабот – можливо, і варто витратити тридцять секунд на арифметику: середній розмір файлу × повідомлень на день × 30. П’ятдесят тисяч голосових повідомлень на день по 3 MB – це близько 4.3 TB на місяць, що перевищує ліміт більшості дешевих тарифів і далеко від 32 TB на BD-8 чи лінійки без обліку трафіку, де це питання не виникає. Враховуються обидва напрямки: і файл, який бот отримує, і файл, який він надсилає, є трафіком.
Як зберегти роботу бота після закриття терміналу?
Юніт systemd, а не сесія screen. Напишіть невеликий сервісний файл з Restart=always, увімкніть його, і бот відновиться після збою та після перезавантаження без вашої участі. Це найпоширеніша причина, чому бот «падає» на VPS, і це не проблема хостингу: процес, запущений вручну, завершується разом із сесією SSH, що його запустила. Docker із політикою перезапуску виконує те саме завдання, якщо ви віддаєте перевагу такому пакуванню.
Чи можна запускати кілька ботів на одному сервері?
Так, і більшості варто так робити. Кожен бот: окремий процес із власним юнітом systemd і власним токеном; вони спільно використовують машину, за бажанням базу даних, і більше нічого. Арифметика в таблиці відповідає саме на це питання: машина з 4 GB вміщує 25 важких ботів, перш ніж пам’ять стане обмеженням. Якщо боти для різних людей, тримайте їх на окремих портах і під окремими користувачами.
У якому регіоні запускати бота?
Будь-де, куди можуть дістатися ваші користувачі і де затримка до Telegram розумна: бот спілкується з інфраструктурою Telegram, а не безпосередньо з користувачами, тож звичне правило «ближче до аудиторії» тут важить менше, ніж для вебсайту. Якщо бот також обслуговує вебпанель або API для тих самих користувачів, обирайте регіон з огляду на це. Якщо не впевнені, розгорніть погодинно у двох регіонах, виміряйте і видаліть той, що програє: $0.0113 на годину робить цей експеримент дешевим.