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 или SQLite | Nano: 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. Заказ сервера
- Зарегистрируйтесь в кабинете по ссылке lk.casperlab.ru/register, это занимает минуту.
- На вкладке «VPS» выберите тариф: Nano для бота без базы, Start для бота с базой. Период: месяц со скидкой за 3, 6 или 12 месяцев либо «по часам», если бот нужен на время акции.
- Выберите образ Ubuntu 24.04 или приложение Docker из каталога. Если у вас есть SSH-ключ, добавьте его при заказе, тогда пароль не понадобится.
- Оплатите заказ. Примерно через 60 секунд в карточке сервера появятся IP-адрес и данные для входа.

Шаг 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 botjournalctl сам ротирует журнал, 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.runginx принимает 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 %), в пересчёте на месяц | Час | Две недели по часам |
|---|---|---|---|---|
| Nano | 390 ₽ | 332 ₽ | 0,60 ₽ | 200 ₽ |
| Start | 620 ₽ | 527 ₽ | 0,95 ₽ | 318 ₽ |
| Pro | 1 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