В последнее время активно занимаюсь разработкой Telegram-бота с использованием Serverless-подхода.
Вводные
Почему Serverless?
Экономика.
Vercel: даёт возможность запустить apps бесплатно, и прицепом подключить blob хранилище и бд. Конечно, с ограничениями, которые на этапе MVP проекта кажутся недосигяемыми.
Цена: Бесплатно
@Timeweb_Cloud существенно низкие цены, в сравнении с vds от них же.
Цена Apps: 0.34р/час+
Цена VSD: 0.68р/час+
НО мы не сраниваем VDS, это для наглядности.Возможностью сосредоточиться на коде.
И там и там, я просто подключаю репу, и пушаю код. Я не задумываюсь о серверах, сертификатах, докерах и всем таком остальном. А это существенная строка времязатрат.
Почему Vercel и TW?
Vercel - это мой начальный выбор, благодаря бесплатной цене.
Timeweb - знаком с платформой с давних лет.
Функционал и стек:
-
Бот выступает в роли AI-ассистента с интеграцией OpenAI.
Поэтому должен работать на серверах, которые не попадут под ограничения со стороны openAI из-за санкций.
Технологический стек: NestJS, облачная БД Neon (Vercel), blob-хранилище (Vercel)
История Timeweb
Vercel меня устраивал всем, за исключением недостатка возможности работы без vpn с сервисом. И честным serverless требованием к архитектуре приложения, которое по началу я воспринимал, как ошибку инфры Vercel.
Переезд с V на TW
С увеличением кодовой базы проекта, я стал наблюдать, что код просто переставал работать. В логах ошибок нет. Вебхук отрабатывал успешно. Причем такое поведение было рандомно. То работало, то не работало. Паралельно я общался с community Vercel, т.к. халявщикам поддержка не выделена, но community мне не помогло. И я решил переехать к TW, переезд занял мин 15, все взлетело, и я был доволен...пока...
Мои проблемы в TW
В один из дней, мои пользователи бота начинают массово жаловаться, что бот не работает. Я замечаю, что в консоли TW. ЦП забит под 100% уже несколько часов.

Раздел логов и деплоя приложения в TW тоже не открывается (бесконечный экран полинга). Кнопка рестартов недоступны, и я пытаюсь:
1) Сделать коммит, чтобы TW получив новый коммит, передеплоил приложуху: CPU - 100%, логи недоступны.
2) Я пытаюсь выбрать любой другой предыдущий успешный коммит: CPU - 100%, логи недоступны.
3) Пишу тикет в пятницу в 18 часов 10326999 в котором мне сказали, что передеплоили приложуху: CPU - 100%, логи недоступны.
4) Пишу, что не помогло. Прежде чем изучить ответ, напоминаю ( Цена Apps: 0.34р/час+ )
Ответ:
Сегодня уже не сможем дать ответ, т.к. требуется консультация с инженерами, а они работают в будние дни с 9 до 18. Также не удаляйте само приложение или попробуйте сделать повторный делой уже в понедельник. Пожалуйста, ожидайте.
Время приключений TW
Я точно знаю, что дело не в коде. Кнопки включить/выключить нет. И я удаляю apps и создаю новый, сервис взлетел. Вижу новый УРЛ сервиса, заливаю его в конфиг, заливаю в репу: CPU - 100%, логи недоступны.
Правило 1: В успешном apps лучше не заливать новый коммит.
Удаляю apps, создаю новый. Зависает на деплое, в логах ошибка по ключу id_rsa.. что-то там.
Удаляю, создаю новый. Заливаю новый конфиг, повторный деплой взлетел. Бот не работает, открываю логи, openAI откидывает меня по 403 по региону. В новом тикете дают гипотезу:
Правило 2: Выбранный регион НЕ РФ, не гарантирует что ваш ip не в ЧС openAI/Bitbucket
Понимаю, что делать коммиты - опасно. Уточняю в тикете, как побороть проблему с новым урлом при создании apps. Как его узнать заранее, чтобы деплоить с 1го коммита нужный урл? Предложили так:
Настроить DNS - записи для технического домена - нельзя. Для привязки технического домена следует удалить домен "tmdev-fitness.tw1.su" и добавить заново в панель управления.
Костыль, но лучше, чем неработающее приложение. Создаю бесплатный домен в TW, привязываю его к apps. Apps не взлетает, удаляю его. Удаляю домен. Раза с 3го деплоится успешно apps, создаю домен, который уже в репе. Бот не работает...
Со стороны telegram ошибка: Webhook-info: Connection time out
Правило 3: После удаления бесплатного домена, созданный аналогичный домен, может не работать.
История Vercel
В паралель с формированием правил работы с apps в TW, я пытался поднять ту же кодовую базу в Vercel. К деплоям никаких вопросов, но код так же рандомно то работал, то нет. Логи ничего не давали, community не в силах мне помочь. Пришлось дебажить каждую строку, чтобы понять в чем проблема.
Проблема
Вернемся к началу статьи: "...честным serverless требованием к архитектуре приложения, которое по началу я воспринимал, как ошибку инфры Vercel..."
Моя архитектура не подруземывала "холодный запуск" - это концепция подхода serverless. Именно поэтому у него такие низкие цены, в сравнении с VDS. Ваш процесс спит ( idle timeout ), пока его не разбудят, в то время как в VDS, он постоянно в памяти.
Idle Timeout
Vercel: После деплоя, мой процесс был в памяти, и бот работал. Через n минут (около 2мин), он уходил в спячку. Telegram делал webhook, будил процесс, и терялся где-то между слоями приложения, поскольку бот не успевал полностью инициализироваться, прежде чем ему нужно обработать команду. Вылечил, просто добавив проверку статуса инициализации бота перед обработкой команд.Это объясняет, почему бот рандомно то работает, то нет.
И это объясняет, почему не выполняются процессы по расписанию ( потому что процесс может спать, когда нужно выполнить что-то по расписанию )
Timeweb: Таких проблем, как в vercel, не было. Кроме того, там работают шедулеры (процессы по расписанию), поэтому я сделал вывод, что в Vercel - честный serverless. В Timeweb - нет.
Выводы
А какой у меня выбор?) Я учел все эти недостатки в коде, и теперь организационно я делаю следующие шаги:
Если TW apps уходит в проблему, просто меняю вебхук до vercel ~ 1 мин
Теперь бот работает, но не работают шедулеры.-
Запускаю сразу по 3-4 apps в TW
-
В успешных apps проверяю доступность до bitbucket/openai
Перевожу вебхук на TW, итого ~ 10 мин
-
Т.е. TW по прежнему основной мой apps, а Vercel, как запасной план.
Надеюсь, мой опыт сохранит вам много нервов и кофеина.
Комментарии (14)
gmtd
17.05.2025 14:18М-да...
А PHP работает без каких-либо проблем на любом сервере или хостинге...
VanishingPoint
17.05.2025 14:18Все равно будущее за серверлесс. Если к тому времени все эти проблемы еще будут интересовать нас, а не ИИ.
pnmv
17.05.2025 14:18Пока "серверлесс", для развёртывания, требует хоть какой-то централизованной площадки, это только название такое, во что бы там разрпботчики и пользователи ни уверовали.
gmtd
17.05.2025 14:18С чего такой вывод?
Уже куча статей есть рассказывающих как serverless разорил бизнесы своими счетами. Это хайп, придуманный для увеличения прибыли собственников облачных сервисов, а не удобства пользователя.
Плюс добавление в процесс кучи мест, где могут быть ошибки (по вине и не по вине пользователя). По сравнению с одним VPS и надежными, проверенными десятилетиями решениями
pnmv
17.05.2025 14:18Сперва:
Я точно знаю, что дело не в коде
Потом:
Вылечил, просто добавив проверку статуса инициализации бота перед обработкой команд.
Так, в коде или не в коде, всё дело то было? Или вторая цитата про конфиги?
mflash123 Автор
17.05.2025 14:18В коде я лечил архитектуру, которая не работала на честном serverless - Vercel.
А в TW такая архитектура кушалась. Но даже после фикса, TW себя ведет так же криво, как и до фикса. Потому что там дело не в ней, а в инфре таймвеба.
pnmv
17.05.2025 14:18быть может, "они там" просто не хотят телеграм-ботов, на своих платформах?
mflash123 Автор
17.05.2025 14:18Если дело про TW, то там дело не в боте же, а впринципе, что сервис Apps не готов к работе. Вы с таким же успехом и на php можете там что-то задеплоить и вордпресс условно упаковать, но зависнуть при деплое по тем же причинам. Т.е. дело не в боте. Рискну предположить, что просто напросто, не хватает ресурсов на сервере, где у них разворачиваются apps. Это по проблеме cpu 100%.
Furriest
17.05.2025 14:18"Serverless" в прямом смысле слова не бывает, это просто "какой-то чужой сервер, который мы не можем контролировать". Такого рода баззворды предназначены для обмана ЛПРов и заметания под ковер очевидных рисков подхода, но технарям-то оно зачем?
Sleitor
17.05.2025 14:18Добрый вечер.
Я активный пользователь версел, в котом у меня крутятся 4 разного уровня сложности приложения. Все на некстке
Хотел уточнить, что у них есть крон. Доступен на всех тарифных планах. Активно его использую.
Одно но: он не работает в превью деплойментах :) Нужно обязательно сделать продакшн и тогда все работает. Вот документация по этому поводу: https://vercel.com/docs/cron-jobs
Так же с удовольствием расскажу, если хотите, как у меня уже третий год живёт 2 бота на firebase совершенно бесплатно и стабильно.
Боты написаны на ts.
mflash123 Автор
17.05.2025 14:18Огромное спасибо за комментарий! Я изучу вопрос, поскольку отсутствия шедулера - было единственным блокером, почему окончательно нельзя было переехать на vercel.
Одно но: он не работает в превью деплойментах :) Нужно обязательно сделать продакшн и тогда все работает. Вот документация по этому поводу: https://vercel.com/docs/cron-jobs
Про продакшен и превью у меня была отдельная история, но я уже в них разобрался =)
Так же с удовольствием расскажу, если хотите, как у меня уже третий год живёт 2 бота на firebase совершенно бесплатно и стабильно.
Я даже не пробовал firebase, но меня всем устроит vercel, когда разберусь с cron.
mflash123 Автор
17.05.2025 14:18Снова вечный деплой, cpu-100% Сегодня, после мелкого фикса в репе, запушил код, и...снова время приключений. Это заставило меня изучить комментарий @Sleitor, еще раз спасибо!
Но у vercel есть ограничения на cron для hobby проектов: https://vercel.com/docs/cron-jobs/usage-and-pricing
Однако, это натолкнуло меня на идею сделать ручку для того, чтобы ее кто-то дергал раз в N минут. Аналог cron. И тут меня спас бесплатный cron-job.org
В итоге, я окончательно перевез apps из TW на Vercel.
devlev
Я полазил по сайту timeweb и не нашел там тарифа среды для разворачивания serverless. Т.е. я так понимаю, был куплен просто VPS и уже на нем была поднята среда для поддержки serverless кода, верно?
mflash123 Автор
Нет, я не покупал vps/vds.
Можете попробовать по урлу перейти: https://timeweb.cloud/my/apps
Это именно в timeweb cloud, там есть apps меню.
Вот еще нагуглил: https://timeweb.cloud/docs/apps и https://timeweb.cloud/services/apps