Как запустить Telegram-бота на VPS за 15 минут

Бот, запущенный на домашнем компьютере, умирает вместе с ним: выключили ноутбук — бот замолчал. На VPS бот работает круглосуточно и сам перезапускается после сбоев. В этом гайде мы за 15 минут перенесём бота на сервер и настроим автозапуск.

Что понадобится

  • Токен бота. Его выдаёт @BotFather в Telegram по команде /newbot.
  • Код бота на Python. Если своего пока нет, ниже есть готовый пример на aiogram 3.
  • Сервер (VPS). Я использую Timeweb Cloud: https://timeweb.cloud/?i=148873
    Для простого бота хватит самой младшей конфигурации: 1 vCPU и 1 ГБ памяти.
  • Терминал. На Windows 10/11 подойдёт встроенный PowerShell, на macOS и Linux — обычный «Терминал».

Ссылка на Timeweb Cloud партнёрская.

Шаг 1. Создаём сервер

Зарегистрируйтесь в Timeweb Cloud и создайте облачный сервер со следующими параметрами:

  1. Операционная система: Ubuntu 24.04.
  2. Конфигурация: минимальная (1 vCPU, 1 ГБ RAM). Для одного бота этого с запасом.
  3. Регион: любой. Для Telegram-бота задержка почти не важна.
  4. Доступ: если умеете, добавьте SSH-ключ. Если нет — используйте пароль root, который придёт на почту или появится в панели.

Через минуту-две сервер запустится, и в панели появится его IP-адрес.

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

Откройте терминал и введите команду, подставив свой IP:

ssh root@ВАШ_IP

При первом подключении система спросит, доверяете ли вы серверу. Напишите yes и введите пароль. Символы при вводе пароля не отображаются — это нормально.

Если видите строку вида root@имя-сервера:~#, вы на сервере.

Шаг 3. Обновляем систему и создаём пользователя

Запускать бота от root небезопасно, поэтому создадим для него отдельного пользователя:

apt update && apt upgrade -y
apt install -y python3-venv python3-pip git
adduser bot

Команда adduser попросит придумать пароль, остальные вопросы можно пропустить клавишей Enter. Переключаемся на нового пользователя:

su - bot

Шаг 4. Кладём код бота на сервер

Если код лежит на GitHub, просто клонируйте его:

git clone https://github.com/ВАШ_АККАУНТ/ВАШ_РЕПОЗИТОРИЙ.git mybot

Шаг 5. Виртуальное окружение и токен

Устанавливаем зависимости в изолированное окружение:

cd ~/mybot
python3 -m venv venv
source venv/bin/activate
pip install aiogram

Если в проекте есть requirements.txt, вместо последней строки выполните pip install -r requirements.txt.

Токен не храним в коде — кладём его в отдельный файл .env и закрываем доступ к нему:

echo "BOT_TOKEN=ВАШ_ТОКЕН" > .env
chmod 600 .env

Проверяем, что бот запускается:

export $(cat .env) && python bot.py

Напишите боту в Telegram /start. Если он ответил — всё работает. Остановите его сочетанием Ctrl+C: дальше запуском займётся система.

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

systemd сам запустит бота после перезагрузки сервера и поднимет его, если он упадёт. Возвращаемся к root и создаём файл службы:

exit
nano /etc/systemd/system/mybot.service

Вставляем:

[Unit] Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service] User=bot
WorkingDirectory=/home/bot/mybot EnvironmentFile=/home/bot/mybot/.env ExecStart=/home/bot/mybot/venv/bin/python
bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

Включаем и запускаем службу:

systemctl daemon-reload
systemctl enable --now mybot
systemctl status mybot

Зелёная надпись active (running) означает, что бот работает. Теперь можно закрыть терминал и выключить компьютер — бот продолжит отвечать.

Живые логи бота:

journalctl -u mybot -f

Как обновить бота

Если код на GitHub:

su - bot -c "cd ~/mybot && git pull"

systemctl restart mybot

Если меняли файл вручную — просто выполните systemctl restart mybot.

Минимальная защита сервера

Включите файрвол и оставьте открытым только SSH. Telegram-боту на polling входящие порты не нужны:

ufw allow OpenSSH

ufw enable

Хорошая следующая ступень — вход по SSH-ключу вместо пароля.

Итог

За шесть шагов бот переехал на сервер, запускается сам и перезапускается после сбоев. Если хотите повторить, сервер в Timeweb Cloud можно создать здесь: https://timeweb.cloud/?i=148873

Не получается или нет времени разбираться? Напишите мне — настрою бота на сервере под ключ.

11