Вы написали своего первого бота, он отлично работает на локальном компьютере, но выключается, когда вы закрываете ноутбук? Пора переезжать на VPS (виртуальный сервер).
В этой статье мы разберем самый простой и надежный способ запустить бота так, чтобы он работал 24/7, автоматически перезапускался после сбоев и был защищен.
Многие новички ищут "бесплатный хостинг для телеграм бота python" (Heroku, PythonAnywhere, Glitch). Да, это бесплатно, но есть нюансы:
aiogram там настроить сложнее из-за специфики веб-сокетов).Поэтому VPS (Virtual Private Server) за 150-300 рублей в месяц — это стандарт. Вы получаете полноценный компьютер, который работает 24/7 и принадлежит только вам.
Если у вас еще нет сервера, рекомендуем ознакомиться с нашей статьей по выбору хостинга.
После покупки у вас должны быть:
45.12.34.56).root).Откройте терминал (на Mac/Linux) или PowerShell (на Windows) и введите команду:
ssh root@ваш_ip_адрес
Введите пароль (символы не будут отображаться при вводе в целях безопасности) и нажмите Enter.
Большинство современных ботов написаны на Python 3.10+. Убедимся, что на сервере свежий софт.
apt update && apt upgrade -y
apt install python3 python3-pip python3-venv git -y
python3 --version
Если версия ниже 3.8, некоторые современные библиотеки могут не работать.
⚠️ Важно: Никогда не храните токен бота прямо в коде (в файле .py). Если вы случайно выложите код на GitHub, ваш бот могут угнать за секунды.
В коде бота используйте библиотеку python-dotenv:
# Вместо bot = Bot(token="123:ABC...")
import os
from dotenv import load_dotenv
load_dotenv()
token = os.getenv("BOT_TOKEN")
Самый удобный способ перенести код — использовать Git.
.env должен быть в .gitignore!).cd /root/
git clone https://github.com/ваш-ник/ваш-репозиторий.git
cd ваш-репозиторий
Чтобы не захламлять системный Python, создадим изолированное окружение:
python3 -m venv venv
source venv/bin/activate
Теперь установим зависимости:
pip install -r requirements.txt
(Не забудьте создать файл requirements.txt заранее командой pip freeze > requirements.txt на своем компьютере).
Так как мы не заливали файл с секретами на GitHub, создадим его вручную на сервере:
nano .env
Вставьте туда ваш токен и другие секреты:
BOT_TOKEN=123456789:ABCDefGHIjkLmnOPqrstUVwxyz
DB_PASSWORD=supersecret
Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X).
Если просто запустить бота командой python3 bot.py, он выключится при закрытии терминала. Чтобы этого не произошло, мы поручим Linux следить за ботом через систему Systemd.
nano /etc/systemd/system/bot.service
[Unit]
Description=Telegram Bot Service
After=network.target
[Service]
# Имя пользователя, под которым запускать (обычно root)
User=root
# Папка с ботом
WorkingDirectory=/root/ваш-репозиторий
# Команда запуска (используем python из виртуального окружения!)
ExecStart=/root/ваш-репозиторий/venv/bin/python main.py
# Перезапуск при падении
Restart=always
# Пауза перед перезапуском (чтобы не спамить запросами при циклической ошибке)
RestartSec=10
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable bot
systemctl start bot
Бот запущен в фоне. Как узнать, работает ли он или выдал ошибку?
systemctl status bot
Вы должны увидеть зеленый кружок active (running).
Если бот не отвечает, посмотрите, что он пишет в консоль. Для этого используйте команду journalctl:
journalctl -u bot -f
Флаг -f (follow) означает, что новые строки будут появляться на экране в реальном времени. Нажмите Ctrl+C, чтобы выйти.
Проблема 1: Ошибка ModuleNotFoundError
Скорее всего, вы забыли установить зависимости или не используете виртуальное окружение в файле .service.
Решение: Проверьте путь в ExecStart. Он должен вести к .../venv/bin/python, а не просто python3.
Проблема 2: Ошибка 409 Conflict
Вы запускаете бота методом polling (опрос), но ранее установили webhook.
Решение: Сбросьте вебхук через браузер: https://api.telegram.org/bot<ВАШ_ТОКЕН>/deleteWebhook.
Проблема 3: Бот падает сразу после запуска
Смотрите логи (journalctl -u bot -f). Часто причина в опечатке в .env файле или отсутствии базы данных.
Вам не нужно удалять и заливать файлы заново.
ssh root@...cd ваш-репозиторийgit pullsystemctl restart botДа. Просто создайте для каждого бота свою папку и свой отдельный файл .service (например, bot1.service и bot2.service). Главное, чтобы хватило оперативной памяти.
Используйте SFTP-клиент (например, FileZilla) или команду scp в терминале:
scp root@ip:/путь/к/файлу /локальная/папка
Теперь ваш бот работает автономно. Даже если сервер перезагрузится, Systemd автоматически поднимет бота.
Что дальше?
Если настройка сервера кажется вам слишком сложной, вы всегда можете найти специалиста по DevOps на FreelanceHub, который все настроит за вас за пару часов.
Хотите работать удаленно, но нет опыта? Подробный гайд для новичков: как выбрать нишу, составить портфолио и найти первый заказ на бирже.
Какие бывают профессии на фрилансе? От простых задач (тексты, транскрибация) до IT и дизайна. Разбор направлений для новичков.
Быстрый MVP против безопасности. Почему код от нейросетей часто содержит уязвимости (разбор на примере CVE-2025-55182) и старые библиотеки.