Как захостить бота для Телеграмм

Если вы заинтересованы в размещении telegram бота на нашем сервере, то первое с чем следует определиться, это с нужными характеристиками машины. Обычный бот, который пересылает запросы пользователей, отвечает заготовленным текстом или ретранслирует данные с внешних источников – это очень простая программа, и если она не обслуживает одновременно сотни пользователей, то будет достаточно самой дешёвой конфигурации. Если же бот активно собирает информацию из внешних источников, производит её трансформацию, что-то обрабатывает алгоритмами или к нему одномоментно будут обращаться тысячи пользователей, то в таком случае необходим индивидуальный подход. После запуска бота можно оценить реальную нагрузку и поменять конфигурацию на более или менее мощную.

Итак, предположим у вас есть один или несколько простых ботов, помимо требуемой мощности важно на каком языке и для какой платформы написан бот. Так как для всех языков невозможно предусмотреть единую инструкцию, будет рассмотрен наиболее распространённый вариант с ботом, написанным на Python.

Пишем Telegram бота на Python + Загружаем Telegram бота на сервер(хостинг)

В разделе заказа сервера выбираем:

  • Московский дата-центр
  • Минимальные характеристики CPU, RAM, диск – HDD
  • Шаблон сервера – “Установить чистую ОС”
  • Операционную систему Debian 10 (если бот кроссплатформенный, а не заточен под конкретную ОС)

Или просто воспользуйтесь этой ссылкой для заказа идентичной конфигурации.

Начинаем настройку

После завершения развёртывания образа на вашем сервере, необходимо произвести минимальную настройку безопасности системы, поскольку каждый сервер в интернете становится целью автоматических сканеров хакеров.

В списке “Мои серверы” на нашем портале необходимо найти пароль администратора сервера. Этот пароль постоянно лучше нигде не хранить, записать его можно временно на период проведения настроек, а потом удалить. Он больше не пригодится, но в случае необходимости его всегда можно посмотреть на портале.

Для настройки вашего сервера необходима программа удалённого управления (терминал), если у вас нет такого ПО, то можно установить широко известный терминал Putty.

Запускаем терминал и в настройках для подключения вводим IP-адрес вашего сервера, который указан в информации о сервере на портале. Порт подключения менять не надо (22, стандартный для SSH). Нажимаем подключиться, “Open”. Если появится текст, предлагающий ввести данные для входа, то всё было указано правильно.

Вводим имя администратора root, нажимаем ENTER и вводим пароль администратора, ENTER. При вводе пароля не будет отображаться никаких символов, так должно быть. Для вставки пароля из буфера обмена нужно нажать правой клавишей мыши в любом месте окна терминала.

Создал бота телеграм за 2 минуты и можно принимать оплату через бота

После правильного ввода данных появится приглашение системы.

Добавляем учетную запись администратора

Золотым правилом обеспечения безопасности сервера является невозможность использования аккаунта root из интернета. Мы добавим дополнительного администратора в систему и отключим удалённый вход для root. Для управления сервером должен использоваться только второй администратор, это исключит возможность случайного раскрытия пароля root третьим лицам и сделает бессмысленными попытки подбора этого пароля сканерами хакеров. В случае потери пароля нового администратора вы всегда сможете использовать аварийный доступ к серверу с нашего портала, так что запрещение удалённого входа для root не может привести к ситуации потери доступа к вашему серверу.

Обновляем компоненты системы.

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

apt install sudo -y

Устанавливаем утилиту скачивания файлов, которая потребуется в процессе настройки системы.

apt install curl -y

Добавляем нового пользователя с любым именем.

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

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

usermod -aG sudo johnwho

Переключаемся на нового пользователя.

На запрос пароля вводим только что созданный пароль для нового администратора johnwho.

Должно появиться приглашение:

Проверяем наличие административных прав

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

Далее необходимо зайти на ваш сервер от имени нового администратора.

Закрываем программу удалённого доступа и запускаем её заново, вводим адрес сервера, подключаемся и на этапе логина вводим имя нового администратора и его пароль.

Теперь можно отключить возможность удалённого входа от имени root.

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

sudo nano /etc/ssh/sshd_config

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

Еще по теме:  Имя в Телеграмме tixeax найти пользователя

Откроется текстовый файл настроек, листаем стрелками вниз до параметра “PermitRootLogin yes”, который необходимо поменять на:

Выходим нажатием CTRL+x, редактор спросит сохранять ли изменения? Вводим Y. На запрос имени файла нажать ENTER, чтобы сохранить изменения в прежний файл.

Перезапускаем сервис удалённого управления

sudo systemctl restart sshd

Если после этого оборвётся связь, надо снова подключиться от имени нового администратора.

Настраиваем firewall

Устанавливаем удобный брандмауэр UFW.

sudo apt install ufw

Если происходило переподключение, то система запросит пароль нового администратора.

Установим защиту от брутфорса паролей:

apt install -y fail2ban

Запрещаем все входящие подключения.

sudo ufw default deny incoming

Делаем исключение для удалённого управления.

sudo ufw allow ssh

Разрешаем все исходящие подключения.

sudo ufw default allow outgoing

sudo ufw enable

На запрос подтверждения вводим “y”.

Проверяем правильность настройки.

sudo ufw status verbose

Правильный вывод выглядит следующим образом:

Готовим систему для запуска бота

Далее необходимо создать пользователя, от имени которого будет работать бот. Это позволит не бояться за сервер, и в случае необходимости проведения дополнительных настроек разработчиком, можно не опасаясь предоставить пароль этого пользователя. Если разработчик попросит дополнительно предоставить доступ администратора для установки, например, ПО для базы данных, то не забудьте потом посмотреть историю его действий под администратором командой “history”, а потом поменять пароль второго администратора. Доступ к root при наличии доступа к дополнительному администратору адекватный разработчик просить не должен.

Добавляем нового пользователя (имя произвольное)

sudo adduser telegrambot

Закрываем терминал и заходим уже под новым пользователем.

Создаём папку для хранения файлов бота

Переходим в эту папку

Далее необходимо скопировать файл(ы) бота на сервер.

Под Windows это проще всего сделать встроенной утилитой pscp, открываем командную строку cmd. И там вводим команду, в которой нужно скорректировать следующее: путь к файлу бота, имя пользователя для бота, IP-адрес сервера.

Утилита спросит пароль, надо ввести пароль от пользователя telegrambot.

Переходим в окно удалённого управления сервером и проверяем появление файла.

Если бот содержит множество файлов, то для копирования удобнее будет использовать программу WinSCP. Подключение осуществляет по тому же адресу и порту, с тем же пользователем, что и в случае с терминалом.

Установка Python

Переходим в каталог для временных файлов.

Скачиваем скрипт установки Miniconda. Это менеджер пакетов Python, его установщик автоматически установит интерпретатор Python, нужный для запуска самого бота.

curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

Запускаем скрипт скачивания-установки

Пролистываем лицензию клавишей ENTER. На запрос принятия лицензии отвечаем yes. Соглашаемся на путь установки по умолчанию, на предложение инициализировать отвечаем yes.

Закрываем терминал и запускаем снова, подключаемся обратно пользователем telegrambot. Без переподключения команда python будет недоступна.

Проверяем правильность установки Python

Если всё сделано верно, то появится номер версии Python.

Запуск бота

Переходим в каталог с файлами бота.

Запускаем следующим образом, если разработчик не обозначил другой вариант.

Поскольку для функционирования ботов нужны сторонние библиотеки, появится ошибка такого типа:

ModuleNotFoundError: No module named ‘pyrogram’

Это означает, что надо установить недостающие библиотеки.

Если в комплекте с ботом разработчик положил файл requirements.txt, то этот файл содержит список необходимых библиотек и их можно установить одной командой:

pip install -r requirements.txt

Иначе необходимо последовательно выполнять установку недостающих библиотек, используя команду pip install:

pip install module_name

, где module_name это название очередного недостающего модуля из ошибки

ModuleNotFoundError: No module named ‘module_name’

Возможен редкий вариант, что имя модуля в программе не соответствует имени для установки, правильную команду подскажет гугл по запросу “pip имя_модуля”.

Если всё получилось, необходимо перезапустить скрипт бота в фоновом режиме. Дело в том, что при запуске командой “python telebot.py”, бот работает как простое приложение, и при закрытии терминала, система его завершит.

Чтобы бот был запущен постоянно в фоновом режиме, нужно производить запуск таким образом:

nohup python telebot.py https://ruvds.com/ru/helpcenter/telegram-bot-dlya-ruvds/» target=»_blank»]ruvds.com[/mask_link]

Футбольный телеграм бот на Python (4/4): Запуск на сервере

В четвертой части серии статей по написанию телеграм бота на python, запустим его на сервере. Для разнообразия и правдоподобия я выбрал вариант размещения на VPS, а не Heroku.

Во-первых, Heroku очень редко используют в продакшене. Его платные тарифы сильно выше стоимости аренды сервера.

Во-вторых, крупные кампании дают виртуальные машины бесплатно на год. Этого достаточно, что бы 4 года не платить за работу сервера.

Получение VPS

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

  • AWS Amazon, продукт Amazon EC2.
  • Azure Microsoft, продукт Виртуальные машины Linux.
  • Google Cloud, продукт Compute Engine.
  • Alibaba Cloud, продукт Elastic Compute Service.

Только не активируйте все сразу, это разовое предложение.

Не буду подробно описывать, как развернуть VPS, у этих платформ документации на высоком уровне. Если у вас трудности с английским и переводчиками, начинайте с Azure. У них много русской документации. Скажу только, что крайне желательно выбирать OS Ubuntu 18.04.

Процесс получения бесплатного периода и создание виртуальной машины достаточно тернист. Если вы никогда не делали это ранее, будьте готов потратить 1-2 часа на знакомство с облачными решениями.

Я буду использовать VPS с почасовой оплатой от reg.ru. Это дешевое и простое решение. Для обучения и демонстрации можно запускать на несколько часов по цене от 0,32 ₽/час. А постоянная работа подобного бота будет стоить 215 рублей в месяц.

Еще по теме:  Зайти в свой Телеграм канал как правильно

Подключение к виртуальной машине

Для подключения к VPS нужно знать ip (IPv4), логин (обычно «root») и пароль.

С Linux и MacOS можно подключится из терминала. Введите команду, логин и ip сервера.

Для windows можно скачать терминал Ubuntu. Если такой вариант не подходит, используйте PuTTY (порт: 22). Вот так выглядит консоль. Для подключения требуется ввести «yes» и пароль.

Футбольный телеграм бот на Python (4/4): Запуск на сервере

После входа я узнал какая версия python установлена командой python -V . Из коробки стоит 3.6.9, а проект на 3.8.5, нужно обновить.

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

  1. Установим необходимую версию python. Внимательно вводите эти команды по очереди, это процесс кастомной установки.

$ sudo apt update $ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev $ wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz $ tar -xf Python-3.8.5.tgz $ cd Python-3.8.5 $ ./configure —enable-optimizations $ make # ~15 минут $ sudo make altinstall $ cd /home

Немного деталей. Я скачал архив, распаковал и установил python 3.8.5. Будет готов подождать пока выполнится команды make . Введите python3.8 -V и убедитесь, что можно продолжать:

/home# python3.8 -V Python 3.8.5

2. Создадим проект. Установим и создадим виртуально окружение. Выполняйте команды по очереди:

$ python3.8 -m pip install —upgrade pip $ pip install virtualenv $ mkdir fonlinebot $ cd fonlinebot $ virtualenv venv $ source venv/bin/activate $ python -V $ deactivate

Мы установили pip и virtualenv. Затем создали папку «fonlinebot», создали в ней виртуальное окружение и проверили его.

Футбольный телеграм бот на Python (4/4): Запуск на сервере

3. Установим и запустим Redis-server. Для установки и проверки в Ubuntu введите эти команды:

$ sudo apt install redis-server $ redis-cli 127.0.0.1:6379> ping

Получите PONG , значит redis запущен. Устанавливать удаленный доступ и пароль в этом руководстве я не буду. Эта служба доступна только конкретной машине, что полностью покрывает задачу.

4. Переменные окружения. Теперь нужно спрятать токен и API-ключ в переменные. Выполните команду nano /etc/environment и вставьте эти строки со своими значениями в кавычках.

fonlinebot_token=»замените_на_токен» fonlinebot_api_key=»замените_на_ключ_апи»

Затем нажмите CTRL+O -> Enter -> CTRL+X для сохранения. Перезапустите машину: sudo reboot , что бы переменить настройки.

5. Подготовка кода бота. Отредактируйте файл config.py. Раскомментируем настройки логирования и установим переменные окружения.

# fonlinebot/config.py #. import datetime import os formatter = ‘[%(asctime)s] %(levelname)8s — %(message)s (%(filename)s:%(lineno)s)’ logging.basicConfig( filename=f’bot-from-.log’, filemode=’w’, format=formatter, datefmt=’%Y-%m-%d %H:%M:%S’, level=logging.WARNING ) TOKEN = os.environ.get(«fonlinebot_token») #. ‘x-rapidapi-key’: os.environ.get(«fonlinebot_api_key»), #.

Скрывать секретную информацию (токены, пароли) обязательно. Нельзя выкладывать файлы с паролями на гитхаб, stackoverflow или отправлять сторонним разработчикам.

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

Загрузка файлов на VPS

Скачайте и установите WinSCP. Это программа для загрузки проекта на VPS. Альтернативный вариант Filezilla. Вариант для повышения скиллов — Git.

Откройте и установите соединение с сервером:

программа для загрузки проекта на сервер

Далее перенесите файлы проекта (без venv и файлов Pycharm) в папку home/fonlinebot/.

файлы проекта (без venv и файлов Pycharm) в папку home/fonlinebot/

Готово? Запустим бота с сервера.

$ cd /home/fonlinebot/ # перейдем в папку проекта $ source venv/bin/activate # активируем окружение $ pip install -r requirements.txt # установим зависимости $ python main.py # запустим бота

Теперь перейдите в Телеграм и протестируйте работу. Отвечает? Хорошо, остановите его (ctrl+c) и деактивируйте виртуальное окружение ( deactivate )

Финишная прямая проекта. После закрытия терминала, бот остановится. После перезапуска сервера, он не запустится. Настроем автономную работу.

Беспрерывная работа бота

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

nano /lib/systemd/system/fonlinebot.service
[Unit] Description=Football online bot After=network.target [Service] EnvironmentFile=/etc/environment ExecStart=/home/fonlinebot/venv/bin/python main.py ExecReload=/home/fonlinebot/venv/bin/python main.py WorkingDirectory=/home/fonlinebot/ KillMode=process Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

Затем нажмите CTRL+O -> Enter -> CTRL+X для сохранения. Что это за настройки?

Настройки службы, нам важны эти:

  • Description — описание службы.
  • EnvironmentFile — путь к файлу с переменными.
  • ExecStart и ExecReload — это команды для запуска и перезапуска бота.
  • WorkingDirectory — путь к папке в которой файл запуска main.py.

Для запуска службы выполните эти 2 команды.

systemctl enable fonlinebot systemctl start fonlinebot

Теперь вернемся в бот и посмотрим как он отвечает.

Если бот не отвечает, проверьте статус и логи. Здесь сложно предвидеть ошибку:

systemctl status fonlinebot # статус journalctl -u fonlinebot.service # логи

Проект готов, отличная работа! Все этапы разработки на Gitlab.

Заключение

Мы проделали большую работу: создали бота, настроили его взаимодействие с внешним api и загрузили на сервера. В процессе затронули кнопки, меню, callback и ошибки.

Вот несколько идей для продолжения проекта:

  • более детальная статистика матча,
  • админка для получения ошибок и отправки сообщения всем пользователям,
  • сбор статистики активности пользователей.
  • переход на вебхук.
Еще по теме:  2 й аккаунт в Телеграмм на одном телефоне

Источник: pythonru.com

Запускаем телеграм-бота на сервере

Тогда он будет работать круглые сутки, а вы — отдыхать.

Не так давно мы создали телеграм-бота на Python: можно было написать ему свой знак зодиака, а он в ответ давал предсказание о долгой счастливой жизни. Но у бота есть недостаток: он работает, пока запущена программа на нашем компьютере. Если мы её остановим или выключим компьютер, бот тоже перестанет отвечать на сообщения.

Вот что мы сделаем, чтобы бот работал независимо от всего:

  1. Выберем сервер.
  2. Подготовим программу для работы на нём.
  3. Зальём программу на сервер.
  4. Настроим сервер, чтобы он исполнял программу.

Выбираем сервер

Нам нужен сервер, который умеет работать с Python и запускать файлы программы автоматически. На самом деле он у нас уже есть — на нём крутится сайт mihailmaximov.ru. Если вы всё пропустили — держите подборку:

  • что такое домен и как его получить;
  • делаем страницу «О себе»;
  • как опубликовать свой сайт в интернете.

Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.

Готовим программу и отправляем её на сервер

Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.

Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:

Вставляем их в Putty и подключаемся. Помните, что для безопасности во время ввода пароля курсор стоит на месте, чтобы никто не смог выяснить, сколько символов вы набираете. Когда подключились, вводим команду python3.3 -V — она покажет, есть ли на сервере поддержка этой версии Python:

Теперь добавляем в самое начало нашего файла с программой такую строчку:

В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .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 .

Что дальше

Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:

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

Разбираетесь в технологиях? Вам сюда

Переходите с уровня junior на уровень middle, а потом — senior. У «Яндекс Практикума» есть курсы ровно для этого: от алгоритмов и типов данных до модных фреймворков.

Разбираетесь в технологиях? Вам сюда Разбираетесь в технологиях? Вам сюда Разбираетесь в технологиях? Вам сюда Разбираетесь в технологиях? Вам сюда

Получите ИТ-профессию

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Источник: thecode.media

Рейтинг
( Пока оценок нет )
Загрузка ...