Сколько это стоит
Как перенести Telegram-бота с VPS и перестать администрировать сервер
Коротко
Перенести Telegram-бота с VPS можно за один вечер: скачайте папку с ботом и файл базы данных, загрузите код в Netrun, укажите токен как секрет, положите базу в постоянную папку и остановите старого бота, чтобы у токена остался один экземпляр. Дальше сервер обслуживает платформа: круглосуточная работа стоит $1.49 в неделю или $4.99 в месяц, systemd и обновления системы больше не ваша забота.
Бот на своём VPS обычно работает нормально ровно до первого события: закончилось место на диске, обновилась система, истёк сертификат, упал процесс — и вы снова заходите по SSH разбираться. Отдельная неприятность в том, что случается это редко и всегда неожиданно: навык администрирования между разами успевает выветриться.
Если бот у вас один-два и админить сервер вы не собирались, перенос занимает вечер. Ниже — порядок действий, чтобы ничего не потерять по дороге.
Заберите с сервера код и данные#
Скачайте папку проекта целиком и отдельно найдите файлы, которые бот создал сам: базу на SQLite, загруженные картинки, кэш. Их легко забыть — они не в репозитории, а рядом с ботом на диске сервера. Если бот пишет в PostgreSQL или MySQL, сделайте дамп базы. Проверьте, что в папке есть requirements.txt или package.json со списком библиотек: без него на новом месте придётся вспоминать зависимости вручную.
Выпишите переменные окружения#
Загляните в .env, в файл сервиса systemd или туда, где у вас заданы настройки: токен бота, ключи к внешним сервисам, строка подключения к базе, идентификатор администратора. Это то, что нужно перенести отдельно от кода — в самом коде значений быть не должно.
Загрузите бота в Netrun#
Загрузите папку архивом или подключите репозиторий на GitHub. Платформа определит язык по коду, поставит зависимости и соберёт проект — устанавливать Python или Node.js, писать Dockerfile и настраивать автозапуск не нужно. Значения из старого .env вводятся как секреты: в архиве и в репозитории они не окажутся.
Перенесите базу данных#
У проекта есть постоянная папка: всё, что в ней лежит, переживает публикацию новой версии кода. Загрузите туда файл базы SQLite и папки с загрузками — так пользователи, их настройки и накопленная история останутся на месте. Если бот работал с PostgreSQL, разверните базу отдельным сервисом проекта и залейте дамп.
Остановите старого бота до запуска нового#
Ключевой момент переноса. У одного токена может быть только один работающий экземпляр: если старый бот на VPS продолжит опрашивать Telegram, обновления начнут доставаться то ему, то новому, и бот будет отвечать через раз. Сначала остановите процесс на сервере, потом запускайте на платформе. Сервер при этом не удаляйте — пусть постоит день-два как страховка.
Проверьте бота и отключите сервер#
Прогоните обычные сценарии: команда /start, основные кнопки, сохранение чего-нибудь в базу, ответ после перезапуска. Логи видны в кабинете в реальном времени, поэтому ошибку вы увидите текстом. Убедились, что всё работает, — можно отказываться от аренды. Дальше бот стоит $4.99 в месяц (или $47.99 в год, это примерно $4 в месяц), а обновления системы, автозапуск и место на диске становятся не вашей заботой.
Перенос — разовая работа на вечер, после которой заходить по SSH больше не нужно. Загрузите бота в Netrun, сверьте поведение со старым и отключайте сервер: первые 3 дня бесплатны, так что сравнивать можно параллельно.
Частые вопросы
Сколько времени занимает перенос бота с VPS?
Обычно вечер: скачать код и данные, загрузить проект, ввести токен и настройки, перенести базу и проверить сценарии. Дольше всего идёт проверка, а не сама публикация. Первые 3 дня работа бесплатна, поэтому новый бот можно погонять, пока старый ещё стоит на сервере.
Что делать с базой данных бота?
Файл SQLite и папки с загрузками кладутся в постоянную папку проекта — она сохраняется при публикации новой версии кода. Если бот работает с PostgreSQL или MySQL, база разворачивается отдельным сервисом проекта, а данные заливаются дампом.
Почему бот отвечает через раз после переноса?
Почти всегда потому, что старый бот на VPS всё ещё запущен. У одного токена может быть только один работающий экземпляр — Telegram отдаёт обновления по очереди то одному, то другому. Остановите процесс на сервере.
Нужно ли переписывать код бота?
Нет. Переносится тот же проект: платформа определяет язык и зависимости по вашим файлам. Единственное, что стоит поправить, — вынести токен и ключи из кода в переменные окружения, если они там ещё лежат.
Что дешевле в итоге — сервер или платформа?
По прайсу суммы сопоставимы: $4.99 в месяц или $47.99 в год. Разница в том, что на платформе в эту цену входит работа, которую на сервере вы делаете сами: обновления, автозапуск, перезапуск после сбоя, свободное место на диске.
Можно ли вернуться на свой сервер, если не понравится?
Да. Код остаётся вашим и лежит у вас, специфичных настроек платформы бот не требует, а файлы из постоянной папки скачиваются в кабинете. Возврат ничем не отличается от обычной установки на сервер.
Нужен ли свой сервер или VPS?
Нет. Netrun разворачивает проект на своих серверах. Не нужно арендовать VPS, настраивать systemd и nginx или продлевать сертификаты — всё это работает за вас.
Сохранятся ли данные при обновлении кода?
Да, если данные лежат в постоянном хранилище. У обычного проекта это папка /data: всё, что приложение туда сохранило, остаётся при обновлении кода и перезапуске, а посмотреть и скачать файлы можно на вкладке «Данные». Если вы описали сервисы сами в docker-compose, постоянное хранилище — это именованные тома из вашего файла, и папки /data у такого проекта нет. Файлы, записанные мимо хранилища, при следующей публикации создаются заново. Ссылка проекта в любом случае остаётся прежней.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.
Можно ли запустить несколько сервисов сразу?
Да. Через docker-compose можно поднять до пяти связанных сервисов в одном проекте — например, приложение вместе с базой данных.