Перенос Telegram-бота с PythonAnywhere, Replit, Railway или с вашего компьютера состоит в том, чтобы скопировать его файлы, вставить тот же токен, переключить бота на polling, если он работал через вебхук, и запустить его здесь, остановив старую копию. Токен остаётся прежним, поэтому бот сохраняет свой @username, свои чаты и своих пользователей. Шаги:
- Получите тариф для ботов, настроенный для Telegram, с тем языком, на котором написан ваш бот.
- Скопируйте файлы в Files (zip, загрузка, Распаковать), по SFTP или из Git, вместе с
requirements.txtилиpackage.json. - Задайте Файл запуска и Среда выполнения на странице Бот, в разделе Код.
- Вставьте токен на странице Бот, в разделе Telegram, и нажмите Подключить.
- Импортируйте остальные настройки кнопкой Вставить файл .env в разделе Окружение.
- Если бот работал через вебхук, переведите его на polling.
- Остановите старую копию, нажмите здесь Запустить и следите за 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. Токен
- На странице Бот, в разделе Telegram, вставьте токен бота и нажмите Подключить. Панель проверит его в Telegram и покажет @username вашего бота. Потеряли токен? В @BotFather отправьте
/mybots, выберите своего бота, затем API Token. - Ваш код получает токен как
TELEGRAM_BOT_TOKEN, а также какBOT_TOKEN,TOKEN,TELEGRAM_TOKENиTELOXIDE_TOKEN. Если ваш код читает другое имя, замените эту строку одним из этих имён. - Если токен записан в вашем коде или в
config.json, замените его переменной окружения, напримерos.environ["TELEGRAM_BOT_TOKEN"]в Python илиprocess.env.TELEGRAM_BOT_TOKENв Node.js. Удалите его из всех загруженных файлов.env.
5. Остальные настройки
- Откройте раздел Окружение и нажмите Вставить файл .env.
- Вставьте свой старый
.envили переменные из панели старого хостинга. Строка с токеном получит пометку Пропущено и пояснение Токен Telegram вводится на странице «Бот», раздел Telegram, поэтому эта строка пропускается. Ваш код читает его как TELEGRAM_BOT_TOKEN, а также как BOT_TOKEN, TOKEN, TELEGRAM_TOKEN и TELOXIDE_TOKEN. - Проверьте список (у имён, похожих на секреты, есть значок Секрет) и нажмите кнопку импорта, например Импортировать 3 переменные.
Используете python-dotenv? Переменные из Окружение уже есть в os.environ, а load_dotenv() их не перезаписывает. Была база данных MySQL? Создайте её на странице Базы данных: Как использовать базу данных с вашим ботом.
6. От вебхука к polling
Некоторые хостинги запускают бота через вебхук, например через веб-приложение на PythonAnywhere. Здесь ваш бот использует long polling: он сам спрашивает у Telegram новые сообщения, и ему не нужен собственный адрес. Для вебхука нужен публичный HTTPS-адрес, которого в этих тарифах пока нет. Измените запуск бота:
| Библиотека | Уберите | Используйте |
|---|---|---|
| python-telegram-bot | application.run_webhook(...) | application.run_polling() |
| aiogram 3 | Веб-приложение aiohttp с SimpleRequestHandler | await dp.start_polling(bot) |
| pyTelegramBotAPI | bot.set_webhook(...) и маршрут Flask | bot.infinity_polling() |
| grammY | webhookCallback(bot, ...) | bot.start() |
| Telegraf | bot.launch({ webhook: ... }) | bot.launch() |
Небольшой веб-сервер, который на старом хостинге лишь не давал боту засыпать, здесь не нужен: бот работает всё время.
Вебхук остаётся заданным для вашего бота в Telegram, пока его что-то не удалит. python-telegram-bot и grammY удаляют его сами при запуске polling. С другим кодом раздел Telegram показывает Для этого бота задан вебхук: нажмите Удалить вебхук и подтвердите. Ожидающие сообщения сохраняются, так что бот заберёт их здесь.
7. Переключитесь
- Остановите бота на старом хостинге: задачу, которая работает постоянно, или задачу по расписанию на PythonAnywhere, развёртывание на Replit или Railway, либо окно терминала или скрипт на компьютере.
- Нажмите здесь Запустить и следите за Console, пока бот не войдёт. Выводите строку вроде
Logged in as @your_bot, когда бот готов: метка на странице Обзор тогда сменится на Онлайн в Telegram. - Отправьте боту команду в Telegram. Затем отмените старый хостинг.
Если что-то не работает
- Ваш бот работает ещё и в другом месте над консолью: старая копия всё ещё запущена. Остановите её, затем перезапустите бота здесь. См. Как исправить ошибку 409 Conflict у Telegram-бота.
- Для вашего бота задан вебхук: нажмите Удалить вебхук, затем перезапустите бота.
- Неверное имя файла, неверный язык или отсутствующий пакет видны в первые секунды работы консоли, часто в виде баннера. См. Почему ваш бот постоянно останавливается.
- Бот запускается, но потерял данные: проверьте, что у файлов с данными осталась та же структура папок и что ваш код открывает их по пути относительно
/home/container.



