Установка телеграм бота на сервер убунту
В этой статье мы рассмотрим пример использования Telegram бота на сервере с Linux CentOS, покажем, как настроить простые уведомления в чат-бот для мониторинга вашего сервера, а также несколько управляющих команд.
В эпоху мобильных гаджетов, стало актуально использование различных мессенджеров не только для общения с реальными людьми, но и использование различных ботов. Например, в Telegram существует широкий функционал для бота, который можно использовать в различных целях — выдать информацию о заказе клиенту, информация по посылке у почтового оператора и, например, мониторинг собственного сервера.
Создание чат-бота в Telegram
Для создания чат-бота в Telegram используется бот @BotFather. Чтобы создать своего бота, нужно найти @BotFather у себя в Telegram и перейти в чат с ним:
Нажмите START. Чтобы создать нового бота, выберете в меню /newbot, введите имя бота в формате “имя_bot». После создания бота, вы получите API токен бота, который нужен будет в дальнейшей настройке.
На скриншоте выделен ваш ID.
Итак, мы создали бота в Telegram и получили авторизационные данные.
Отправка в чат Telegram уведомлений с сервера
С помощью ранее созданного бота и полученных ID можно отсылать с сервера уведомления в Telegram чат, и таким образом получать какие-то интересные нам данные или алерты.
Для чего можно использовать такие Telegram уведомления? Например, при создании резервной копии вы можете отправлять уведомления о ее создании или же отправлять ссылку на скачивание копии в чат с ботом. Вы можете отправлять себе в Telegram уведомления с информацией о сбоях в системе. Можно добавить в крон выполнение каких-либо проверок с последующей отправкой в Telegram.
Еще пример использования подобных уведомлений:
Добавьте этот код в /etc/profile и будете получать уведомления в Telegram при каждом входе пользователей на сервер:
Хочу напомнить, что во всех командах, нужно указывать именно своей token(API) и ID чата.
Управление Linux сервером в чат-боте Telegram
Есть набор скриптов, которые позволяет управлять сервером Linux из Telegram чата, отправляя различные команды в чат с ботом. Для этого нужно установить Python, ряд инструментов и загрузить на сервер скрипты.
Создайте симлинк для Python:
И установите ПО для самого бота:
Теперь скачайте и распакуйте к себе на сервер в каталог root/admin три файла из архива telegram_bot.zip:
Рассмотрим файл config.py. В нем нам нужно указать token(API) и ID вашего чата с ботом, а также путь до директорий с бэкапами и директории, размер которой вы будете в дальнейшем проверять:
Файл bot.sh не требует настройки, в нем лишь указываем путь до bot.py:
И самый основной файл, который собственно и позволит нам управлять сервером, это bot.py. В нем описаны функции, которые будут доступны в чате с ботом и собственно туда, мы можем добавлять свой собственный функционал. Например, в первом блоке описываются доступные команды бота в чате:
Тут описываются все функции, которые будут доступны, после ввода команды /help.
Ниже описывается сама функция, например,
И эту функцию, нужно описать как команду:
То есть как видим, это выполнение стандартной функции проверки сетевых настроек ifconfig.
При знакомстве с ботом я попытался добавить собственную команду, например для проверки Apache:
Но только через настройку данного файла это не сработало. Как я понял, здесь можно выполнить только команду описанную одним словом или символами. Я решил проблему создав файл apache_status.sh с содержимым:
И создал на него симлинк:
Теперь при вызове команды apachestatus, у меня выводит статус веб-сервера apache:
В файле bot.py я заполнил все три блока, согласно других функций. Чтобы bot заработал, нужно запустить файл bot.sh. Для удобства, создадим отдельный сервис для Telegram бота. Создаем нужный файл и выставляем права:
После чего заходим в файл сервиса:
И добавляем содержимое:
Теперь, если в чате с вашим ботом ввести /help, вы получите список доступных команд.
Например, в данный момент у меня на сервере остановлен веб-сервер Apache:
Запустим его на сервере и проверим статус через Telegram:
Еще несколько примеров выполнения команд:
Таким образом, вы можете выполнять мониторинг своего Linux сервера или даже частичное администрирование через Telegram, что поможет сильно сократить время на выполнение типовых действий.
Так же хотел бы заметить, что авторизация сервера с ботом происходит именно по ID и token(API) (любой другой человек, не зная ваших данных, подключиться не сможет).
Тогда он будет работать круглые сутки, а вы — отдыхать.
Вот что мы сделаем, чтобы бот работал независимо от всего:
- Выберем сервер.
- Подготовим программу для работы на нём.
- Зальём программу на сервер.
- Настроим сервер, чтобы он исполнял программу.
Выбираем сервер
Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.
Готовим программу и отправляем её на сервер
Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.
Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:
Этих данных достаточно, чтобы управлять сервером по SSH.
Вставляем их в Putty и подключаемся. Помните, что для безопасности во время ввода пароля курсор стоит на месте, чтобы никто не смог выяснить, сколько символов вы набираете. Когда подключились, вводим команду python3.3 -V — она покажет, есть ли на сервере поддержка этой версии Python:
Сервер говорит, что у него установлена версия Python 3.3.5 — нам этого хватит. Теперь добавляем в самое начало нашего файла с программой такую строчку:
В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .py и отправляем его на сервер в папку cgi-bin (то, что лежит в этой папке, никто не увидит):
Настраиваем сервер
Теперь научим сервер понимать, как работать с нашей программой. Для этого в корне сайта находим файл .htaccess и добавляем в него такую строчку:
AddHandler cgi-script .py
Если у вас такого файла нет — создайте его и не забудьте про точку в самом начале названия.
Последнее, что осталось сделать, — настроить права доступа у файла с программой. Находим её среди файлов хостинга и выставляем права 755 или rwxrwxr-x:
Теперь с помощью Putty снова подключаемся к серверу и настраиваем рабочее окружение. Это как будто виртуальная песочница, где мы сможем ставить нужные модули для Python, чтобы не мешать остальным пользователям сервера.
Всё, что мы будем делать дальше, относится к хостингу SpaceWeb. Если у вас другой хостинг, то, возможно, часть команд вам не пригодится и Python будет работать напрямую. У нас так не работает, поэтому делаем виртуальное окружение.В SSH-терминале пишем по очереди такие команды (вместо .thecode можно написать название каталога, которое вам по душе):
virtualenv .thecode source .thecode/bin/activate
Эти две команды создадут виртуальное пространство для запуска Python-файлов.
Теперь установим Python-модуль для работы с Телеграмом:
pip install pytelegrambotapi
Когда установка закончится, пишем такую команду:
nohup python3 /home/t/thecode/osebe/public_html/cgi-bin/telegoroskop.py
/home/t/thecode/osebe/ — это наш путь к папке cgi-bin, а у вас он будет другим. Поменяйте путь на свой и запускайте.
Чтобы программа продолжала работать после того, как мы закроем SSH-клиент, в самом начале пишем команду nohup .
Результат проекта — бот @TheCode_Baboolya_bot.
Что дальше
Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:
Выбираем хостинг для телеграм-бота
Для начала быстро разберемся с юридической составляющей. В России власти заблокировали лишь серверы и сам сайт Телеграма (UPD: уже разблокировали, поражение в этой войне было неминуемо). Использование мессенджера фактически не запрещено. Но не любой российский сервер будет исправно работать с ботами для этого мессенджера. Так что перед арендой лучше уточнить у техподдержки, подойдет ли их хостинг для телеграм-бота.
У хостинга для чат-бота должна быть поддержка нескольких языков программирования. Например, хостинг для телеграм-бота на Python должен поддерживать этот язык. Аналогично, написанный на NodeJS бот должен быть развернут на сервере, в который можно подгрузить язык NodeJS.
Если хостинг удовлетворяет этим требованиям, он подойдет для работы простого телеграм-бота, который выдает заготовленный ответ на слова-триггеры. Если же в работе ассистент использует машинное обучение, вам стоит обратить внимание на наличие графического ускорения — без него построение нейросети займет очень много времени. Впрочем, если ваш бот не будет обучаться во время общения с реальными собеседниками, то можно арендовать хостинг с графическим ускорением только на время разработки, а потом развернуть обученную нейросеть на обычном хостинге для Telegram-бота, без графики.
Обратите внимание на наличие круглосуточной технической поддержки. Если у хостинга таковой нет, лучше отказаться от него в пользу более клиентоориентированной компании, пусть даже у нее будут более высокие расценки. Оптимальным будет хостинг с бесплатной помощью в администрировании сервера.
Для развертывания бота для Telegram лучше всего подходит VDS/VPS. Он не требует наличия домена в обязательном порядке, и к нему можно будет обратиться по выделенному IP-адресу, что удобно при развертывании бота. К тому же такие серверы лучше поддерживают увеличение масштабов проекта, так что при увеличении потока посетителей вам не придется переходить на другой сервер — достаточно будет просто сменить тариф или его настройки.
Выбираем тариф
О тарифах хостингов для бота Telegram стоит поговорить отдельно. Есть целый класс бесплатных хостингов — сюда входит, например, Heroku. Они могут оказаться полезными при тестировании бота — расположите свой чат-бот на Heroku и проверьте работоспособность всех функций, прежде чем арендовать хостинг и выкладывать свое творение. Но учтите, что работоспособность на этом хостинге будет непостоянной — обычно чат-боты работают по 30 секунд, а затем отключаются на неопределенное время. Так что для полноценного развертывания лучше выбрать другой хостинг, например Hostman.
Выбор тарифа обычно обуславливается потоком клиентов, но не сложностью бота. Для развертывания как простенького, так и нейросетевого бота вам не потребуется много дискового пространства. Нет нужды и в больших вычислительных мощностях — большинству ботов более чем достаточно 512 МБ оперативной памяти. Поэтому можно выбирать самые недорогие тарифы.
Ключевое требование к хостингу — стабильность подключения, поэтому от shared-хостингов для телеграм-бота лучше сразу отказаться. А вот VPS/VDS сможет обеспечить надежное подключение. Предпочтительная ОС для сервера — Ubuntu, поскольку большинство модулей для языков программирования пишутся именно под нее. Тарифы на такие виртуальные серверы начинаются от 50 рублей в месяц.
Настраиваем сервер для Telegram-бота
Рассмотрим настройку сервера на примере размещения бота, написанного на Python, который будет автоматически присылать ответы на различные команды.
После аренды VPS нам нужно подключиться к нему по протоколу SSH через специальный клиент (например, Termius), используя данные из личного кабинета на хостинге для телеграм-бота. Вам потребуются Hostname, Login, Password, Port. Вводим их в поля нового подключения. Вот как это будет выглядеть в Termius:
Сохраняем подключение, возвращаемся на главный экран программы (здесь появляется наше новое подключение) и нажимаем на название сервера, которое мы вводили до этого:
Готово, мы попали в консоль сервера:
Отсюда мы сможем управлять сервером, подгружать нужные нам модули и библиотеки. Этим и займемся. Чтобы бот работал, серверу потребуется модуль языка Python. Мы рассматриваем бота, написанного на третьей версии языка, поэтому нам нужно установить python3. Для этого введем в консоль сервера следующие команды:
Не забудем и про библиотеки. На «Питоне» ботов для Telegram обычно пишут с помощью библиотеки TelegramBotAPI. Для ее установки введем команду:
Теперь нам нужно установить удобный менеджер процессов PM2 и язык программирования NodeJS с менеджером пакетов npm для его работы:
Всем мир! Сегодня я вам на практике покажу, как с 0 написать несложного Telegram бота.
Для начала придумаем тестовое задание.
У меня есть сервер Counter Strike 1.6 на котором я временами играю с друзьями. Заходить в игру, чтобы проверить наличие там игроков, лень. Напишем бота, который будет доставать для нас информацию о сервере и список игроков со счетом и выводить в удобном формате.
Для того, чтобы проследить за действиями, достаточно базовых знаний linux, web и python.
Постановка задачи
Для работы телеграм бот, который крутится на нашей машине, должен получать обновления от сервера Telegram. Это можно сделать двумя методами:
- Long polling. Метод, когда ваша программа в определенный промежуток времени опрашивает сервер об обновлениях.
- Web hook. Тут вы поднимаете веб сервер, на который телеграм бот шлет обновления, если они есть.
Второй метод популярнее и считается надежнее, поэтому остановимся на нем.
Писать будем на Python с использованием Flask. В роли веб сервера используем nginx. В работе с сервером CS нам поможет чудесный модуль python-valve
Выбор сервера для хостинга нашего бота роли не играет, я буду работать с Digital Ocean.
Первым делом нам надо зарегистрировать своего бота у @BotFather. Он отвечает за управление информацией о боте и получение и обновление токенов для работы с ними. От него мы получим такую строку
Это ключ по которому сервера телеграм будут знать, что вы владельцы этого бота. Если вы его потеряете, вы можете получить новый у того же @BotFather.
Первый шаг сделали. Мы уже сейчас можем найти нашего бота в ТГ и писать ему, но это пока только оболочка и отвечать вам не будет. Ему нужен код/призрак.
Аренда выделенного сервера на DO
Как и любой сайт и серверсайд программа, наш код должен быть запущен на машине с белым ip и выходом в интернет. Для такого случая мы арендуем машину у Ditial Ocean
Показывать пошаговую регистрацию на сайте я не буду, покажу только как получить и настроить сам сервер. Кстати, если вы студент, можете попробовать получить 50$ на хостинг бесплатно.
Нажимаем на большую копку Create droplet.
Выбираем желаемую ОС. Я буду работать с Ubuntu.
Больше нам ничего менять тут не надо, нажимаем Create.
В течении пары минут мы получим ip адрес и root пароль от сервера на нашу почту. Все, машина работает. Можем коннектиться к ней по ssh.
Вводим пароль и получаем полный контроль над сервером. Возможно вас попросят сменить пароль, поставьте посложнее.
Первым делом нам сразу надо создать нового пользователя и входить на сервер из под него, чтобы не стать легкой мишенью для хакеров.
Теперь необходимо перезайти на сервер под новым пользователем
Установка нужных сервисов
Первая команда обновит локальные репозитории, чтобы не было проблем с поиском нужных пакетов. Вторая поставит PIP (систему управления пакетами python), веб сервер nginx и dev пакет python. Третья команда запустит веб сервер.
Если вы сейчас введете ip адрес вашего сервера в браузере любого компьютера подключенного к сети интернет, вы получите страницу приветствия nginx.
Выключим на пока наш веб сервер и займемся python.
Python и virtualenv
По хорошему, нам надо создавать окружения для каждого из наших python проектов, чтобы их зависимости не начали конфликтовать между собой. Для этого воспользуемся virtualenv.
Создаем папку проекта в домашней и стартуем в ней новое изолированное окружение.
Теперь у нас есть локальная копия python, pip и все python модули установленные внутри останутся в этом окружении.
Устанавливем Flask и UWSGI
Бота будем писать на микрофреймворке flask, который позволит нам сократит время на разработку. Для перенаправления запросов с nginx на flask будем пользоваться uwsgi.
Для начала запустим простую страничку в Flask и попробуем достучаться к ней через nginx.
В папке с проектом создадим наш главный файл в котором будет хранится код.
Так же напишем скрипт, который будет запускать наше Flask приложение.
Оба файла находятся в папке с проектом.
Запускам uwsgi командой:
Если все прошло успешно, вы, перейдя в своем браузере по адресу вашего сервера и порт 5000 должны увидеть It’s working.
Теперь напишем конфиг файл, чтобы Flask приложение поднималось само, даже если сервер перезагрузится. Сначала выйдем из нашего окружения.
Потом создадим .ini конфиг для uwsgi в папке с ботом по пути
/CSBot/csbot.ini . Конфиг задает количество процессов, имя сокета, права и файл для логирования.
Так же создадим папку для логов и сделаем ее владельцем себя.
Создадим так же systemd unit файл, для атвоматизации запуска нашего бота.
Теперь после ввода команды, мы должны увидеть сокет файл в нашей папке проекта.
Мы так же можем проверить работу с помощью просмотра логов в папке и статуса сервиса.
Настройка nginx
Дальше нам необходимо настроить веб сервер, чтобы свои запросы он направлял в сокет uwsgi.
Теперь нам надо сделать ссылку на конфиг, в папке sites-enabled
Мы можем проверить наши конфиг файлы с помощью nginx.
Если он сказал, что все ОК, перезапускаем веб сервер.
Теперь по ip адресу нашего сервера в браузере вы должны получить выдачу Flask приложения.
Сначала генерируем наш сертификат и ключ с помощью openssl.
На последней команде openssl задаст вам несколько вопросов. Можно игнорировать все, кроме Common Name (FQDN). В нем следует указать ip вашего сервера.
Следующей командой мы получим сертификат из сгененрированного выше приватного ключа.
Так-с, серты сгенерировали. Идем к настройке nginx.
Открываем конфиги нашего сайта в nginx:
Указвыаем новый порт взамен 80. Указвыаем ключи и сертификаты и протоколы, которые мы можем хендлить.
Проверяем конфиги и перезапускаем веб сервер
Пишем код для бота
Дошли до самого интересного.
Сначала установим модуль для работы с Telegram - python-telegram-bot
Теперь напишем код бота (
В начале мы импортируем нужные модули flask, request, telegram. Дальше мы создаем наше приложение, включаем режим отладки (надо присвоить False, когда закончим разработку).
После мы задаем наш token полученный при создании бота в самом начале, адрес сервера и создаем бота.
У нас есть два главных метода:
*set_webhook - отвечает за создание вебхука с сервером Telegram и вызывается один раз.
Давайте чуть усложним его и добавим кнопку “Обновить”.
Немного функционала
Напишем функцию, которая будет опрашивать наш CS сервер и выдавать информацию по нему.
Для начала установим наш модуль для работы с valve серверами. Не забудьте перейти в окружение перед установкой.
Теперь в коде определим новую функцию, которая будет генерить строку ответ и возвращать ее нам, для отправки пользователю.
Код сам по себе не сложен, но давайте разберем. Сначала задаем адрес и порт сервера и создаем объект.
Читайте также:
- К электронным материалам какой библиотеки дает доступ приложение bibli
- Сообщение не поддерживается вашей версией telegram что это
- Как вывести деньги с paypal на банковскую карту тинькофф с телефона через приложение
- Какое приложение надо скачать для фитнес браслета м3 на андроид
- Почему яндекс показывает другой город на смартфоне