Бот, запущенный на домашнем компьютере, живёт ровно до того момента, пока вы не закроете ноутбук. Отключился интернет, ушла Windows в обновление, кот дёрнул провод — бот молчит, пользователи пишут в пустоту.
Сервер решает это раз и навсегда: он не выключается, не спит и не перезагружается без спроса. Разберём, как перенести бота на VPS так, чтобы он поднимался сам после любого сбоя.
Что понадобится
Самый дешёвый тариф. Телеграм-бот — это несколько мегабайт памяти и почти нулевая нагрузка на процессор. Конфигурации 1 ядро, 1 ГБ памяти хватит с запасом даже на несколько ботов одновременно.
Из системы берите Ubuntu 24.04 — под неё написано большинство инструкций, и вы легко найдёте ответ, если что-то пойдёт не так.
Если сервера ещё нет, посмотрите каталог хостингов — для бота подойдёт любой тариф из нижней части списка.
Шаг 1. Подключаемся и обновляем систему
Зайдите на сервер по SSH (подробно это разобрано в гайде про первую настройку VPS) и первым делом обновите пакеты:
root@vps:~#apt update && apt upgrade -yУстановите Python и инструмент для виртуальных окружений:
root@vps:~#apt install -y python3 python3-pip python3-venv gitШаг 2. Заводим отдельного пользователя
Запускать бота от имени root — плохая привычка. Если в коде окажется уязвимость, злоумышленник получит полный контроль над сервером. Создадим отдельного пользователя без лишних прав:
root@vps:~#adduser --system --group --home /opt/tgbot tgbotПочему это важно
Бот с правами обычного пользователя в худшем случае навредит только своим файлам. Бот с правами root может стереть систему целиком.
Шаг 3. Загружаем код бота
Если код лежит в Git-репозитории:
root@vps:~#cd /opt/tgbot && git clone https://github.com/ваш-логин/ваш-бот.git appЕсли репозитория нет, загрузите файлы с компьютера. На Windows удобно через WinSCP или Termius, на macOS и Linux — одной командой:
root@vps:~#scp -r ./мой-бот root@ВАШ_IP:/opt/tgbot/appШаг 4. Виртуальное окружение и зависимости
Виртуальное окружение изолирует библиотеки бота от системных. Без него обновление системы может сломать бота, и наоборот.
root@vps:~#cd /opt/tgbot/approot@vps:~#python3 -m venv venvroot@vps:~#./venv/bin/pip install --upgrade piproot@vps:~#./venv/bin/pip install -r requirements.txtНет файла requirements.txt? Установите библиотеки вручную, например:
root@vps:~#./venv/bin/pip install aiogram python-dotenvШаг 5. Прячем токен
Токен бота — это пароль. Никогда не оставляйте его прямо в коде: случайно зальёте на GitHub, и бота уведут за минуты. Токены Telegram активно ищут автоматическими сканерами.
Создайте файл с настройками:
root@vps:~#nano /opt/tgbot/app/.envВнутрь впишите:
BOT_TOKEN=1234567890:AAxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Сохраните: Ctrl+O, Enter, затем Ctrl+X.
Закройте файл от посторонних глаз и передайте владение боту:
root@vps:~#chmod 600 /opt/tgbot/app/.envroot@vps:~#chown -R tgbot:tgbot /opt/tgbotШаг 6. Автозапуск через systemd
Это ключевой момент. Просто запустить python bot.py мало — при закрытии SSH-сессии процесс умрёт. Нужна служба, которая стартует при загрузке сервера и поднимает бота после падения.
Создайте файл службы:
root@vps:~#nano /etc/systemd/system/tgbot.serviceВставьте:
[Unit]
Description=Telegram-бот
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=tgbot
Group=tgbot
WorkingDirectory=/opt/tgbot/app
ExecStart=/opt/tgbot/app/venv/bin/python bot.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Замените bot.py на имя вашего главного файла.
Строка Restart=always — самая ценная. Упал бот с ошибкой, оборвалась сеть, кончилась память — systemd подождёт 10 секунд и запустит его заново. Без неё вы узнаете о падении от пользователей.
Включаем и запускаем:
root@vps:~#systemctl daemon-reloadroot@vps:~#systemctl enable --now tgbotШаг 7. Проверяем, что живой
root@vps:~#systemctl status tgbotИщите строку Active: active (running). Если там failed — смотрите, что пишет бот:
root@vps:~#journalctl -u tgbot -n 50 --no-pagerЧтобы наблюдать за логами в реальном времени, как за консолью на компьютере:
root@vps:~#journalctl -u tgbot -fЧастая ошибка новичков
Бот запускается вручную, но падает как служба. Почти всегда причина в путях: в коде указан относительный путь к файлу (например, data.json), а systemd стартует из другого каталога. Либо укажите абсолютные пути, либо проверьте, что WorkingDirectory в службе совпадает с папкой бота.
Обновление бота
Внесли правки в код — обновите и перезапустите:
root@vps:~#cd /opt/tgbot/approot@vps:~#git pullroot@vps:~#systemctl restart tgbotПерезапуск занимает секунду, пользователи ничего не заметят.
Сколько это стоит
Тариф на 1 ГБ памяти обойдётся в 250–400 ₽ в месяц — примерно как две чашки кофе. За эти деньги бот работает круглосуточно, не зависит от вашего компьютера и отвечает пользователям мгновенно.
На таком сервере спокойно уживаются несколько ботов сразу: заведите для каждого свою службу с отдельным именем.
Взять сервер под ботаПодойдёт любой начальный тариф — боту нужно меньше ресурсов, чем открытой вкладке браузера.
Смотреть тарифыЧто дальше
Бот работает — самое время подумать о надёжности. Настройте защиту сервера от взлома, чтобы никто не подобрал пароль по SSH, и автоматические бэкапы, чтобы не потерять базу пользователей.
А если хотите следить за тем, что бот действительно жив, а не просто «запущен», пригодится мониторинг — он пришлёт уведомление, когда что-то сломается.