Как запустить 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 и создайте облачный сервер со следующими параметрами:
- Операционная система: Ubuntu 24.04.
- Конфигурация: минимальная (1 vCPU, 1 ГБ RAM). Для одного бота этого с запасом.
- Регион: любой. Для Telegram-бота задержка почти не важна.
- Доступ: если умеете, добавьте 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
Не получается или нет времени разбираться? Напишите мне — настрою бота на сервере под ключ.