Перейти к содержимому
К
VPS

VPS для Telegram-бота: какой сервер нужен и как запустить бота за 15 минут

Telegram-боту на Python или Node.js без собственной базы данных хватает самого маленького VPS: в CasperLab это Nano с 1 vCPU, 1 ГБ памяти и 5 ГБ NVMe за 390 ₽ в месяц или 0,60 ₽ в час. Процесс бота на aiogram или grammY занимает 50–100 МБ памяти и почти не грузит процессор, потому что большую часть времени ждёт сообщений. Если боту нужны PostgreSQL или Redis, берите Start с 2 ГБ за 620 ₽ в месяц: база и кэш вместе съедают ещё 300–500 МБ, и на 1 ГБ становится тесно (цены на октябрь 2026).

От заказа сервера до работающего бота проходит около 15 минут: минута на создание сервера, пять минут на подключение по SSH и установку зависимостей, ещё десять на перенос кода, настройку автозапуска и проверку логов. Ниже пошаговая инструкция для двух вариантов запуска, через systemd и через Docker Compose, а также вебхук с HTTPS, бэкапы и цена по часам.

Сколько ресурсов нужно боту

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

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

СценарийЧто внутриТариф CasperLabЦена в месяцЦена в час
Бот-меню, FAQ, приём заявок в чатPython или Node.js, данные в JSON или SQLiteNano: 1 vCPU, 1 ГБ, 5 ГБ390 ₽0,60 ₽
Бот с базой: заказы, подписки, рассылкиБот + PostgreSQL или MySQL + Redis для очередейStart: 1 vCPU, 2 ГБ, 20 ГБ620 ₽0,95 ₽
Несколько ботов или бот с админкой на сайтеDocker, 2–4 контейнера, веб-панельPro: 2 vCPU, 4 ГБ, 40 ГБ1 190 ₽1,82 ₽
Бот с нейросетью или обработкой медиаOllama, конвертация видео, распознаваниеUltra: 4 vCPU, 8 ГБ, 80 ГБ и выше2 290 ₽3,50 ₽

Диск для бота почти не важен: код весит мегабайты, логи ротируются. Исключение: бот, который хранит присланные пользователями файлы. Тогда считайте объём и при необходимости добавляйте дополнительный диск по 6 ₽ за гигабайт в месяц.

Какую ОС или приложение выбрать

Для бота подходят Ubuntu 24.04 LTS или Debian 12: у обеих систем долгий срок поддержки, свежие Python 3.12 и Node.js из репозиториев или NodeSource, и под них написана большая часть инструкций в интернете. Разница между ними для бота непринципиальна; если сомневаетесь, берите Ubuntu 24.04.

Второй путь: при заказе выбрать не чистую ОС, а приложение Docker или Docker + Portainer из каталога CasperLab. Сервер создаётся уже с установленным Docker и Compose, а Portainer даёт веб-интерфейс для контейнеров, где видно логи и статус без терминала. Если бот будет жить с PostgreSQL и Redis, Docker удобнее: все три сервиса описываются одним файлом и поднимаются одной командой. Зачем контейнеры нужны не только программистам, разобрано в статье «Docker на VPS».

Запуск бота за 15 минут: пошагово

Шаг 1. Заказ сервера

  1. Зарегистрируйтесь в кабинете по ссылке lk.casperlab.ru/register, это занимает минуту.
  2. На вкладке «VPS» выберите тариф: Nano для бота без базы, Start для бота с базой. Период: месяц со скидкой за 3, 6 или 12 месяцев либо «по часам», если бот нужен на время акции.
  3. Выберите образ Ubuntu 24.04 или приложение Docker из каталога. Если у вас есть SSH-ключ, добавьте его при заказе, тогда пароль не понадобится.
  4. Оплатите заказ. Примерно через 60 секунд в карточке сервера появятся IP-адрес и данные для входа.
Страница заказа VPS с тарифами Nano, Start, Pro, Ultra, Elite, Max
Вкладка «VPS» в кабинете CasperLab: для бота без базы достаточно Nano, для бота с PostgreSQL берите Start.

Шаг 2. Подключение по SSH и базовая подготовка

В Windows откройте PowerShell или Терминал, в macOS и Linux обычный терминал. Подключитесь под root по IP из карточки, обновите пакеты и создайте отдельного пользователя для бота: запускать его под root плохая практика.

ssh root@203.0.113.10
apt update && apt upgrade -y
adduser bot
usermod -aG sudo bot

Сразу после этого стоит закрыть вход по паролю, включить firewall и fail2ban. Эти пять настроек занимают десять минут и описаны в статье «Арендовали VPS: первые настройки безопасности». Для бота на polling входящие порты вообще открывать не нужно, достаточно 22 для SSH.

Шаг 3. Установка окружения и кода

Для Python ставим интерпретатор и виртуальное окружение, для Node.js берём LTS-версию. Код бота удобнее клонировать из Git: тогда обновление сводится к git pull и перезапуску.

# Python
apt install -y python3 python3-venv git
su - bot
git clone https://github.com/you/your-bot.git app
cd app && python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

# Node.js
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs git
su - bot && git clone https://github.com/you/your-bot.git app
cd app && npm ci

Токен бота от BotFather и пароли к базе храните в файле .env с правами 600, а не в коде. Пароль к PostgreSQL сгенерируйте в генераторе паролей: 20 символов, без словарных слов.

Шаг 4а. Автозапуск через systemd

systemd запустит бота при загрузке сервера и поднимет его заново после падения. Создайте файл /etc/systemd/system/bot.service:

[Unit]
Description=Telegram bot
After=network-online.target

[Service]
User=bot
WorkingDirectory=/home/bot/app
EnvironmentFile=/home/bot/app/.env
ExecStart=/home/bot/app/.venv/bin/python main.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Для Node.js замените строку ExecStart на /usr/bin/node index.js. Затем включите и запустите сервис:

systemctl daemon-reload
systemctl enable --now bot
systemctl status bot

Шаг 4б. Запуск через Docker Compose

Если при заказе выбрано приложение Docker, напишите docker-compose.yml в папке проекта. Пример для бота с PostgreSQL и Redis:

services:
  bot:
    build: .
    env_file: .env
    restart: unless-stopped
    depends_on: [db, redis]
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes: [pgdata:/var/lib/postgresql/data]
    restart: unless-stopped
  redis:
    image: redis:7
    restart: unless-stopped
volumes:
  pgdata:
docker compose up -d --build
docker compose ps

Опция restart: unless-stopped делает то же, что Restart=always в systemd: контейнеры поднимаются после перезагрузки сервера и после падения. Данные базы лежат в томе pgdata и переживают пересборку контейнера с ботом.

Автозапуск, логи и обновления

Первое, что нужно проверить после запуска: бот отвечает в Telegram, а после команды reboot поднимается сам. Второе: где смотреть логи, когда что-то сломается.

# systemd
journalctl -u bot -f
journalctl -u bot --since "1 hour ago"

# Docker
docker compose logs -f bot
docker compose logs --tail=200 bot

journalctl сам ротирует журнал, Docker по умолчанию пишет логи в файл без ограничения, поэтому для контейнера добавьте в сервис logging: {options: {max-size: "10m", max-file: "3"}}, иначе через полгода диск Nano забьётся логами. Обновление бота из Git: git pull, затем systemctl restart bot или docker compose up -d --build. В кабинете CasperLab включите оповещения о CPU, памяти, диске и недоступности, чтобы узнать о проблеме раньше пользователей.

Вебхук и HTTPS

Для вебхука Telegram принимает адреса только по HTTPS с действительным сертификатом, на портах 443, 80, 88 или 8443. Значит нужны три вещи: домен (или поддомен вроде bot.вашсайт.ru), A-запись на IP сервера и сертификат. Самый простой путь: бесплатный сертификат Let's Encrypt через certbot и nginx как обратный прокси перед ботом.

apt install -y nginx certbot python3-certbot-nginx
certbot --nginx -d bot.example.ru

nginx принимает HTTPS на 443 и передаёт запросы боту на локальный порт, например 8080. В коде бота указываете вебхук https://bot.example.ru/webhook и секретный токен, чтобы никто чужой не слал запросы на этот адрес. Let's Encrypt выдаёт сертификат на 90 дней и продлевает его сам; как не сломать автопродление, описано в статье «Let's Encrypt: как работает автопродление». Домен в зоне .ru стоит 299 ₽ в первый год, поддомен существующего домена бесплатен.

Проверьте, что polling выключен

Telegram не отдаёт обновления через polling, пока установлен вебхук, и наоборот. При переходе на вебхук остановите старый процесс, иначе бот будет молчать, а в логах появится ошибка о конфликте.

Бэкапы и снапшоты

Код бота живёт в Git, и его потеря не страшна. Страшна потеря базы: заказы, подписчики, настройки пользователей. В CasperLab у каждого VPS есть 3 автоматических и 2 ручных бэкапа и до 3 снапшотов. Снапшот делайте перед каждым крупным обновлением: он снимается за секунды, и к нему можно откатиться целиком. Ручной бэкап пригодится перед миграцией базы или сменой тарифа.

Дополнительно раз в сутки выгружайте дамп базы в отдельное место, хотя бы в приватный репозиторий или в объектное хранилище: pg_dump в cron занимает одну строку. Так данные переживут и ошибку в коде, которая испортит таблицу, а не только сбой сервера.

Сколько стоит сервер для бота в месяц и по часам

Постоянный бот выгоднее держать на месячном тарифе: Nano 390 ₽, Start 620 ₽, при оплате за год скидка 15 %, то есть Nano выходит около 332 ₽ в месяц. Почасовой режим подходит для бота под акцию, конкурс или мероприятие.

ТарифМесяцГод (−15 %), в пересчёте на месяцЧасДве недели по часам
Nano390 ₽332 ₽0,60 ₽200 ₽
Start620 ₽527 ₽0,95 ₽318 ₽
Pro1 190 ₽1 012 ₽1,82 ₽611 ₽

Две недели по часам считаются как 336 часов × ставка. Если бот нужен только в рабочее время, ставьте сервер на паузу: на паузе списывается только диск, для Nano это 0,04 ₽ в час. Бот на вебхуке при этом перестанет отвечать, так что пауза подходит только для внутренних ботов с понятным расписанием.

Типичные ошибки

  • Запуск вручную через python main.py в SSH-сессии. Закрыли окно, бот умер. Нужен systemd, Docker или хотя бы screen, лучше первые два.
  • Токен в коде и в публичном репозитории. Токен в .env, файл в .gitignore. Утёкший токен отзывайте у BotFather сразу.
  • Работа под root. Ошибка в зависимостях бота под root открывает весь сервер. Отдельный пользователь без лишних прав.
  • Отсутствие ротации логов в Docker. Диск Nano на 5 ГБ забивается за несколько месяцев. Ограничьте размер логов в compose-файле.
  • Белый список IP у внешнего API без учёта сервера. Если бот ходит в CRM или платёжный сервис с ограничением по IP, добавьте туда адрес VPS. Свой адрес с рабочего компьютера и адрес сервера различаются; проверить текущий можно в инструменте «Мой IP», адрес сервера указан в карточке в кабинете.
  • Нет бэкапа базы. Снапшот перед обновлением и ежедневный дамп в cron. Пять минут настройки против потери всех пользователей.

Что дальше

Закажите VPS для бота: Nano за 390 ₽ для бота без базы или Start за 620 ₽ с PostgreSQL и Redis, сервер готов через минуту, деньги можно вернуть в течение 14 дней.

Сгенерируйте пароли для базы и панели в генераторе паролей, а при настройке белых списков сверяйте адреса в «Мой IP».

Перед тем как выпускать бота к пользователям, пройдите чек-лист первых настроек безопасности VPS, а если планируете несколько сервисов на одном сервере, прочитайте, зачем бизнесу Docker.

Заказать VPS в CasperLab

Регистрация в кабинете занимает минуту, без звонков и менеджеров.

Заказать VPS
Поделиться:
Какой VPS нужен для Telegram-бота?
Боту на Python или Node.js без базы данных хватает 1 vCPU и 1 ГБ памяти: в CasperLab это Nano за 390 ₽ в месяц. Боту с PostgreSQL или Redis нужен Start с 2 ГБ за 620 ₽. Pro с 4 ГБ берут под несколько ботов или бота с веб-админкой.
Можно ли хостить Telegram-бота бесплатно?
Бесплатные площадки усыпляют процесс при простое, ограничивают время работы и не дают постоянного IP, поэтому бот отвечает с задержкой или отваливается. Для рабочего бота дешевле надёжный VPS за 390 ₽ в месяц или 0,60 ₽ в час.
Long polling или вебхук: что выбрать для бота?
Для старта long polling: не нужны домен и сертификат, бот работает за минуту. Вебхук быстрее и экономнее, но требует HTTPS-адрес. Переходите на вебхук, когда появится домен и нагрузка вырастет.
Нужен ли домен для Telegram-бота?
Для polling не нужен. Для вебхука обязателен: Telegram шлёт обновления только на HTTPS-адрес с действительным сертификатом. Подойдёт поддомен существующего домена и бесплатный сертификат Let's Encrypt.
Как сделать, чтобы бот не падал и запускался сам после перезагрузки?
Запускайте бота как сервис systemd с параметром Restart=always или в Docker с restart: unless-stopped. Оба варианта поднимают бота после сбоя и после перезагрузки сервера. Логи смотрите через journalctl -u bot или docker compose logs.
Сколько стоит сервер для бота по часам?
Nano 0,60 ₽ в час, Start 0,95 ₽, Pro 1,82 ₽ на октябрь 2026. Две недели работы Nano под акцию обойдутся около 200 ₽. На паузе списывается только диск: для Nano 0,04 ₽ в час.