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

Для начала рассмотрим что же такое удалённый сервер vps/vds.

Разницы между VPS и VDS нет — это одно и то же. VPS расшифровывается как Virtual Private Server, а VDS — Virtual Dedicated Server . Это разные аббревиатуры одинаковой услуги. Поэтому их часто используют вместе, чтобы не вызывать путаницу. В рунете можно встретить разные определения этих терминов, но по факту они возникли и развивались одновременно и считаются синонимами.

Сам же удалённый сервер на vps/vds используется в основном для установки на нём различных программ, скриптов и т.п., но также можно использовать для хранения данных. Нам же он пригодится для установки и дальнейшей работы бота telegram.

Под основу мы возьмём наш бот ChatGPT, который мы сделали по моему гайду , который я написал ранее.

1. Выбор хостинга

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

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

БЕСПЛАТНЫЙ ХОСТИНГ для TELEGRAM БОТА на PYTHON AIOGRAM | REPLIT

Также стоимость минимальной комплектации (а нам она и нужна) всего 188 рублей при оплате за месяц .

Помимо этого при регистрации по моей реферальной ссылке после аренды облачного сервера вы получите дополнительные 200 рублей на свой счёт.

1.1. Аренда сервера

Нам необходим облачный VDS/VPS сервер с минимальным тарифом

Вот конфигурации, которые нам необходимы:

2. Необходимое ПО

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

Тут нам сам сервис рекомендует использовать программу Putty, но предложенная нам ссылка выдаёт крашнутый сайт, по этому мы скачаем данное ПО тут .

Нам необходима обычная версия. Папку «PuTTY» необходимо разархивировать в удобное для Вас место.

WinSCP — это свободный графический клиент протоколов SFTP и SCP, предназначенный для Windows. Обеспечивает защищённое копирование файлов между компьютером и серверами, поддерживающими эти протоколы.

Он нам необходим для более быстрой и удобной загрузки на сервер наших скриптов на Python.

Процесс установки программы не буду выкладывать, так как он интуитивно понятный.

После установки ярлык программы появится на рабочем столе.

3. Запуск ПО и работа с командной строкой

Для запуска необходимо выбрать putty.exe

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

После ввода IP нашего облачного сервера и нажатии кнопки «Соединиться» нам открывается вот такая командная срока, где необходимо ввести сначала логин, затем пароль.

Логин у нас стандартный — » root «, а пароль находится также в письме на электронной почте. Опишу подробнее что именно мы делаем:

Создаем PYTHON TELEGRAM бота на AIOGRAM и выкладываем на VPS/VDS ХОСТИНГ

  1. Пишем в командной сроке » root «, затем нажимаем Enter
  2. Вписываем пароль, который нам пришёл на почту и нажимаем Enter

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

Для более быстрого и удобного ввода пароля просто скопируйте его и вставьте в командную строку. Чтобы вставить скопированный текст н е нужно нажимать Ctrl+C . Необходимо просто нажать правой кнопкой мыши на командную сроку . Затем нажимаем Enter.

Вот мы и вошли!

3.1. Скачивание необходимых библиотек и создание «фундамента»

Примерно также как мы устанавливали Python и необходимые для работы библиотеки в VS Code ( моя статья ) мы сейчас установим всё необходимое на сервер.

В актуальной версии Ubuntu уже должен быть предустановленный Python , но нам нужно это проверить, а заодно обновить систему, если это потребуется. Для этого мы пишем две команды:

sudo apt update
sudo apt -y upgrade

После введения данных команд мы увидим указана версия нашего ПО.

Теперь мы можем начать устанавливать необходимые инструменты и библиотеки. Начнём

sudo apt install -y python3-pip

Устанавливает самое важное — инструмент для установки библиотек.

Вспомним какие библиотеки мы устанавливали в VS Code.

  1. aiogram — бот TG
  2. openai — API ChatGPT

Чтобы эти библиотеки заработали вам необходимо их установить с помощью pip команд.

pip install aiogram

pip install openai

Отлично! Библиотеки мы установили. Пришло время подготовить папку, где будет располагаться скрипт. Также эта область будет изолирована от сторонних проектов, по этому можно будет в дальнейшем запускать другие скрипты python уже в другой папке и они не будут конфликтовать друг с другом.

Для этого мы прописываем:

sudo apt install -y python3-venv

mkdir environments
cd environments

python3 -m venv myenv

Немного подробнее о том, что делают эти команды:

Они обеспечивают изоляцией ваших проектов в широком контексте вашего компьютера благодаря совместной работе этих файлов, предотвращая смешивание системных файлов и файлов проекта. Использование контроля версий и предоставление каждому проекту доступа к необходимым пакетам будет очень полезно. Python Wheels это формат готовых пакетов для Python, который может ускорить разработку программного обеспечения с помощью уменьшения количества компиляционных операций.

3.2 Загрузка скрипта на сервер

Еще по теме:  Как во время звонка в Телеграм изменить голос на Андроиде

Теперь мы открываем программу WinSCP для того, чтобы загрузить наш готовый скрипт-бот на сервер.

В открывшемся нам окне вводим все необходимые данные для подключения к серверу и нажимаем кнопку Сохранить и подключаемся к серверу.

Источник: dzen.ru

How To Deploy a Telegram Bot

12 June 2017 , Python, 44058 views, Разворачиваем Django приложение в production на примере Telegram бота

This is the second part of my small tutorial about creating a Telegram bot using Python and Django. Today I am going to show you how to deploy our Django app on Digital Ocean VPS hosting, we are going to use Linux Ubuntu 14.04 LTS version.

What you are going to learn:

  • How to deploy a django app (or any WSGI app) on Digital Ocean using SSH access
  • How to work with gunicorn and nginx
  • How to control your processes using supervisord
  • Setting up virtualenv using pyenv
  • Adding our app to system autorestart (init.d)

Even despite we are going to work with Django app, this instruction will be applicable for any Python WSGI web application, so do not hesitate to use it with Pyramid, Flask, Bottle or any other popular web application framework in Python ecosystem. In this post I am going to use VPS (Virtual Private Server) on popular Digital Ocean hosting. By the way, if you sign up using my link, you will get $10 credit instantly on your account, money can be used to buy small servers and use them for your own purposes.

Moreover, it is not neccessary to deploy your app on public servers, everything can be performed on your local ubuntu machine or with admin tools like VirtualBox or Vagrant (but in this case you will not be able to set up a webhook). Let’s get started.

Creating a VPS

I assume that you already signed up on Digital Ocean. So, log in and then press Create Droplet at the very top.

Now we are going to choose the cheapest droplet for our purpose ($5 per month). Select Ubuntu 14.04.5 LTS or the newest one.

Scroll down and choose a data center. Usually I prefer Frankfunt due to lowest ping rate from my place. When everything is ready, press Create button. Your droplet (VPS) is going to be ready within 60 seconds, you will find remote access credentials on your mailbox.

Server Configuration

When server is ready, you have to log in and change your root password.

root shell access

Let’s update packages.

# apt-get update # apt-get -y upgrade

And then create a sudo user.

# adduser django # adduser django sudo

When sudo user has been added, log in under this user called django.

Let’s now install packages that we are going to use for deployment.

$ sudo apt-get install -y build-essential $ sudo apt-get install -y python-dev libreadline-dev libbz2-dev libssl-dev libsqlite3-dev libxslt1-dev libxml2-dev $ sudo apt-get install -y git

At the very beginning I have mentioned that we are going to use pyenv to install the latest Python version (I usually do not work with system python when it comes to custom scripts and web apps). If you do not know what is Pyenv and how to work with it, take a look at my post in Russian (will translate it ASAP).

$ pyenv install 2.7.13 Downloading Python-2.7.13.tgz. -> https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz Installing Python-2.7.13. Installed Python-2.7.13 to /home/django/.pyenv/versions/2.7.13

It takes some time to download, compile and install newest version of Python, please be patient 🙂 Ubuntu 14.04 has Python 2.7.6 which is quite old and has some security problems with TLS and it does not support TLS 1.2.

Now we have to clone a repo. If you forgot the link, here it is.

$ cd ~ $ git clone https://github.com/adilkhash/planetpython_telegrambot.git $ cd planetpython_telegrambot/

Configure isolated python virtual environment using pyenv.

$ pyenv virtualenv 2.7.13 telegram_bot $ pyenv local telegram_bot

It is time to install dependencies using pip.

pip install -r requirements.txt

I have made some changes which are not covered in the previous post about Telegram bot. I moved some variable settings to .env file which is controlled by a reusable django app called django-envrion. Take a look at the changes.

Create .env file from .env-template file and then you have to provide your own credentials.

$ cd blog_telegram mv .env-template .env vi .env

You have to change DEBUG to False, put your Telegram bot token and provide additional hostname (if you have several host, they should be separated by comma).

ALLOWED_HOSTS=127.0.0.1,bot.khashtamov.com

Example shows that I have 2 hosts: loopback and additional subdomain host for telegram bot (which is going to be used to set up a web hook).

Setting up valid SSL certificate

In my last post about Telegram I have mentioned that there are 2 ways on how to interact with Telegram bot:

  • Using getUpdates API call
  • Setting up a webhook using setWebhook API method

Moreover, if you decide to use a webhook, you have to obtain a valid SSL certificate or create your own self-signed certificate using tools like OpenSSL. We are going to obtain a valid one using free service called Let’s Encrypt. I have a Russian article which describes the process of issuing SSL certificate (will translate ASAP).

$ cd ~ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt/ $ ./letsencrypt-auto certonly —standalone -d bot.khashtamov.com

You have to answer some questions regarding a website and when everything is ready, your fresh certificate will be located at /etc/letsencrypt/live/bot.khashtamov.com/. Pay attention to «-d» option in letsencrypt-auto script, put your own domain name.

Setting up a webserver Nginx

It is time to set up a proxy webserver for our Django app. I decided to take nginx which is one of the most robust web servers and is considered as a best practice when it comes to deployment to production environment. Nginx will proxy all incomming requests to our application which is going to be served by WSGI server called Gunicorn. Let’s take a look at the config file:

Еще по теме:  Горячие клавиши Телеграм видео на весь экран

$ sudo apt-get install -y nginx
$ cd /etc/nginx/sites-available/
$ sudo nano telegram_bot.conf

telegram_bot.conf content should be:

server < listen 80; listen 443 ssl; server_name bot.khashtamov.com; ssl_certificate /etc/letsencrypt/live/bot.khashtamov.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bot.khashtamov.com/privkey.pem; location / < proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://localhost:8001/; >>

Do not forget to replace a hostname! Now we have to restart a server.

$ cd /etc/nginx/sites-enabled/ $ sudo ln -s ../sites-available/telegram_bot.conf telegram_bot.conf $ sudo service nginx restart

What we just did?

  • Provide a valid SSL certificate for our domain (bot.khashtamov.com)
  • Set up a proxy. All incomming http requests will be proxied to localhost:8001 (where Gunicorn will be started)
  • Provide additional HTTP headers (IP address, hostname, http schema etc.). If you want to know more, take a look at docs.

For test purposes and to make sure that everything is configured correctly, we can start django development server on 8001 port:

$ cd ~/planetpython_telegrambot/ $ python manage.py runserver 8001

Open a browser and navigate to your configured host

Django Nginx SSL

URL Not found error is OK because we only have 1 valid URL for our bot to receive commands (and django admin url of course).

Gunicorn and Supervisor set up

Now let’s set up our production-ready WSGI server gunicorn which is going to be controlled by process manager supervisord.

What is Supervisor?

Supervisor is a process manager utility. It monitors processes and makes sure they work correctly. For example, if our gunicorn server dies supervisor tries to restart it and provides feedback. Pay attention that if you want to control a process via supervisor, make sure that your program is running in foreground mode.

Let’s write a config file for gunicorn:

[program:gunicorn] command=/home/django/.pyenv/versions/telegram_bot/bin/gunicorn blog_telegram.wsgi:application -b 127.0.0.1:8001 -w 1 —timeout=60 —graceful-timeout=60 —max-requests=1024 directory=/home/django/planetpython_telegrambot/ user=django redirect_stderr=True stdout_logfile=/tmp/gunicorn.log stderr_logfile=/tmp/gunicorn_err.log autostart=true autorestart=true startsecs=10 stopwaitsecs=10 priority=999

Save it as gunicorn.conf. We have already installed gunicorn via pip (it is our dependency in requirements.txt).

Our supervisord config file content:

[unix_http_server] file=/tmp/telgram_bot_supervisord.sock [supervisord] logfile=/tmp/telgram_bot_supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/tmp/telgram_bot_supervisord.pid nodaemon=false minfds=1024 minprocs=200 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/telgram_bot_supervisord.sock [include] files = /home/django/planetpython_telegrambot/gunicorn.conf

Save it to ~/planetpython_telegrambot/supervisord.conf and start it via:

$ supervisord

If your settings are correct, there should be no error messages.

Supervisor is controlled by supervisorctl utility.

$ supervisorctl gunicorn RUNNING pid 20901, uptime 0:04:18 supervisor>

If you need help, then type:

supervisor> help stop stop Stop a process stop :* Stop all processes in a group stop Stop multiple processes or groups stop all Stop all processes supervisor>

If supervisor is running, your telegram bot is already online.

Starting supervisor after system restart

What will happen if your VPS is restarted (failure inside data center, system update, admin error etc)? Nothing. Your web apps will not be restarted. We have to fix it.

We are going to use upstart init script.

description «Supervisor Telegram bot django app starting handler» start on runlevel [2345] stop on runlevel [!2345] respawn setuid django setgid django chdir /home/django/planetpython_telegrambot/ exec /home/django/.pyenv/versions/telegram_bot/bin/supervisord

You have to put your file (I called it telegram_bot.conf) to /etc/init/ directory. In order to check if it works, restart your droplet:

$ sudo shutdown -r now

Everything should work correctly.

Setting up Webhook

Order to initiate a webhook, we have to run a custom python script with the following content:

import telepot bot_token = ‘BOT_TOKEN’ bot = telepot.Bot(bot_token) bot.setWebhook(‘https://bot.khashtamov.com/planet/bot//’.format(bot_token=bot_token))

Please replace BOT_TOKEN to your valid telegram bot token and run:

$ python webhook.py

So now your bot should receive messages and process them correctly.

Telegram bot

  • Gunicorn official docs
  • Nginx docs
  • Supervisor official docs
  • Telegram bot github repo
  • Upstart mechanism description

Join the mailing list

If you like the content I produce, please join my mailing list to stay tuned.

  • Celery Best Practices: practical approach
  • What is new in Python 3.8
  • How to Work with PostgreSQL in Python
  • The Ultimate Guide To Python Logging
  • How To Create a Telegram Bot Using Python
  • Getting Started with MySQL in Python
  • Introduction to pandas: data analytics in Python

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

Telegram-бот на JavaScript с бесплатным хостингом

Всем привет! Эта тема до сих пор кажется очень горячей, многие люди интересуются тем, как создать своего собственного бота для Telegram? Я тоже довольно долго думал об этом. Я, как программист, не понимал, как должен выглядеть процесс разработки. Для меня открылось много вопросов (например, среда выполнения, хостинг, общение).

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

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

Следующим шагом был выбор языка программирования. Я мог бы написать своего бота с нуля на любом языке, но самый простой способ — взять для этого готовый пакет-оболочку. Здесь вы можете найти довольно внушительный список готовых оболочек Telegram API для нескольких языков программирования.

Wrapper в данном случае — это библиотека, упрощающая процесс взаимодействия вашего приложения с Telegram API. Под капотом он просто общается с вашим ботом через запросы / ответы HTTP (S). В качестве языка программирования на этот раз был выбран JavaScript. Я быстро попробовал первые несколько JS-оберток из Node.js list и решил использовать Botgram. Это легкий микро-фреймворк, но в нашем случае его более чем достаточно.

Затем, после короткого погружения в документацию Botgram, я понял, что моему будущему боту на самом деле не нужен веб-сервер, работающий на машине. Это просто приложение Node.js.

Также я знал, что мне нужен токен бота для установления соединения между приложением Node.js и ботом. Пришло время создать самого Telegram-бота. Как я понял из документации, мне нужно было поговорить с ботом с именем пользователя BotFather в Telegram. Чтобы начать чат, я отправил ему команду /start и получил все возможные варианты. Затем я отправил команду /newbot и после пары вопросов о моем боте (я выбрал его имя и имя пользователя) получил токен моего нового бота от BotFather.

Еще по теме:  Запрещен ли Телеграм в России 2023

Создание приложения Node.js

Получив токен нового бота, я начал писать приложение Node.js. Сначала я сгенерировал свой package.json файл командой npm init и подготовил свои любимые настройки для JS-проекта (eslint, babel и т.д.). Затем я установил эти две npm зависимости — botgram и figlet. Фиглет на самом деле является модулем, который выполняет основную работу по преобразованию поступающего текста в строку ASCII. Затем я создал основной (и единственный) JS-файл index.js и немного написал код. Через некоторое время я сделал это:

Приложение довольно простое. Я получил токен из аргумента командной строки, проверил, не пуст ли он, и создал новый экземпляр бота, используя его. Следующая основная функция onMessage обрабатывала входящие сообщения, выполняясь каждый раз, когда бот получает текстовое сообщение. Я протестировал свое приложение локально, запустив его, выполнив следующую команду в консоли:

$> TELEGRAM_BOT_TOKEN=”” node index.js

Если исходный код вам непонятен и вы не понимаете, как он работает, спрашивайте меня в комментариях. Я постараюсь подробнее объяснить это в своем ответе.

Хостинг

Все в порядке. Мое приложение Node.js было готово, и я задумался, где его разместить? Моим главным условием было то, что это должен быть бесплатный хостинг, потому что я не хотел тратить деньги на этот забавный и крохотный проект.

Первой идеей было разместить моего нового бота на Heroku . На этой известной платформе, как вы, наверное, знаете, есть возможность бесплатно запускать приложение Node.js (или другое). Я развернул там свое приложение и быстро понял, что оно вылетает через минуту. Я начал исследовать причину такого поведения и обнаружил, что все приложения, работающие на бесплатных экземплярах на Heroku , имеют ограничение: они не могут работать долгое время, если веб-сервер не запущен. У моего бота не было веб-сервера, поэтому я не мог запускать свое приложение на Heroku дольше одной минуты. Этого явно было недостаточно, и я начал исследование, какие альтернативы у меня есть.

После нескольких минут поиска в Google я нашел один отличный сервис: Glitch.com. Это очень хорошая платформа, позволяющая развертывать и размещать небольшие проекты Node.js. Я вошел в систему с Github и нажал кнопку Start a new project . Во всплывающем меню я выбрал вариант Create a Node App . Он перенаправил меня в веб-среду IDE со свежим проектом.

Я мог написать свой код прямо здесь, но на тот момент мой исходный код уже был помещен в репозиторий github. Я хотел использовать свой код прямо из репозитория github вместо редактирования в Интернете. Я обнаружил, что Glitch на самом деле предоставляет возможность импорта кода из github, и это очень круто! Итак, чтобы импортировать свой проект из github, я нажал на название проекта в верхнем левом углу, а затем на Advanced options кнопку, расположенную в нижней части открытого модального окна:

Затем я ввел путь к проекту github, в моем случае это был room-js/atg-bot , и нажал кнопку OK. После этого мой исходный код из репозитория появляется в веб-среде IDE. Еще не хватало одной мелочи: мне нужно было где-то указать настоящий токен бота, чтобы он заработал. Для этого glitch имеет файл .env в корневой папке. Мне просто нужно было добавить туда одну строку с переменной токена с его значением:

Затем мое приложение было автоматически запущено и бот начал работать! Это был отличный момент! Некоторое время я тестировал своего бота, и в какой-то момент он перестал отвечать. Причина, как я тогда выяснил, заключалась в том, что glitch также имеет список ограничений, применяемых ко всем проектам.

Одним из ограничений является то, что приложение переходит в режим сна после 5 минут бездействия. Это означает, что если мой бот не будет получать никаких сообщений в течение пяти минут, он больше не будет отвечать. Это были плохие новости, но через некоторое время я нашел обходной путь. Посмотрим, что это .

Проект Making a Glitch доступен 24/7

Решение было очень простым. Чтобы остаться в живых, моему боту нужно было получить хотя бы один запрос за 5 минут. Я нашел еще один отличный сервис под названием Uptime Robot. Я зарегистрировался там и создал нового робота, который запрашивал мою glitch заявку каждые пять минут. Вот как выглядела моя конфигурация:

Вот и все. Теперь мой новый бот работает без простоев и доступен 24/7. И это абсолютно бесплатно!

[ОБНОВЛЕНИЕ] Недавно я обнаружил, что робот Uptime больше не выполняет свою работу, а мой бот не работает круглосуточно. Вроде что-то изменилось. Затем я нашел эту статью https://probot.github.io/docs/deployment/ и повторно развернул этого бота в соответствии с их инструкциями. Пока все выглядит хорошо, поэтому, пожалуйста, посмотрите туда, прежде чем развертывать приложение Glitch.

Это всего лишь один из способов создания бота Telegram. У меня пока работает хорошо, но я не думаю, что это очень стабильный и надежный способ. И я уверен, что большие / важные проекты имеет смысл запускать на платном хостинге.

Исходный код / ​​Ссылки

Не стесняйтесь оставлять свои комментарии и делиться своим опытом написания ботов. Хлопайте и подписывайтесь на нас в Instagram, Twitter и Facebook!

Удачного кодирования!

Источник: digitrain.ru

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