Host python telegram bot

tjtanjin / python_telegram_bot_guide.md

This short guide will walk you through hosting your very own telegram bot on Ubuntu (tested on Ubuntu 18.04 and 20.04)!

This guide assumes knowledge of the following:

1) Provisioning a VPS 2) Familiarity with SSH 3) Familiarity with linux command line 

To begin, you will need to provision a VPS from cloud providers such as digitalocean or upcloud. Other popular services like AWS and google cloud would work as well with their EC2 and compute instances but the nature of those services are such that they are slightly more complicated to work with so they will not be included in this guide.

Once you have your VPS provisioned, SSH into your server with the following command (replacing 11.11.11.11 with your server’s IP address):

Within your server, run the update command below:

Next, to ensure that your bot will be running 24/7, we will be using screen to keep the process alive even when we are no longer maintaining an SSH connection to the server:

Let us next quickly create a new user that will be handling this telegram bot. For the purpose of this guide, a telegram bot I coded in python, Simple Media Converter will be used which will be handled by the user smc. Run the following command to create this new user:

Give the user superuser permissions:

For the remaining part of the guide, exit from your root SSH session and login as smc instead (again replacing 11.11.11.11 with the IP address of your VPS):

This part will vary greatly depending on the nature of your project. For demonstration purposes, if you are following through with the Simple Media Converter project, then follow this setup guide to get the project ready.

Once the project setup is complete, initialize a new screen session with the following command (this is important if you want your bot to be running 24/7):

Hit enter to continue and in this new screen, start your telegram bot:

Читайте также:  Визуальный редактор css кода

Detach from the screen by hitting ctrl + a + d on your keyboard. Make sure to hit all 3 at once because just hitting ctrl + d alone will terminate your screen instead. To view the list of screens, you may use the following command:

To reattach to the screen, simply use the command:

With that, your bot should now be running 24/7! This concludes the guide for hosting your very own telegram bot on Ubuntu! Thank you for reading!

Источник

Деплой бота на Python на Beget

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

  • хостинг на Beget
  • к хостингу привязан домен
  • для домена выпущен бесплатный SSL-сертификат Let’s Encrypt

Установим бота написанного на питоне на хостинг Бегет

Установка Flask на Beget

Включаем SSH в настройках хостинга (если он выключен).

Нам понадобится доступ по SSH

Подключаемся к хостингу через SSH. Я делаю это через программу Putty.

В поле «hostname (or IP address)» вводим:

То есть в моем конкретно случае:

Нажимаем Open, вводим пароль от хостинга и заходим на хостинг через SSH:

При установке бота на Python на хостинг без консоли не обойтись..

Затем нам нужно перейти в Docker, выполняем команду:

Еще раз потребуется ввести пароль от хостинга, и если всё ОК — видим надпись (docker) в скобочках.

Переходи в Docker в консоли

Если все ОК - то слева в скобках будет надпись

Теперь переходим в папку сайта, в моем случае команда выглядит так:

Вы всегда можете подсмотреть, где сейчас находитесь в помощью команды:

Итак, зашли внутрь папки hosting-telegram-bota.ru

Внутри корневой директории

Теперь создадим папку .venv командой

python3 -m pip install --upgrade pip 

Активируем виртуальное окружение. Сначала команда:

Затем переходим в папку .venv

Если посмотреть через менеджер файлов — то на хостинге у нас такая картина:

Создали папку с виртуальным окружением

и внутри папки .venv тоже кое-что появилось:

Продолжаем работу в консоли через Putty.

Нужно узнать путь к Python, который мы позже пропишем в настройках Flask. Выполните команду:

и запишите куда-то путь, который вам покажет.

Путь к Python на веб хостинге

/home/h//hosting-telegram-bota.ru/.venv/bin/python3
python3 -m pip install flask 

Установим библиотеку Requests:

Также на этом этапе возможно вам потребуется установить библиотеки, необходимые для работы вашего бота. Тем более, что бот может быть написан с использованием разных вспомогательных фреймворков — Aiogram, Telebot и т.д.

Выйдем из папки .venv на уровень выше

Читайте также:  Java stream api найти элемент

И начнем создавать структуру папок:

. └── hosting-telegram-bota.ru ├── HelloFlask │ └── __init__.py ├── .htaccess ├── passenger_wsgi.py └── tmp └── .venv └── Pipfile └── public_html 

Создаем две директории HelloFlask и tmp.

Теперь, если посмотреть через File Manager Beget, у нас такая структура папок внутри папки сайта «../hosting-telegram-bota.ru»

Структура папок Flask на хостинге HelloFlask

touch .htaccess touch passenger_wsgi.py

Параллельно, если не уверенно себя чувствует с консолью, можно проверять изменения через файловый менеджер хостинга, не забываем кнопку «Обновить», чтобы увидеть изменения.

За структурой папок и файлов можно следить через удобный файловый менеджер хостинга Бегет

Здесь же (в менеджере файлов Бегет) я открою файлы на редактирование.

Редактируем htaccess файл, чтобы запускалось приложение Flask

Прописываем путь к интерпретатору Python на хостинге

В файле .htaccess пишем следующие строки, где во второй — путь к нашему Python , который мы узнали ранее через команду which python3

PassengerEnabled On PassengerPython /home/h//hosting-telegram-bota.ru/.venv/bin/python3

Теперь редактируем файл passenger_wsgi

# -*- coding: utf-8 -*- import sys, os # указываем директорию с проектом sys.path.append('/home///hosting-telegram-bota.ru/HelloFlask') # указываем директорию с библиотеками, куда поставили Flask sys.path.append('/home///.local/lib/python3.6/site-packages') from HelloFlask import app as application # Когда Flask стартует, он ищет application. # Если не указать 'as application', сайт не заработает from werkzeug.debug import DebuggedApplication # Опционально: подключение модуля отладки application.wsgi_app = DebuggedApplication(application.wsgi_app, False) # Опционально: включение модуля отадки application.debug = False # Опционально: True/False устанавливается по необходимости в отладке 

Редактирование passenger_wsgi чтобы Flask работал на хостинге Бегет.ру

Также я меняю для обоих файлов права на 644.

Меняем права доступа к файлам

Через панель хостинга изменяем атрибуты на чтение и выполнение файлов

Устанавливаем chmod 644

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

Создаём там файл __init__.py

Открываем его на редактирование и пишем:

from flask import Flask app = Flask(__name__) @app.route('/python-bot/') def hello_world(): return 'Hello Flask!' if __name__ == '__main__': app.run()

Обратите внимание, я задал route /python-bot/ , который будет использован потом при добавлении вебхука для телеграм-бота.

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

Сохраняем и также изменяем атрибуты доступа на 644.

Остались последние приготовления перед проверкой — запустилось ли наше Flask-приложение.

Возвращаемся в корневую директорию

Выполняем последние команды:

Эта команда ( touch tmp/restart.txt ) понадобится нам каждый раз, когда мы будем вносить какие-то изменения, чтобы перезапустить Flask.

Не забывайте выполнять ее, иначе изменения применяться не будут.

Также, не забывайте про права на файлы (chmod 644) и возможные другие проблемы. Важна каждая деталь, например, кодировка файлов.

Windows вместо Unix приведет к ошибке

Нам на хостинге нужен Unix

Правильная кодировка UTF-8

Теперь проверим — работает ли Flask . Откроем в браузере наш сайт на той странице, адрес которой указали в __init__.py .

Если всё OK, увидим «Hello Flask!»

Всё отлично, Flask запущен на хостинге Beget

Запускаем телеграм бота на хостинге

Ок, Flask работает. Теперь заменим код в файле __init__.py на код нашего бота.

Читайте также:  Python string перенос строки

Я сделал второго телеграмм бота, чтобы на хостинге у нас работал бот на Python с похожим функционалом, как и тот, что вначале был сделан на PHP .

Вот такой код я помещу в __init__.py

from flask import Flask, render_template from flask import request from flask import Response import requests TOKEN = "" app = Flask(__name__, template_folder='../public_html') def tel_parse_message(message): print("message-->",message) try: chat_id = message['message']['chat']['id'] txt = message['message']['text'] print("chat_id-->", chat_id) print("txt-->", txt) return chat_id,txt except: print("NO text found-->>") def tel_send_message(chat_id, text): url = f'https://api.telegram.org/bot/sendMessage' payload = < 'chat_id': chat_id, 'text': text >r = requests.post(url,json=payload) return r def tel_send_image(chat_id): url = f'https://api.telegram.org/bot/sendPhoto' payload = < 'chat_id': chat_id, 'photo': "https://hosting-telegram-bota.ru/pic/pss-python.jpg", 'caption': "Жми /more" >r = requests.post(url, json=payload) return r def tel_send_inlineurl(chat_id): url = f'https://api.telegram.org/bot/sendMessage' payload = < 'chat_id': chat_id, 'text': "Добро пожаловать в бота!\nСделано на Python.\nВашему боту нужен хостинг с поддержкой:", 'reply_markup': < "inline_keyboard": [ [ , ], [ , ] ] > > r = requests.post(url, json=payload) return r @ app.route('/python-bot/', methods=['GET', 'POST']) def index(): if request.method == 'POST': msg = request.get_json() try: chat_id, txt = tel_parse_message(msg) if txt == "hi": tel_send_message(chat_id,"Hello, world!") elif txt == "/start": tel_send_image(chat_id) elif txt == "/more": tel_send_inlineurl(chat_id) else: tel_send_message(chat_id, 'from webhook') except: print("from index-->") return Response('ok', status=200) else: return '

Это страница-webhook для бота на Python, размещенного на хостинге Beget.

' @app.route('/', defaults=) @app.route('/') def catch_all(path): return render_template('home.html') if __name__ == '__main__': app.run(threaded=True)

После сохранения нового кода в init.py — не забываем перезапустить Фласк командой (зайдя на хостинг через SSH):

И также активировать webhook для бота, открыв в браузере:

https://api.telegram.org/bot/setWebhook?url=https://hosting-telegram-bota.ru/python-bot/

Webhook успешно установлен

Проверяем, открыв страницу бота в браузере, и видим ту надпись, которую мы задали для GET-запроса:

Для GET-запросов бот будет показывать простое сообщение

Проверяем как работает сам бот @hosting_telegram_bot

Проверяем - всё работает! Мы запустили бота на Python на обычном шаред хостинге!

Сервер для телеграмм бота Python

Вот так бот на Python может работать на обычном шаред-хостинге. Бесплатного тестового периода в 30 дней вполне хватит, чтобы поиграться-протестировать гипотезу, запустить MVP.
Конечно, боты бывают разной сложности и замысла. Возможно, придется все-таки перейти на сервер, которые у Beget тоже есть с хорошими конфигурациями.
Список с ценами за VPS/VDS — по ссылке.
А здесь короткое видео, как разместить бота на сервере от Бегет:

Полезные ссылки

  • Статья на Beget по настройке Python на хостинге
  • Код telegram бота на Питоне я подсмотрел здесь
  • Кажется, крутой учебник по aiogram
  • Еще статья по запуску Flask на Бегете

Источник

Оцените статью