Как запустить Telegram бота на VPS сервере: Пошаговая инструкция 2025

    Вы написали своего первого бота, он отлично работает на локальном компьютере, но выключается, когда вы закрываете ноутбук? Пора переезжать на VPS (виртуальный сервер).

    В этой статье мы разберем самый простой и надежный способ запустить бота так, чтобы он работал 24/7, автоматически перезапускался после сбоев и был защищен.


    1. Подготовка сервера

    Бесплатный хостинг vs VPS: Что выбрать?

    Многие новички ищут "бесплатный хостинг для телеграм бота python" (Heroku, PythonAnywhere, Glitch). Да, это бесплатно, но есть нюансы:

    Поэтому VPS (Virtual Private Server) за 150-300 рублей в месяц — это стандарт. Вы получаете полноценный компьютер, который работает 24/7 и принадлежит только вам.

    Если у вас еще нет сервера, рекомендуем ознакомиться с нашей статьей по выбору хостинга.

    После покупки у вас должны быть:

    Подключение

    Откройте терминал (на Mac/Linux) или PowerShell (на Windows) и введите команду:

    ssh root@ваш_ip_адрес
    

    Введите пароль (символы не будут отображаться при вводе в целях безопасности) и нажмите Enter.


    2. Обновление и установка Python

    Большинство современных ботов написаны на Python 3.10+. Убедимся, что на сервере свежий софт.

    1. Обновим список пакетов:
    apt update && apt upgrade -y
    
    1. Установим Python, менеджер пакетов pip и Git:
    apt install python3 python3-pip python3-venv git -y
    
    1. Проверим версию:
    python3 --version
    

    Если версия ниже 3.8, некоторые современные библиотеки могут не работать.


    3. Правильная загрузка бота и безопасность (.env)

    ⚠️ Важно: Никогда не храните токен бота прямо в коде (в файле .py). Если вы случайно выложите код на GitHub, ваш бот могут угнать за секунды.

    Шаг 1. Используйте переменные окружения

    В коде бота используйте библиотеку python-dotenv:

    # Вместо bot = Bot(token="123:ABC...")
    import os
    from dotenv import load_dotenv
    
    load_dotenv()
    token = os.getenv("BOT_TOKEN")
    

    Шаг 2. Загрузка кода

    Самый удобный способ перенести код — использовать Git.

    1. Загрузите код вашего бота на GitHub (файл .env должен быть в .gitignore!).
    2. Клонируйте репозиторий на сервер:
    cd /root/
    git clone https://github.com/ваш-ник/ваш-репозиторий.git
    cd ваш-репозиторий
    

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

    Чтобы не захламлять системный Python, создадим изолированное окружение:

    python3 -m venv venv
    source venv/bin/activate
    

    Теперь установим зависимости:

    pip install -r requirements.txt
    

    (Не забудьте создать файл requirements.txt заранее командой pip freeze > requirements.txt на своем компьютере).

    Шаг 4. Создаем .env на сервере

    Так как мы не заливали файл с секретами на GitHub, создадим его вручную на сервере:

    nano .env
    

    Вставьте туда ваш токен и другие секреты:

    BOT_TOKEN=123456789:ABCDefGHIjkLmnOPqrstUVwxyz
    DB_PASSWORD=supersecret
    

    Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X).


    4. Запуск в режиме 24/7 (Systemd)

    Если просто запустить бота командой python3 bot.py, он выключится при закрытии терминала. Чтобы этого не произошло, мы поручим Linux следить за ботом через систему Systemd.

    1. Создайте файл службы:
    nano /etc/systemd/system/bot.service
    
    1. Вставьте туда конфигурацию (внимательно проверьте пути!):
    [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
    
    1. Активируйте службу:
    systemctl daemon-reload
    systemctl enable bot
    systemctl start bot
    

    5. Как следить за ботом (Логи и ошибки)

    Бот запущен в фоне. Как узнать, работает ли он или выдал ошибку?

    Проверка статуса

    systemctl status bot
    

    Вы должны увидеть зеленый кружок active (running).

    Чтение логов в реальном времени

    Если бот не отвечает, посмотрите, что он пишет в консоль. Для этого используйте команду journalctl:

    journalctl -u bot -f
    

    Флаг -f (follow) означает, что новые строки будут появляться на экране в реальном времени. Нажмите Ctrl+C, чтобы выйти.


    6. Troubleshooting: Что делать, если не работает?

    Проблема 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 файле или отсутствии базы данных.

    7. Часто задаваемые вопросы (FAQ)

    Как обновить код бота на сервере?

    Вам не нужно удалять и заливать файлы заново.

    1. Зайдите на сервер: ssh root@...
    2. Перейдите в папку: cd ваш-репозиторий
    3. Скачайте обновления: git pull
    4. Перезапустите бота: systemctl restart bot

    Можно ли запустить несколько ботов на одном сервере?

    Да. Просто создайте для каждого бота свою папку и свой отдельный файл .service (например, bot1.service и bot2.service). Главное, чтобы хватило оперативной памяти.

    Как скачать файлы с сервера на компьютер?

    Используйте SFTP-клиент (например, FileZilla) или команду scp в терминале:

    scp root@ip:/путь/к/файлу /локальная/папка
    

    Заключение

    Теперь ваш бот работает автономно. Даже если сервер перезагрузится, Systemd автоматически поднимет бота.

    Что дальше?

    Если настройка сервера кажется вам слишком сложной, вы всегда можете найти специалиста по DevOps на FreelanceHub, который все настроит за вас за пару часов.

    Как запустить Telegram бота на VPS сервере: Пошаговая инструкция 2025 | FLCHUB | FLCHub