НОВОЕ 📢 Ограниченное стартовое предложение: скидка до 70% на первый месяц для любой игры!Посмотреть тарифы

Как перенести Telegram-бота на PlayNHost

Хостинг Discord-ботовUpdated Oct 29, 20267 min read

Перенос Telegram-бота с PythonAnywhere, Replit, Railway или с вашего компьютера состоит в том, чтобы скопировать его файлы, вставить тот же токен, переключить бота на polling, если он работал через вебхук, и запустить его здесь, остановив старую копию. Токен остаётся прежним, поэтому бот сохраняет свой @username, свои чаты и своих пользователей. Шаги:

  1. Получите тариф для ботов, настроенный для Telegram, с тем языком, на котором написан ваш бот.
  2. Скопируйте файлы в Files (zip, загрузка, Распаковать), по SFTP или из Git, вместе с requirements.txt или package.json.
  3. Задайте Файл запуска и Среда выполнения на странице Бот, в разделе Код.
  4. Вставьте токен на странице Бот, в разделе Telegram, и нажмите Подключить.
  5. Импортируйте остальные настройки кнопкой Вставить файл .env в разделе Окружение.
  6. Если бот работал через вебхук, переведите его на polling.
  7. Остановите старую копию, нажмите здесь Запустить и следите за Console, пока бот не войдёт в Telegram.

Каждый шаг подробно описан ниже.

Перед началом

  • Соберите код бота и его файлы с данными (файлы SQLite, файлы JSON, сохранённые настройки) в одной папке. На хостинге скачайте их zip-архивом или скопируйте из его файлового менеджера.
  • Запишите все настройки, которые старый хостинг передавал вашему боту: файл .env или переменные, заданные в его панели.
  • Остановите старую копию прямо перед запуском новой. Telegram позволяет только одной копии бота запрашивать сообщения: две копии вытесняют друг друга с ошибкой 409 Conflict.

1. Получите тариф, настроенный для Telegram

На странице Хостинг Telegram-ботов нажмите Создать сервер на нужном тарифе, на вопрос Для какой платформы ваш бот? ответьте Telegram и выберите язык бота: Node.js, Python, Java, C# (.NET), Bun, Deno, Go или Rust. Для большинства ботов хватает STARTER (0,5 ГБ): память, которую мы измерили, указана в статье python-telegram-bot и aiogram на PlayNHost.

Уже есть тариф для ботов, настроенный для Discord? На странице Бот, в разделе Discord, в карточке Для чего этот бот? выберите Telegram и подтвердите кнопкой Переключить. Не тот язык? В разделе Код нажмите Изменить, что запускается рядом с пунктом Среда выполнения.

2. Скопируйте файлы

  • Небольшой бот: заархивируйте папку в zip, загрузите архив в Files, отметьте его и нажмите Распаковать.
  • Большая папка: используйте SFTP. Адрес указан в Данные SFTP в Files; входите с паролем от панели.
  • Код на GitHub: подключите репозиторий вместо загрузки, а загрузите только файлы с данными. См. Как развернуть и обновлять бота из GitHub.

Не загружайте venv, .venv, __pycache__ и node_modules: сервер устанавливает пакеты сам. Ваша главная папка здесь называется /home/container. Если ваш код открывает файлы с данными по полному пути со старого хостинга (например, /home/yourname/mybot/data.db), замените его путём относительно главной папки. Подробнее: Как загрузить код вашего бота.

3. Пакеты и файл запуска

На старом хостинге вы, возможно, устанавливали пакеты вручную в консоли. Здесь они берутся из файла:

  • Python: файл requirements.txt с одним пакетом в строке, например python-telegram-bot или aiogram. Впишите в него названия пакетов, которые импортирует ваш код. Другое имя файла или другая папка? Укажите их в поле Файл requirements в карточке Настройки раздела Код.
  • Node.js и Bun: ваш package.json с разделом dependencies.

На Python, Node.js и Bun пакеты устанавливаются при первом запуске. Потом они устанавливаются заново, только когда вы их меняете (список пакетов, файл пакетов или версию среды выполнения), когда нет node_modules или раз в сутки. В остальных случаях Console показывает:

[PlayNHost] Packages are up to date. They install again when you change them, or after a day.

На странице Бот, в разделе Код, в карточке Как он запускается задайте Файл запуска: тот файл, который запускал старый хостинг (например, main.py или src/index.js; по умолчанию bot.py и index.js), и выберите ту же версию Среда выполнения. Нажмите кнопку Сохранить рядом с каждым изменённым полем. Подробнее по языкам: Python, Node.js.

4. Токен

  1. На странице Бот, в разделе Telegram, вставьте токен бота и нажмите Подключить. Панель проверит его в Telegram и покажет @username вашего бота. Потеряли токен? В @BotFather отправьте /mybots, выберите своего бота, затем API Token.
  2. Ваш код получает токен как TELEGRAM_BOT_TOKEN, а также как BOT_TOKEN, TOKEN, TELEGRAM_TOKEN и TELOXIDE_TOKEN. Если ваш код читает другое имя, замените эту строку одним из этих имён.
  3. Если токен записан в вашем коде или в config.json, замените его переменной окружения, например os.environ["TELEGRAM_BOT_TOKEN"] в Python или process.env.TELEGRAM_BOT_TOKEN в Node.js. Удалите его из всех загруженных файлов .env.

5. Остальные настройки

  1. Откройте раздел Окружение и нажмите Вставить файл .env.
  2. Вставьте свой старый .env или переменные из панели старого хостинга. Строка с токеном получит пометку Пропущено и пояснение Токен Telegram вводится на странице «Бот», раздел Telegram, поэтому эта строка пропускается. Ваш код читает его как TELEGRAM_BOT_TOKEN, а также как BOT_TOKEN, TOKEN, TELEGRAM_TOKEN и TELOXIDE_TOKEN.
  3. Проверьте список (у имён, похожих на секреты, есть значок Секрет) и нажмите кнопку импорта, например Импортировать 3 переменные.

Используете python-dotenv? Переменные из Окружение уже есть в os.environ, а load_dotenv() их не перезаписывает. Была база данных MySQL? Создайте её на странице Базы данных: Как использовать базу данных с вашим ботом.

6. От вебхука к polling

Некоторые хостинги запускают бота через вебхук, например через веб-приложение на PythonAnywhere. Здесь ваш бот использует long polling: он сам спрашивает у Telegram новые сообщения, и ему не нужен собственный адрес. Для вебхука нужен публичный HTTPS-адрес, которого в этих тарифах пока нет. Измените запуск бота:

БиблиотекаУберитеИспользуйте
python-telegram-botapplication.run_webhook(...)application.run_polling()
aiogram 3Веб-приложение aiohttp с SimpleRequestHandlerawait dp.start_polling(bot)
pyTelegramBotAPIbot.set_webhook(...) и маршрут Flaskbot.infinity_polling()
grammYwebhookCallback(bot, ...)bot.start()
Telegrafbot.launch({ webhook: ... })bot.launch()

Небольшой веб-сервер, который на старом хостинге лишь не давал боту засыпать, здесь не нужен: бот работает всё время.

Вебхук остаётся заданным для вашего бота в Telegram, пока его что-то не удалит. python-telegram-bot и grammY удаляют его сами при запуске polling. С другим кодом раздел Telegram показывает Для этого бота задан вебхук: нажмите Удалить вебхук и подтвердите. Ожидающие сообщения сохраняются, так что бот заберёт их здесь.

7. Переключитесь

  1. Остановите бота на старом хостинге: задачу, которая работает постоянно, или задачу по расписанию на PythonAnywhere, развёртывание на Replit или Railway, либо окно терминала или скрипт на компьютере.
  2. Нажмите здесь Запустить и следите за Console, пока бот не войдёт. Выводите строку вроде Logged in as @your_bot, когда бот готов: метка на странице Обзор тогда сменится на Онлайн в Telegram.
  3. Отправьте боту команду в Telegram. Затем отмените старый хостинг.

Если что-то не работает

  • Ваш бот работает ещё и в другом месте над консолью: старая копия всё ещё запущена. Остановите её, затем перезапустите бота здесь. См. Как исправить ошибку 409 Conflict у Telegram-бота.
  • Для вашего бота задан вебхук: нажмите Удалить вебхук, затем перезапустите бота.
  • Неверное имя файла, неверный язык или отсутствующий пакет видны в первые секунды работы консоли, часто в виде баннера. См. Почему ваш бот постоянно останавливается.
  • Бот запускается, но потерял данные: проверьте, что у файлов с данными осталась та же структура папок и что ваш код открывает их по пути относительно /home/container.

Ваш бот уже у другого хостинга? Перенесите его к нам

ПОСЛЕДНИЕ БЛОГИ