Как развернуть Telegram-бота на VPS за пару часов

Как развернуть Telegram-бота на VPS за пару часов

Когда бот начинает работать по-настоящему — обслуживать реальных клиентов, напоминать им о встречах, принимать платежи, — держать его на своём ноутбуке больше нельзя. Нужен сервер, который работает 24/7.

Многие владельцы бизнеса думают, что это сложно и дорого. На самом деле нужно несколько часов и примерно 300 рублей в месяц.

Выбираем VPS

VPS — это виртуальный сервер, который арендуют у хостинга. На что смотреть:

  • Оперативная память: для обычного бота хватит 1–2 ГБ.
  • Процессор: 1–2 ядра.
  • Диск: 20–30 ГБ.
  • Где стоит сервер: ближе к вашим клиентам. Если бот для России, берите дата-центр в России: так проще и с оплатой, и с поддержкой.

Где можно взять сервер:

Хостинг Страна Чем удобен
Beget Россия простая панель, поддержка на русском
Selectel Россия много дата-центров в России, гибкие конфигурации
Timeweb Cloud Россия удобная панель, быстрый запуск сервера
Hetzner Германия недорогие мощные серверы, но с российской картой не оплатить
DigitalOcean США понятный интерфейс, но с российской картой не оплатить

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

Что нужно сделать сразу после покупки

1. SSH-ключ

Входите на сервер не по паролю, а по SSH-ключу — так намного безопаснее.

В панели хостинга обычно есть кнопка «добавить SSH-ключ». Если у вас его нет, создайте на своём компьютере:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "bot@my-server"

Скопируйте содержимое файла ~/.ssh/id_ed25519.pub в панель хостинга.

2. Подключаемся к серверу

ssh root@123.45.67.89

(вместо IP подставьте реальный адрес вашего сервера)

3. Обновляем систему

apt update && apt upgrade -y

Это может занять несколько минут.

4. Создаём пользователя для бота

adduser bot
usermod -aG sudo bot

Задайте пароль: он понадобится для команд с sudo.

Теперь переходим на этого пользователя:

su - bot

Устанавливаем Python и бота

Большинство Telegram-ботов пишут на Python. Ставим его и git:

sudo apt install -y python3 python3-pip python3-venv git

Забираем код вашего бота. Если он на GitHub:

git clone https://github.com/your-repo/bot.git
cd bot

Создаём виртуальное окружение (чтобы зависимости бота не мешали системе):

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Сохраняем токен и переменные

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

Создайте файл .env в папке бота:

nano .env

И напишите:

TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
DATABASE_URL=sqlite:///./bot.db

А в коде читайте токен из этого файла (нужна библиотека python-dotenv в requirements.txt):

import os
from dotenv import load_dotenv

load_dotenv()
token = os.getenv('TELEGRAM_BOT_TOKEN')

Ограничьте доступ к файлу:

chmod 600 .env

Проверяем, что бот работает

python main.py

Отправьте боту сообщение из Telegram. Если ответил — работает. Нажмите Ctrl+C.

Запускаем бота автоматически

Нужно, чтобы бот запускался при загрузке сервера и перезапускался, если упадёт. Для этого используем systemd.

Создайте файл:

sudo nano /etc/systemd/system/telegram-bot.service

Скопируйте туда:

[Unit]
Description=My Telegram Bot
After=network.target

[Service]
Type=simple
User=bot
WorkingDirectory=/home/bot/bot
ExecStart=/home/bot/bot/venv/bin/python /home/bot/bot/main.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Активируем сервис:

sudo systemctl daemon-reload
sudo systemctl enable telegram-bot.service
sudo systemctl start telegram-bot.service

Проверяем статус:

sudo systemctl status telegram-bot.service

Если статус active (running) — всё работает. Логи смотрим так:

sudo journalctl -u telegram-bot.service -n 20

Что дальше

Логи бота systemd пишет в свой журнал, и со временем он занимает место. Ограничьте его размер: в файле /etc/systemd/journald.conf укажите

[Journal]
SystemMaxUse=500M

и перезапустите журнал:

sudo systemctl restart systemd-journald

Если нужна база данных — PostgreSQL ставится так:

sudo apt install postgresql
sudo -u postgres createuser bot
sudo -u postgres createdb -O bot bot_database

Если нужна автоматическая резервная копия — напишите мне, помогу настроить выгрузку на Google Drive или Яндекс.Диск.

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

«Connection refused» при входе по SSH — сервер не принимает подключение. Проверьте IP-адрес, что сервер запущен, и правила firewall в панели хостинга.

«Permission denied» в логах бота — у пользователя bot нет прав на файлы. Сделайте его владельцем папки: sudo chown -R bot:bot /home/bot/bot.

Бот перестал отвечать — скорее всего, сервис упал. Посмотрите journalctl и проверьте ошибки в коде.

Не видит зависимости — забыли source venv/bin/activate перед pip install. А в systemd указывайте полный путь: /home/bot/bot/venv/bin/python.

Итоги

Ваш бот теперь работает 24 часа в сутки на собственном сервере. Он может обрабатывать заявки, напоминать о встречах, принимать платежи — всё, что вы в нём запрограммировали.

Если нужна помощь с более сложной настройкой — резервные копии, собственный домен, интеграция с CRM или мониторинг сервера — готов помочь. Напишите, разберёмся вместе.

Нужен Telegram-бот для вашего дела?

Расскажите задачу — отвечу в течение дня, предложу решение и точную цену.

Написать в Telegram