Вы написали Telegram-бота, он отлично работает на вашем компьютере… ровно до тех пор, пока вы его не выключите. Ноутбук закрыт — бот молчит, интернет мигнул — бот молчит. Решение простое: перенести бота на VPS — арендованный сервер, который работает круглосуточно. Стоит это от 150 ₽ в месяц, а весь переезд занимает минут десять, даже если вы никогда не работали с серверами.
В этом гайде разберём всё по шагам и простыми словами: что арендовать, как подключиться, куда положить код и как сделать так, чтобы бот сам поднимался после любых сбоев. Примеры — для бота на Python (aiogram), но схема один в один работает для Node.js, PHP и Go.
Что понадобится
- Готовый бот — файл или папка с кодом, который уже запускается у вас командой вроде
python bot.py. - Токен бота — строка вида
123456789:AAE…, которую выдал @BotFather при создании бота. - VPS — арендуем на шаге 1, ничего заранее покупать не нужно.
- 10 минут времени. Ни домен, ни SSL-сертификат для старта не нужны.
Шаг 1. Арендуем VPS (2 минуты)
VPS (виртуальный сервер) — это ваш собственный кусочек настоящего сервера в дата-центре: со своей операционной системой, памятью и постоянным интернет-соединением. В отличие от обычного «хостинга для сайтов», здесь вы можете запускать любые программы — в том числе бота.
Для простого бота хватит минимальной конфигурации: 1 процессорное ядро, 1 ГБ оперативной памяти, 10 ГБ диска. Такие тарифы стоят 150–300 ₽/мес — сравнить провайдеров удобно в рейтинге VPS для Telegram: там собраны конфигурации под ботов, цены и пинг до серверов Telegram. Хотите сначала попробовать бесплатно — берите сервер с пробным периодом.
При заказе выберите операционную систему Ubuntu 24.04 LTS — это самый распространённый Linux, под который написаны все инструкции в интернете. После оплаты провайдер пришлёт на почту три вещи: IP-адрес сервера (например, 185.104.114.90), логин (обычно root) и пароль.
Шаг 2. Подключаемся к серверу (1 минута)
К серверу подключаются по SSH — это защищённый «удалённый терминал»: вы печатаете команды у себя, а выполняются они на сервере.
На Windows: откройте PowerShell (Пуск → наберите «PowerShell»). На macOS или Linux: откройте Терминал. Дальше всё одинаково — введите команду, подставив свой IP:
ssh root@185.104.114.90
При первом подключении система спросит «Are you sure you want to continue connecting?» — наберите yes. Затем вставьте пароль из письма провайдера. Важно: при вводе пароля на экране ничего не отображается — ни звёздочек, ни точек. Это нормально, просто вставьте его (в PowerShell — правой кнопкой мыши) и нажмите Enter.
Если в строке приглашения появилось что-то вроде root@server:~# — поздравляю, вы внутри сервера.
Шаг 3. Готовим сервер (3 минуты)
Сначала обновим систему — это как «установить все обновления Windows», только одной командой:
apt update && apt upgrade -y
Теперь поставим Python-инструменты и git (если бот на Node.js — вместо этого apt install -y nodejs npm):
apt install -y python3-venv python3-pip git
Дальше создадим отдельного пользователя для бота. Работать всё время под root — плохая идея: одна опечатка в команде может снести систему. Пользователь с ограниченными правами безопаснее:
adduser botuser
Система попросит придумать пароль (запомните его) и задаст несколько вопросов про имя и телефон — их можно пропустить, нажимая Enter. Переключаемся на нового пользователя:
su - botuser
Шаг 4. Переносим код бота (2 минуты)
Способ 1 — через git (если код в репозитории):
git clone https://github.com/ваш_логин/mybot.git
Способ 2 — прямое копирование. Откройте на своём компьютере ВТОРОЕ окно терминала (не закрывая первое) и выполните:
scp -r ./mybot botuser@185.104.114.90:~/
Команда scp копирует папку mybot с вашего компьютера в домашнюю папку пользователя botuser на сервере. Пароль — тот, что вы придумали для botuser.
Теперь (в окне с сервером) создадим виртуальное окружение — изолированную «песочницу» для библиотек Python, чтобы зависимости бота не конфликтовали с системными:
cd ~/mybot
python3 -m venv venv
source venv/bin/activate
pip install aiogram
Если у бота есть файл requirements.txt со списком библиотек — вместо последней строки выполните pip install -r requirements.txt.
Проверим, что бот вообще запускается:
python bot.py
Напишите боту в Telegram — он должен ответить. Работает? Отлично, остановите его сочетанием Ctrl+C и идём дальше — сейчас сделаем так, чтобы он работал всегда.
Шаг 5. Автозапуск через systemd (3 минуты)
Это самый важный шаг, который пропускают почти все новички. Если просто запустить бота командой python bot.py и закрыть терминал — бот умрёт вместе с сессией. Нужен «надзиратель», который будет держать бота запущенным всегда: после ошибок, перезагрузок сервера, чего угодно. В Linux этим занимается systemd.
Вернитесь в root-сессию (наберите exit или откройте новое подключение) и создайте файл службы:
nano /etc/systemd/system/mybot.service
Откроется простейший текстовый редактор. Вставьте туда этот текст (правой кнопкой мыши в PowerShell или Cmd+V на Mac), заменив токен на свой:
[Unit]
Description=Telegram Bot
After=network.target
[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
Environment="BOT_TOKEN=123456789:AAE..."
ExecStart=/home/botuser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Что тут написано, по-человечески: «запускай файл bot.py от имени botuser из папки бота; если бот упал — жди 5 секунд и запускай снова; стартуй автоматически при включении сервера». Строка Environment передаёт боту токен через переменную окружения — в коде читайте его как os.getenv("BOT_TOKEN"), а не храните строкой (иначе токен рано или поздно утечёт вместе с кодом).
Сохраните файл: Ctrl+O, Enter, затем Ctrl+X для выхода. Запускаем:
systemctl enable --now mybot

Готово. Проверить, что бот жив: systemctl status mybot (должно быть зелёное «active (running)»). Посмотреть логи бота в реальном времени: journalctl -u mybot -f. Перезапустить после обновления кода: systemctl restart mybot.
Long Polling или Webhook — что это и что выбрать

У бота есть два способа получать сообщения. Long Polling — бот сам постоянно спрашивает Telegram «есть что новое?». Именно так работает код выше: просто, надёжно, не нужны ни домен, ни сертификаты. Webhook — наоборот, Telegram сам стучится к боту при каждом сообщении: отклик быстрее и ресурсов тратится меньше, но нужны домен и HTTPS.
Правило простое: начинайте с Long Polling. Переходить на Webhook имеет смысл, когда бот вырос до ~30 сообщений в секунду. Подробный разбор конфигураций под нагрузку — в рейтинге VPS для Telegram.
Частые ошибки новичков
- Запуск в screen/tmux вместо systemd. Кажется, что работает — до первой перезагрузки сервера. Только systemd.
- Токен прямо в коде. Зальёте код на GitHub — токен утечёт, бота угонят. Только переменные окружения.
- Работа под root. Одна опечатка — и системы нет. Заведите отдельного пользователя, это две команды.
- Нет мониторинга. Бот может молчать сутками, пока кто-то не пожалуется. Бесплатный Uptime Robot проверяет бота каждые 5 минут и шлёт алерт при падении.
- Сервер никогда не обновляется. Раз в месяц:
apt update && apt upgrade -y. Ещё лучше — включить автообновления безопасности:apt install unattended-upgrades.
Частые вопросы
Сколько всё это стоит? Минимальный VPS под бота — 130–300 ₽/мес. Дешевле всего смотреть в рейтинге дешёвых VPS.
Потянет ли самый дешёвый тариф моего бота? Бот на 1 000–2 000 активных пользователей спокойно живёт на 1 ядре и 1 ГБ памяти. Упрётесь в лимиты — тариф апгрейдится в пару кликов без переезда.
Можно ли хостить несколько ботов на одном VPS? Да — заведите каждому свою папку и свой systemd-сервис (mybot1.service, mybot2.service). Памяти 1 ГБ хватит на 3–5 лёгких ботов.
Бот на Node.js/PHP — что меняется? Только установка окружения (nodejs вместо python3-venv) и строка ExecStart в systemd (node bot.js). Вся остальная схема идентична.
Что делать, если бот упал и не поднимается? Смотрите логи: journalctl -u mybot -n 50 покажет последние 50 строк — там будет текст ошибки Python. Чаще всего это опечатка в пути WorkingDirectory или невалидный токен.
Итог
Десять минут — и бот работает круглосуточно на сервере за 150–300 ₽/мес: сам перезапускается после сбоев, стартует при перезагрузке сервера и не зависит от вашего компьютера. Дальше по теме: подборка VPS для Python с готовыми окружениями и пробные VPS — если хотите сначала потренироваться бесплатно.