Лайфхаки

Маленькие, полезные хитрости

Как настроить и запустить телеграм бота на виртуальном сервере: шаг за шагом инструкция

21.03.2024 в 06:12

Как настроить и запустить телеграм бота на виртуальном сервере: шаг за шагом инструкция

Копирование кода:

Для начала научимся переносить код на сервер. Я полагаю что у вас уже есть репозитарий на GitHub, в котором вы работаете.

Поэтому генерируем ключи на сервере:

ssh-keygen

Оставляем все по умолчанию. Потом копируем ключ:

cat /root/.ssh/id_rsa.pub

И добавляем его в список разрешенных ключей в своем профиле GitHub:

Settings -> SSH and GPG Keys -> New SSH key

Не забудем скопировать ссылку на клонирование репозитория:

Your Repositories -> -> Code -> Local -> SSH

Идем в консоли сервера в каталог, где будет жить бот и клонируем код проекта:

cd /home/programms/bots/ git clone git@github.com:/world_for_life_bot.git

Теперь в папке, где вы находитесь появилась папка с названием репозитория в которой есть все файлы, из вашего репозитория GitHub

При помощи файлового менеджера переносим в основной каталог проекта дополнительные файлы, которые вы не хотите шарить на GitHub. У меня это только 1 файл, в котором я храню токен от бота.

Подготовка виртуального окружения

Я запускаю каждого бота в своем виртуальном окружении, чтобы обновление компонент в одном проекте не влияло на другой.

Переходим в папку с проектом на сервере, создаем виртуальное окружение и временно активируем его для настройки и тестирования

cd /home/programms/bots/world_for_life_bot/ python3.10 -m venv venv source activate venv/bin/activate

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

Устанавливаем зависимости, которые вы ранее сохранили в файл, к примеру requirements.txt командой pip freeze > requirements.txt

pip install -r requirements.txt

Тестовый запуск бота

Все! Ваш бот готов к запуску. Не выходя из виртуального окружения проведите стартовый запуск бота (в примере бот запускается скриптом start.py )

python start.py

Если вы все сделали правильно, ваш бот будет доступен онлайн в телеграме

Запускаем бота как сервис

Сидеть и смотреть что ваш сервис работает, занятие неблагодарное. Запуск при старте системы и перезапуск, если что-то пошло не так, лучше доверить самой системе. Я привлекаю для этой работы подсистему инициализации и управления службами в Linux systemd . В корне проекта я добавляю файл world_for_life.service , который в последствии всегда доступен на сервере.

Для начала научимся переносить код на сервер. Я полагаю, что у вас уже есть репозиторий на GitHub, в котором вы работаете.

Генерация ключей на сервере

Оставляем все по умолчанию. Потом копируем ключ:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

И добавляем его в список разрешенных ключей в вашем профиле GitHub:

Settings > SSH and GPG keys > New SSH key

Не забудем скопировать ссылку на клонирование репозитория:

https://github.com/your_username/your_repository.git

Клонирование репозитория

Идем в консоли сервера в каталог, где будет жить бот и клонируем код проекта:

cd /path/to/project

Теперь в папке, где вы находитесь, появилась папка с названием репозитория, в которой есть все файлы, из вашего репозитория GitHub:

your_repository/

Перенос дополнительных файлов

При помощи файлового менеджера переносим в основной каталог проекта дополнительные файлы, которые вы не хотите шарить на GitHub. У меня это только 1 файл, в котором я храню токен от бота:

mv /path/to/extra/file /path/to/project

Запуск виртуального окружения

Я запускаю каждого бота в своем виртуальном окружении, чтобы обновление компонентов в одном проекте не влияло на другой.

Переходим в папку с проектом на сервере, создаем виртуальное окружение и временно активируем его для настройки и тестирования:

virtualenv -p python3.8 myenv

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

source myenv/bin/activate

Запуск бота

Все! Ваш бот готов к запуску. Не выходя из виртуального окружения проведите стартовый запуск бота (в примере бот запускается скриптом start.py):

python start.py

Связанные вопросы и ответы:

1. Как запустить телеграмм бота на виртуальном сервере

Для запуска телеграм бота на виртуальном сервере, вам необходимо создать аккаунт у провайдера облачных услуг (например, Google Cloud, Amazon AWS). Затем следует установить необходимое программное обеспечение (Python, библиотека python-telegram-bot). Далее нужно создать бота через BotFather в Telegram и получить API ключ. После этого написать скрипт для бота и загрузить его на виртуальный сервер. Наконец, запустить скрипт на сервере и ваш телеграм бот будет работать.

2. Какие шаги нужно предпринять для запуска телеграмм бота на виртуальном сервере

Для начала необходимо выбрать провайдера облачных услуг, зарегистрироваться у них и создать экземпляр виртуального сервера. Затем установить необходимые пакеты и зависимости (Python, python-telegram-bot). После этого создать бота через BotFather и получить токен API. Написать скрипт для бота, загрузить его на сервер и запустить. После выполнения этих шагов ваш бот будет готов к использованию.

3. Какие программные инструменты необходимы для запуска телеграмм бота на виртуальном сервере

Для запуска телеграм бота на виртуальном сервере необходимо установить Python, а также библиотеку python-telegram-bot для работы с API Telegram. Также пригодится любой текстовый редактор для написания скрипта бота. Для удобства можно использовать дополнительные инструменты, такие как GitHub для хранения кода и управления им.

4. Как создать бота в Telegram для последующего запуска на виртуальном сервере

Для создания бота в Telegram необходимо обратиться к BotFather - официальному боту Telegram для создания других ботов. После запуска BotFather нужно следовать инструкциям по созданию нового бота, включая выбор имени и получение API токена. Сохраните этот токен, так как он понадобится для настройки бота на виртуальном сервере. После завершения процесса создания бота можно приступить к написанию скрипта и его загрузке на сервер.

5. Как настроить и запустить скрипт телеграмм бота на виртуальном сервере

Для настройки и запуска скрипта телеграм бота на виртуальном сервере, необходимо подключиться к серверу по SSH. Затем загрузить скрипт на сервер, установить все необходимые зависимости (Python, python-telegram-bot). После этого запустить скрипт с помощью интерпретатора Python. После успешного запуска скрипта ваш телеграм бот будет готов к использованию. При необходимости можно настроить автозапуск скрипта при перезагрузке сервера.

6. Как обеспечить безопасность при запуске телеграмм бота на виртуальном сервере

Для обеспечения безопасности при запуске телеграмм бота на виртуальном сервере следует принять несколько мер предосторожности. В первую очередь рекомендуется использовать доступ по SSH с помощью ключей вместо пароля. Также важно следить за обновлениями системы и программного обеспечения на сервере. Резервное копирование кода бота и данных также обеспечит дополнительный уровень безопасности. Необходимо также ограничить доступ к серверу только необходимым пользователям и использовать брандмауэр для фильтрации сетевого трафика.

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

Перед тем, как начать оценивать провайдеров и искать самые выгодные условия для аренды сервера под телеграм-бота, необходимо определить, какой в целом тип хостинга вам понадобится. Поскольку виртуальные ассистенты в этом мессенджере обычно не требуют большого количества ресурсов, их запускают либо на общем хостинге (shared hosting), либо на VPS/VDS (Virtual Private/Dedicated Servers) — виртуальных выделенных серверах. Это два самых распространенных вида хостинга чат-ботов. Поговорим кратко о каждом.

Как настроить и запустить телеграм бота на виртуальном сервере: шаг за шагом инструкция Изображение от pch.vector на Freepik.

Shared server предполагает, что бот будет работать на одном host-устройстве с проектами других клиентов. Мощность хоста делится поровну между всеми, вы управляете только своей учетной записью и файлами, без доступа к настройкам. Поэтому важно найти тарифный план, который поддерживает Telegram API и язык программирования, использованный для написания вашего бот (например, Python). В противном случае вы просто не сможете установить его на хостинг.

Использование общего сервера подходит для простых «автоответчиков», действующих по заранее заданному сценарию. Если же вы планируете размещать чат-бота, основанного на нейронной сети, в качестве hosted-площадки лучше использовать VPS. То же самое в случае ожидания высокой нагрузки на запускаемого бота: при большом потоке обращений стандартный shared может не справиться. На виртуальном частном сервере у вас будет изолированное окружение, выделенные ресурсы, возможность устанавливать и настраивать любое ПО.

Кроме того, существуют бесплатные облачные сервисы, где вы также можете разместить своего чат-бота. С ограничениями и рисками, но для примитивных помощников с предустановленными ответами подходит.

Запустите свой VPS-сервер в «Евробайт»

Арендовать дешевый производительный виртуальный сервер можно на нашем сайте: в разделе « VPS/VDS » вы можете найти hosts с предустановленными операционными системами Linux, а также размещенные в России (Москва) или Нидерландах (Амстердам). ВДС от «Евробайта» созданы по технологии KVM, так что у вас будет доступ к ядру ОС и любым настройкам: установка всех необходимых для телеграм-бота зависимостей не вызовет проблем.

За счет изоляции виртуальной машины VDS-хостинг обеспечивает более стабильное подключение и надежную работу чат-бота даже при больших объемах трафика. Заказать сервер можно в личном кабинете или сразу на странице выбранной услуги. Если при покупке или использовании VPS у вас возникнут вопросы, вы всегда можете обратиться к нашим специалистам из службы поддержки: они доступны круглосуточно и отвечают в течение 10 минут.

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере

Перед установкой WAMP-сервера для его корректной работы, нужно установить библиотеки Visual C++, проще всего это сделать при помощи неофициального авто установщика: Visual C++ Runtime Installer (All-In-One)  скачайте и запустите его, он все установит.

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Так же если пользуетесь скайпом, закройте его.

Установка wampserver 3

Запускаем установщик и следуем его инструкциям.

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

У меня почему-то был выбор только между английским и французским — а так в нем есть и русский — потом на него переключим в настройках).

Принимаем условия и продолжаем установку.

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

На следующем этапе программа предложит ознакомиться с информацией по установке, Жмем Next.

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

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Обязательно нужно устанавливать в корень диска (не обязательно в c, можно к примеру в d — если диск разбит на 2 или стоит 2 диска).

Потом  Next и Next. После чего нужно выбрать устанавливаемые модуля:

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Я все оставил по умолчанию.

Далее в процессе установки может появиться вопрос об использовании Internet Explorer в качестве браузера WAMP-сервера. Если желаете выбрать другой браузер, нажимаем кнопку “Да”. В этом случае будет необходимо указать exe-файл нового браузера.

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Я проигнорировал, нажав нет.

Дальше все время далее и финиш.

Настройка wampserver 3

После установки, у вас на рабочем столе появился ярлык wampserver, запустите его и дождитесь пока значок в трее позеленеет.

Далее можете переключить язык на русский.

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Как установить и настроить необходимые программы и библиотеки на виртуальном сервере. WampServer установка и настройка

Как создать телеграм бота и получить токен доступа

Диалоговый конструктор чат-ботов со стандартным набором функций, шаблонами диалогов для нескольких видов бизнеса (кафе, интернет-магазин, доставка пиццы, маникюрный салон, фитнес-тренер) и конструктором для создания собственного кастомного диалога. У сервиса приятный интуитивно понятный интерфейс и не сложное меню. Есть удобные бизнес-фишки:

  • простая CRM
  • возможность настройки онлайн-платежей
  • статистика активности и история сообщений бота с возможностью выгрузки в XLSX, JSON, CSV
  • возможность отправки сообщений на электронную почту через бот
  • метрики для сегментации аудитории
  • организация массовой рассылки
  • кроссплатформенность — возможность подключить одного бота одновременно для Telegram, VK и Viber

Для запуска бота нужно сделать минимум действий: вставить в настройках токен бота, создать новый диалог, подключить диалог к боту и готово. Когда вам придет новый заказ из бота, площадка пришлет на e-mail сообщение, а вся необходимая информация отобразится в заказах.

Стоимость: для простеньких задач, вроде создания расписания или учебного бота есть бесплатный тариф «Фан-бот». Если нужен полный функционал с CRM, рассылками, статистикой и поддержкой, нужен тариф «Бизнес-бот» за 490 ₽/месяц.

Для чего подойдет: для бизнеса и создания средних по глубине вложенности ботов.

Как настроить обработку сообщений и команд бота на виртуальном сервере

В этом туториале вы запустите бота в продакшн-режиме. Если в боте возникнет страшная ошибка,systemdзапустит его заново. И даже если весь сервер выключат и включат заново, тоsystemdсам снова запустит вашего бота.

Прежде чем приступить

Этот туториал требует некоторых знаний:

  • Как запускать команды из консоли.
  • Как подключиться к серверу по SSH.

1. Загрузите бота на сервер

В качестве примера выступит эхобот. Это бот, который отвечает вам тем же, что вы ему написали. Зайдите на сервер с помощью ssh, перейдите в папку/opt

Куда класть код — это старый и холиварный вопрос. Столько времени прошло, сколько форумов исписано, а одного простого ответа так и нет…

Вам точно не стоит класть код в домашний каталог суперпользователя/root/. Туда вы обычно попадаете, заходя на сервер по ssh. Если положите код в/root, то не избежите приключений с настройкой прав пользователей. Операционная система оберегает домашний каталог рута от посягательств других пользователей и запрещает им чтение файлов оттуда. Это станет проблемой при запуске Nginx, Gunicorn и других программ, часто работающих под другим пользователем.

Я советую класть код в папку/opt/{project}/. Это место специально выделено в ОС для программ, что собираются из исходников и живут обособлено от каталоговbin,libи прочих.

Затем проверьте, что файлы скачались командойls:

2. Запустите бота

Запустите бота по инструкциям из README. В том числе придётся создать токен от бота.

Проверьте, заработал ли ваш бот:

Бот работает! Но всё ли так гладко, как кажется?..

Теперь выйдите из терминала. Просто закройте окошко терминала или введитеexitи нажмитеEnter. Бот перестал работать

Всё потому что вы закрыли ssh-соединение, и теперь сервер остановил работу бота.

На каждое соединение сервер тратит свои мощности. Мощности у него ограниченные. Поэтому сервер всегда стремится сэкономить их, закрывая неработающие соединения. А оставлять открытые соединения небезопасно.

Нужно запустить бота в фоновом режиме работы. Тогда он продолжит работать, даже если вы выйдете с сервера.

3. Запустите бота в фоне

Программы, которые работают в фоновом режиме, называются демонами или программами в режиме демона .

Утилита systemd как раз умеет демонизировать программы, то есть запускать их в фоне. Но сначала systemd нужно настроить: сказать ему что и как демонизировать. Это делается в специальных файлах с инструкциями для systemd. Такие файлы называют юнитами .

Юниты хранятся в папке/etc/systemd/system. Перейдите в неё и создайте новый файл с названиемechobot-example.service. Это и будет ваш юнит

ExecStartюнит ждёт команду, которую systemd должен запустить.

Теперь запустите этот юнит:

# systemctl start echobot-example

Получилась ошибка:

Failed to start echobot-example.service: Unit echobot-example.service has a bad unit file setting. See system logs and 'systemctl status echobot-example.service' for details.

Авторский перевод: Не удалось запустить файл echobot-example.service: в нём неверные настройки. Запустите командуsystemctl status echobot-example.service, чтобы узнать что случилось.

Давайте узнаем! Запустите командуsystemctl status echobot-example:

Юнит явно пишет всё о себе:Loaded: bad-setting (Reason: Unit echobot-example.service has a bad unit file setting.). Тут снова написано о той же ошибке, что была при запуске юнита.

СтрокаActive: inactive (dead)значит что юнит неактивен/“мёртв”. То есть его либо не запускали, либо запустили, но он поломался. Чуть ниже виден трейсбек поломки:

/etc/systemd/system/echobot-example.service:2: Executable "python" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Значит, что systemd не смог найтиpythonв папке/usr/bin/.

Действительно, в этой папке есть толькоpython3иpython3.8.

Как защитить свой телеграм бот от несанкционированного доступа на виртуальном сервере

Есть бот модератор, который состоит в большом количестве групп и модерирует их на наличие запрещенных слов, раньше все работало хорошо, количество запросов не превышало 30, но сейчас это около 3000 запрсоов в секунду и один сервер на котором раньше все стояло (стек nginx + php-fpm + mysql + redis, а так же админ панель) попросту не справляется, поэтому появились такие вопросы:
1) Mysql сильно нагружает систему. Из-за частых операций с базой (пользоватлеь сменил имя, оставил какое-то сообщение, изменил сообщение и т.д необходимо хранить, поэтому чуть ли не каждый запрос на вебхук - это минимум один запрос к базе) может лечь php скрипт, который является вебхуком, из-за чего телеграм отправляет ещё больше вебхуков т.к не получил ответа от предыдущих, потому что они не получили ответа от базы. Данные необходимо обновлять в реалтайме, поэтому возник вопрос как это лучше сделать? Перенести на другой сервер базу? Или это не поможет ситуации и все станет ещё хуже?
2) Одна точка доступа так же является узким горлышком в системе. На неё подвязаны все боты (для удобства админы групп могут создавать личных ботов и добавлять в конфы), была идея передавать все запросы на rabbitmq, которые бы разбирали воркеры, но как я понимаю скрипт должен быть запущен демоном и сам запрашивать с очереди запрос? Можно ли это реализовать так, чтобы на стороне куда идет вебхук происходила его верификация, если все ок и этот бот закреплен за каким-либо администратором - передавать вебхук на одного из воркеров?