Как задеплоить Telegram-бота на сервер? Инструкция для новичков
В тексте рассмотрим, как развернуть Telegram-бота в облаке Selectel: от подготовки проекта до автоматического запуска и мониторинга. Мы разберем основные этапы настройки сервера, установки зависимостей и обеспечения стабильной работы бота.
Введение
Telegram-боты стали неотъемлемой частью автоматизации бизнес-процессов, клиентской поддержки и даже развлечений. Они позволяют мгновенно взаимодействовать с пользователями, отправлять уведомления и интегрироваться с различными сервисами.
Однако чтобы бот работал круглосуточно и без перебоев, его необходимо развернуть на сервере. Один из удобных вариантов — облачная платформа Selectel, которая предоставляет мощные серверы с предустановленными инструментами для удобного хостинга.
Важно! Инструкция в первую очередь подходит для проектов на Python. Но вы можете разобраться в теме и по подобию развернуть бота на базе своего стека.
Подготовка бота
Первое, с чего стоит начать, — подготовить бота к загрузке на сервер. Нам нужно учитывать пару аспектов: безопасность и автоматизацию. Разберем первое.
1. Уберите API-токен вашего бота. С вероятностью 99,9% вы загрузите своего бота на GitHub, чтобы он был расположен в репозитории и можно было удобно над ним работать как с компьютера, так и с сервера. Если репозиторий публичный, что свойственно для небольших или просто open source-проектов, то «забытый API-ключ» может доставить много хлопот. Ведь с помощью него недоброжелатели могут легко получить доступ к вашему боту. Поэтому пока вместо ключа оставьте пустую строку.
2. Сгенерируйте файл requirements.txt. В любом случае, когда вы будете «распаковывать» бота на сервере, вам понадобится устанавливать все модули заново. Чтобы не делать это вручную и ограничиться одной командой, должен быть файл, в котором описаны все необходимые зависимости. Сгенерировать requirements.txt можно одной командой, когда вы находитесь в корневом каталоге своего проекта:
pip freeze > requirements.txt
Отлично! Код подготовили — осталось его загрузить в Git-репозиторий.
Загрузка кода в репозиторий
Вы можете выбрать любую платформу для работы с Git, принципы везде одни и те же. Но мы разберем на примере самого популярного варианта — GitHub.
1. Зарегистрируйтесь на платформе GitHub.2. Нажмите на кнопку New, чтобы создать новый репозиторий.
3. Назовите репозиторий удобным образом. Рекомендуем поставить галочку напротив Add on README file, чтобы репозиторий не был пустым и вы сразу получили доступ к его файловой системе. Нажмите кнопку Create repository.
4. Мышкой перетащите файлы своего бота, включая requirements.txt, в область репозитория — и все загрузится в облако GitHub.
Выбор конфигурации сервера
Выбор конфигурации облачного сервера для деплоя Telegram-бота зависит от нескольких факторов: предполагаемой нагрузки, требований к производительности, бюджета и ожидаемого количества пользователей. Рассмотрим основные моменты, на которые следует обратить внимание при выборе конфигурации для облачного сервера:
CPU | RAM | SSD | |
Минимальные требования (небольшой бот с простым функционалом) | 1 vCPU | 512 МБ – 1 ГБ | 10 ГБ |
Оптимальная конфигурация (средний бот с БД и API) | 2 vCPU | 2-4 ГБ | 20-40 ГБ |
Относительно мощная конфигурация (высоконагруженный бот с AI, БД, API и графикой) | 4 vCPU | 8 ГБ | 100 ГБ |
Создание сервера в облаке Selectel
Допустим, сам код у вас уже есть. Например, вы написали бота для мониторинга погоды на Python. В данном случае можно создать сервер оптимальной конфигурации, так как бот работает с API и ориентирован на массового потребителя.
1. Первым шагом нужно зарегистрироваться в панели управления Selectel.
2. Далее необходимо пополнить баланс аккаунта. Если у вас есть промокод на бонусы — активируйте его.
3. Так как для бота подходит облачный сервер, переходим в раздел Облачная платформа → Серверы, выбираем регион и пул (для примера укажем Москву) и нажимаем Создать сервер.
4. Теперь нужно настроить конфигурацию. Выбираем произвольный тип конфигурации, ставим 2 vCPU, 4 ГБ RAM и 20 ГБ памяти на диске SSD Универсальный v2. В качестве операционной системы указываем Ubuntu 24.04 LTS.
Обратите внимание: вместе с диском и публичным IP сервер будет обходиться около 96 ₽/день. Но есть способ, как сэкономить до 70%. Можно в Дополнительных настройках указать, что сервер должен быть прерываемым. Тогда стоимость составит всего около 40 ₽/день.
Прерываемые виртуальные машины — это ВМ, которые размещаются на базе неиспользуемых ресурсов активных и резервных хостов. При этом могут быть приостановлены провайдером в любой момент для освобождения занимаемых на железном хосте ресурсов, а их срок жизни не превышает 24 часов. При этом основная конфигурация может быть любой: как фиксированной, так и произвольной.
5. Генерируем на локальном компьютере SSH-ключ по инструкции — и добавляем его на сервер в подразделе Доступ. Это был последний шаг — теперь можно нажать заветную кнопку Создать сервер.
Первичная настройка сервера и перенос бота
Отлично! Telegram-бот есть, виртуальная машина — тоже. Теперь можно перенести код на сервер и запустить его.
Подключение к серверу
1. Сначала нужно подключиться к серверу через SSH. Для этого откройте консоль на своем компьютере и введите команду:
ssh root@IP_АДРЕС_СЕРВЕРА
IP_АДРЕС_СЕРВЕРА — это публичный IP-адрес, выделенный вам в облаке Selectel. Чтобы его узнать, нужно кликнуть на свой сервер в панели управления и перейти в раздел Порты.
После ввода команды терминал спросит вас, будете ли вы использовать SSH-ключ для авторизации. Подтвердите действие — нажмите на букву Y и кнопку Enter. Если все сделано правильно, вы должны попасть на сервер.
Установка необходимых инструментов
Итак, вы находитесь на сервере. Перед непосредственным переносом кода бота важно убедиться, что на сервере установлены все нужные инструменты.
1. Обязательно обновляем все пакеты в системе:
apt update && apt upgrade -y
2. Так как наш бот для мониторинга погоды написан на Python, нужно установить интерпретатор и менеджер пакетов pip. Это все можно сделать одной командой:
apt install python3 python3-pip -y
Загрузка бота на сервер
Вы, наверное, уже догадались, что мы будем переносить бота на сервер посредством GitHub. Это один из самых удобных способов, хотя если вы привыкли загружать объекты на удаленные машины посредством SCP или утилит FileZilla, никто не запрещает. Мы рассмотрим перенос бота с помощью Git и SCP.
1. Установите Git — он понадобится в будущем вне зависимости от того, что вы используете для переноса бота, ведь код будет периодически обновляться:
apt install git -y
2. Создаем папку для бота:
mkdir bot
3. Теперь нужно загрузить файлы бота на сервер. Для начала разберем способ через Git, потом — через SCP.
3.1.1. Настроим Git на сервере:
git config --global user.name "ВашеИмя"
git config --global user.email "your@email.com"
3.1.2. Перейдем в папку с ботом и клонируем в нее репозиторий с ботом:
cd bot
git clone https://github.com/username/repository bot
Замените username/repository на свою ссылку.
3.2.1. Если вы пропустили раздел «Загрузка бота в GitHub» и бот хранится исключительно локально, можно скопировать файлы с помощью SCP. Выполните команду на локальном компьютере:
scp -r /путь/к/папке_бота root@IP_АДРЕС_СЕРВЕРА:/root/bot
2. Затем проверьте файлы на сервере:
cd /root/bot
ls
Настройка виртуального окружения
После загрузки кода необходимо установить библиотеки, которые использует бот. Но для начала нужно развернуть виртуальное окружение. Оно позволит изолировать библиотеки и другие зависимости бота от глобальных пакетов Python, тем самым — избежать конфликтов версий.
1. Устанавливаем venv:
apt install python3-venv -y
2. Создаем виртуальное окружение и активируем его:
python3 -m venv venv
source venv/bin/activate
3. Находясь внутри виртуального окружения (в начале строки ввода должно появиться название окружения в скобках), устанавливаем необходимые зависимости из requirements.txt:
pip install -r requirements.txt
Обратите внимание: мы не просто устанавливаем какой-то пакет. Мы устанавливаем группу пакетов, которая прописана в сгенерированном ранее requirements.txt. Пакетный менеджер pip считывает его, потому что мы указали флаг -r.
4. Следующим этапом в виртуальное окружение нужно добавить переменные, в нашем случае — API-ключ, чтобы не хранить его внутри кода бота. Ведь иначе будет вероятность, что он попадет при очередном git push в публичный репозиторий на GitHub. Поэтому лучший способ хранить токены и другие секретные данные — использовать .env-файлы.
4.1. Создаем файл .env:
nano .env
4.2. Добавляем в файл API-токен бота:
BOT_TOKEN=ВАШ_ТОКЕН
4.3. Устанавливаем библиотеку python-dotenv для загрузки токена из виртуального окружения:
pip install python-dotenv
4.4. Обновляем код бота, чтобы в качестве значения переменной TOKEN подставлялся токен из .env. Для примера предположим, что код размещен в файле bot.py:
nano /путь/к/папке_бота/bot.py
Редактируем код бота следующим образом:
import os
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv("BOT_TOKEN")
…
Проверка работы бота
1. Перед непосредственным запуском бота «на фоне», протестируем его вручную. Активируем виртуальное окружение (если еще не активировано):
Редактируем код бота следующим образом:
source venv/bin/activate
2. Запускаем бота:
python bot.py
3. Открываем Telegram и находим своего бота. Проверяем его:

Все работает!
Настройка автозапуска бота
Чтобы бот работал постоянно, настроим его запуск как сервис systemd.
1. Создаем файл сервиса:
nano /etc/systemd/system/bot.service
2. Вставляем следующее содержимое:
[Unit]
Description=Telegram Bot
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/bot
ExecStart=/root/bot/venv/bin/python3 bot.py
Restart=always
RestartSec=10s
StandardOutput=append:/var/log/bot.log
StandardError=append:/var/log/bot.log
[Install]
WantedBy=multi-user.target
- Description=Telegram Bot — краткое описание службы, которое будет отображаться в
systemctl status bot.service
. - After=network.target — указывает, что бот должен запускаться после настройки сети. Это важно, так как бот требует соединения с интернетом.
- Type=simple —
systemd
считает процесс запущенным, если он сразу выполняется без создания фонового процесса. - User=root — запускает сервис от имени пользователя
root
.
Рекомендуется запускать бота от непривилегированного пользователя. Для создания пользователя можно воспользоваться командой adduser: sudo adduser <username>. - WorkingDirectory=/root/bot — указывает рабочую директорию, где находится код бота.
- ExecStart=/root/bot/venv/bin/python3 bot — команда, которая выполняется при старте сервиса.
- Restart=always — перезапускает бота при его завершении по любой причине. Альтернативы:
no
— не перезапускать;on-failure
— перезапускать только при ошибке. - WantedBy=multi-user.target — говорит
systemd
, что этот сервис должен запускаться автоматически при загрузке системы. При этомmulti-user.target
— это стандартный уровень загрузки без графического интерфейса. - StandardOutput=append:/path/to/file.log — направляет стандартный вывод в указанный файл.
Append
же означает добавление данных в конец файла без перезаписи. - StandardError=append:/path/to/file.log — направляет стандартный вывод ошибок в тот же файл, что и обычный вывод. Если вы хотите разделить логи ошибок и обычные логи, указывайте разные файлы.
3. Сохраняем и закрываем: нажимаем Ctrl + X, затем Y и Enter.
4. Обновляем systemd и включаем сервис:
systemctl daemon-reload
systemctl enable bot
systemctl start bot
4. Обновляем systemd и включаем сервис:
systemctl status bot
Если бот работает, вы увидите зеленую надпись «active (running)»:
Логирование бота
Логирование — важный аспект при развертывании Telegram-бота, так как оно позволяет отслеживать работу приложения, выявлять ошибки и диагностировать проблемы.
Чтобы следить за процессом работы бота в реальном времени, можно использовать команду tail:
tail -f /var/log/bot.log
Эта команда будет выводить последние строки лог-файла в реальном времени. А для поиска ошибок можно использовать команду grep:
grep "ERROR" /var/log/bot.log
Эта команда отфильтрует все строки, содержащие слово «ERROR».
Также при необходимости можно настроить автоматическую очистку логов:
logrotate /var/log/bot.log
Заключение
Развертывание Telegram-бота в облаке — это удобный способ обеспечить стабильную доступность и работу. В статье мы рассмотрели процесс создания бота, настройки серверной инфраструктуры и использование systemd для автоматического старта. А что делать с этими знаниями дальше, как развивать бота и стоит ли это делать вообще — решать только вам.