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

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

Пишем простейшего бота (далее bash для Mac OS X и JS)

Создадим папку и сразу перейдем к её содержимому:

$ mkdir bot cd $_

Далее создадим файлы, которые нам потребуются для работы:

$ touch Procfile bot.server.js

  • Procfile — поможет нам запускать наше приложение на виртуальной машине
  • bot.server.js — сервер нашего бота, где будет лежать наш код

Затем создадим package.json

$ npm init

В вашем распоряжении должен оказаться Package.json файл такого содержания, ну или примерно, зависит от того, что вы ввели на этапе настройки:

«name»: «bot»,»version»: «1.0.0»,»description»: «»,»main»: «index.js»,»scripts»: «test»: «echo «Error: no test specified» exit 1″>,»author»: «»,»license»: «ISC»>

Добавим нужные нам пакеты:

Railway Убийца Heroku | Самый Быстрый Способ Задеплоить Telegram/VK Python Бота


npm i -s telegraf

  • telegraf — фреймворк для написания ботов, он прост и понятен, более нам и не нужно.

Для начала, вам потребуется получить API_TOKEN для вашего бота, читаем официальную инструкцию.

Окей, токен вы получили, он понадобится в момент деплоя.

const Telegraf = require(‘telegraf’)const bot = new Telegraf(process.env.BOT_TOKEN)bot.start((ctx) => console.log(‘started:’, ctx.from.id)return ctx.reply(‘Welcome!’)>)bot.command(‘help’, (ctx) => ctx.reply(‘Try send a sticker!’))bot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there!’))bot.hears(/buy/i, (ctx) => ctx.reply(‘Buy-buy!’))bot.on(‘sticker’, (ctx) => ctx.reply(»))bot.startPolling()

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

Это самый тонкий момент. Мы хотим получить бота с максимально выскоим uptime. Это значит, что нам нужна виртуальная машина у любого хостинг провайдера, который вас устроит, желательно с Ubuntu. Далее идем в мою соседнюю статью и читаем, как настроить dokku на вашей виртуальной машине.

Сделали? Отлично, создаем приложение для бота:

$ dokku apps:create bot

И коннектим его к нашему проекту. Для этого необходимо инициализировать git репозиторий и привязать новый remote

$ git init git add . -A git commit -m ‘initial commit’

Говорим git, где живет наш Dokku

Если вы прочли статью о том, как установить Dokku, то вы наверняка поняли, что мы сделали в этой короткой строчке.

Еще по теме:  Как устраивать конкурсы в Телеграмме

Отлично, открываем Procfile и добавляем туда команду на запуск

web: node bot.server.js

  • web — тип процесса, который будет слушать http трафик, есть еще worker и тп, подробнее здесь
  • node — то что запустит нашего бота и будет поддерживать его работоспособность

Сделаем коммит в git

Установка Telegram бота на ХОСТИНГ (СЕРВЕР) | Настройка сервера


git add . -A git commit -m ‘add bot’

Далее вам нужно зайти через ssh на свой сервер и установить переменную BOT_TOKEN

dokku config:set bot BOT_TOKEN=

Все готово к выкладке:

git push dokku master

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

dokku config:set —global NPM_CONFIG_PRODUCTION=false

Затем нужно повторить деплой

dokku ps:restart bot

Результат проделанной работы — бот, запущенный на виртуальной машине, с возможностью деплоя и обновления без танцев с бубном и пересылкой zip/tar/gz архивов по ssh. Вы также можете настроить несколько dokku приложений для test и production сборок и не беспокоится о том, что тестовая сборка утечет на боевой сервер.

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

Для более тонкой настройки сервера вам потребуется изучить раздел Dokku Application Deployment или нанять того, кто вам поможет.

Telegraf — фреймворк для создания телеграм ботов на nodejs

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

Деплой Telegram бота на VPS | Webhooks + Java + Spring Boot

В процессе работы над проектом мне понадобилось выгрузить telegram-бота на VPS. Я не нашёл источника, в котором были бы собраны все детали этого процесса под мой конкретный случай. Поэтому в этой статье я бы хотел поделиться опытом с теми, кто столкнулся с такой же задачей.

1. VPS — что такое и где искать

VPS (virtual private server) или VDS (virtual dedicated server), виртуальный выделенный сервер — услуга предоставления серверных мощностей провайдером.

Существует множество сервисов по подбору VPS с конкретными характеристиками, вот топ-5 популярных провайдеров (взято из этой статьи). Сам я использовал сервис timeweb.

2. Что понадобится

  • Для начала, сам выделенный сервер, а также домен. В данной статье я буду использовать VPS на Ubuntu 22.04. Важно отметить, что для ботов на webhooks telegram требует SSL-сертификат. Для собственных целей я приобрёл его, однако если вы не хотите тратиться, вы можете использовать self-signed certificate.
  • Затем для общения с ним нам нужен клиент удалённого доступа. Я использовал PuTTY
  • Чтобы передать на сервер файлы нашего бота, потребуется FTP-клиент. Мой выбор пал на FileZilla
  • Также для создания исполняемого .jar файла на своей машине мне понадобился Maven для терминала
Еще по теме:  Каналы с ограничениями в Телеграмм

Обновляем списки пакетов из репозиториев

$ sudo apt update
$ sudo apt install maven
$ mvn -version

3. Конфигурация и application.properties

Конфигурация моего Spring Boot приложения состоит из трёх файлов: конфигурация Spring, самого бота и файла application.properties

telegram.bot-name=[имя вашего бота] telegram.bot-token=[токен, который можно взять у BotFather] telegram.webhook-path=[ваш домен в формате https://:/bot] server.port=[порт подключения]

На данном этапе нужно отметить, что telegram поддерживает порты 443, 80, 88 и 8443.

SpringConfig.java

4. Процесс выгрузки

Настраиваем окружение

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

Вводим (1) IP в графу Host Name и жмём (2) Open.

Вход в PuTTY

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

Для начала обновляемся

$ sudo apt update

Устанавливаем нужный пакет JRE (Java Runtime Environment) . Я использую 17-ю версию Java, поэтому пишу следующую команду

$ apt install openjdk-17-jre-headless

Также нам потребуется утилита screen — консольная утилита позволяющая в действующей SSH сессии открывать неограниченное количество независимых виртуальных терминалов. Это нужно для того, чтобы после завершения удалённого подключения наш бот не решил, что отношения на расстоянии это не для него продолжал свою работу. Она может быть установлена по дефолту, однако если это не так:

$ apt install screen

Все нужные команды для работы с этой утилитой можно найти здесь.

Последние штрихи и перенос на сервер

На нашем устройстве идём в директорию проекта. Тут нам нужно создать исполняемый .jar файл (для этого нужно установить Maven). Пишем следующее:

$ maven clean install

После этого в папке botDirectory/target должны появиться два файла: BOTNAME-0.0.1-SNAPSHOT.jar и BOTNAME-0.0.1-SNAPSHOT.jar.original

Переходим в FileZilla. Вводим IP, имя пользователя, пароль, порт 22 и нажимаем Quickconnect. Теперь полностью переносим директорию с приложением в root, чтобы получилось вот так:

Вид корневой папки сервера

Передаём адрес telegram’y

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

https://api.telegram.org/bot/setWebhook?url=

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

Заходим в PuTTY и выполняем такую команду. Она создаст для нас тот самый screen, который будет поддерживать работу нашего приложения после нашего выхода.

$ sudo screen -S bot

Затем в этом скрине переходим в директорию botDirectory/target и вводим следующее:

$ java -jar BOTNAME-0.0.1-SNAPSHOT.jar

В случае успеха увидим следующую картину. После можем закрыть наш screen сочетанием Ctrl+A+D и выйти из клиента.

Результат запуска

Заключение

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

  • Хостинг
  • Программирование
  • Java
  • Серверное администрирование
  • API
Еще по теме:  Telegram чем отличается группа от канала

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

Vivchy/example-deploy-telegram-bot

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Деплой телеграм бота на сервер

Далее project — название проета

1. Создать requirements.txt

В корне проекта создать файл зависимостей

pip freeze > requirements.txt

2. Установить python и pip на сервер

sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa Press [ENTER] to continue or Ctrl-c to cancel adding it. sudo apt install python3.8
python3.8 —version

Установить pip и virtualenv

python3.8 -m pip install —upgrade pip pip —version pip install virtualenv

3. Перенести проект на сервер

  1. при помощи git clone на сервер
  2. по ftp

4. Проверить работу бота (доустановка)

  1. Перейти в каталог проекта
  2. Прописать доступ к токену
  1. Создать файл auth_data.py и прописать переменную token
  2. Добавить token в nano /etc/environment

proj_token=»токен»

  1. В конфигурации
  2. TOKEN = os.environ.get(«proj_token»)

cd project virtualenv venv source venv/bin/activate
pip install -r requirements.txt python main.py
deactivate

Создать собственную службу для беспрерывной работы бота

sudo nano /lib/systemd/system/project.service

Прописать в файле

[Unit] Description= description project After=network.target [Service] EnvironmentFile=/etc/environment ExecStart=/home/project/venv/bin/python main.py ExecReload=/home/project/venv/bin/python main.py WorkingDirectory=/home/project/ KillMode=process Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
sudo systemctl enable project sudo systemctl start project

При обновлении проекта systemctl нужно перезапускать

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

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