Перейти к содержимому

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

VPS для Telegram-бота

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

Решение, которое стоит за решением

Webhook или long polling

Именно это, а не тариф, определяет, нужны ли боту домен, сертификат и открытый порт.

Long polling

Бот сам подключается к Telegram и ждёт обновлений. Ни домена, ни TLS-сертификата, ни открытого в интернет порта, работает за NAT. Это самый быстрый способ что-то запустить и вполне хорошее постоянное решение для большинства ботов.

Webhook

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 доставляет обновления вашему процессу по одному, а не открывает соединение на каждого пользователя. Ответ меняет то состояние, которое вы сами держите в памяти: большой кеш, встроенная в процесс база данных, модель.
Webhook или long polling?
Для начала long polling, webhook тогда, когда это важно. При long polling бот сам открывает исходящее соединение к Telegram и ждёт: ему не нужны ни домен, ни сертификат, ни открытый порт, поэтому он работает за NAT, и это самый быстрый способ что-то запустить. При webhook 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 в час это дешёвый эксперимент.