Найти в Дзене

"Коробочное решение": Telegram бот с автопостингом из VK

Один из типовых проектов, с которых я начинал свой путь в разработке Telegram ботов - это бот для автопостинга новостей из паблика VK в Telegram канал. Основываясь на приобретенном опыте, я делал такого бота как Enterprise Java приложение, которое крутится на сервере приложений Wildfly. Когда я начал делать таких ботов на заказ, то суть реализации не поменялась и доставка решения тоже была аналогичной: Устанавливал необходимый софт, разворачивал Wildfly, NoSQL базу Redis и заливал бота как .ear архив через web-интерфейс Wildfly. В дальнейшем я перешел на Docker, потому что так было проще доставлять решение заказчику. Единственное отличие в доставке решения было в том, что я заворачивал все это дело в Docker контейнеры: один для Redis, второй для WF с приложением. Проблемы могли возникать при обновлении бота, потому что надо было заливать образ на Docker Hub, а тебе бесплатно доступен только один приватный репозиторий. Обновление таких ботов очень редкая история, по сути его один раз з
Оглавление

Один из типовых проектов, с которых я начинал свой путь в разработке Telegram ботов - это бот для автопостинга новостей из паблика VK в Telegram канал. Основываясь на приобретенном опыте, я делал такого бота как Enterprise Java приложение, которое крутится на сервере приложений Wildfly.

Когда я начал делать таких ботов на заказ, то суть реализации не поменялась и доставка решения тоже была аналогичной: Устанавливал необходимый софт, разворачивал Wildfly, NoSQL базу Redis и заливал бота как .ear архив через web-интерфейс Wildfly.

В дальнейшем я перешел на Docker, потому что так было проще доставлять решение заказчику. Единственное отличие в доставке решения было в том, что я заворачивал все это дело в Docker контейнеры: один для Redis, второй для WF с приложением. Проблемы могли возникать при обновлении бота, потому что надо было заливать образ на Docker Hub, а тебе бесплатно доступен только один приватный репозиторий. Обновление таких ботов очень редкая история, по сути его один раз запустил и он работает, но тем не менее.

И вот однажды я решил попробовать разработку Telegram бота на фреймворке Spring boot, чтобы в дальнейшем постепенно перейти на него. Для первого проекта я как раз таки и выбрал бота для автопостинга. Также мне стало интересно, можно ли реализовать такое решение, используя встроенную БД, которая поднималась бы вместе с Spring boot приложением и не надо было отдельно поднимать БД. И таки да, это можно сделать, используя базу данных H2 Database.

По поводу H2 Database

Для работы с этой базой данных необходимо:

  1. Добавить соответствующую зависимость в файл pom.xml
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>

2. Прописать настройки подключения к БД в конфигурационном файле application.json. В рамках конфигурации подключения можно так же указать адрес, по которому будет доступен веб-интерфейс БД

Пример файла на Github Gist
application.properties
application.properties

3. Создать в папке resources файл query.sql и прописать запросы на создание необходимых таблиц при старте приложения. Также можно добавить запросы на заполнение таблиц данными, если это необходимо

CREATE TABLE vk_posts
(
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
post_id BIGINT NOT NULL UNIQUE
);

Разворачиваем бота

Я конфигурирую и запускаю бота на сервере как systemd сервис. Для этого создаю файл mybot.service в папке /usr/lib/systemd/system

Пример файла на Github Gist
mybot.service
mybot.service

Далее перезапускаем daemon командой:

systemctl daemon-reload

И запускаем бота (службу/сервис) командой:

systemctl start mybot.service

Если необходимо остановить или перезапустить сервис, то для этого есть специальные команды:

systemctl stop mybot.service
systemctl restart mybot.service

Для развертывания такого решения на сервере необходимо установить только Java Runtime Environment (среда выполнения для Java)

Если в конфигурации приложения был указан адрес для доступа к БД через веб-интерфейс, то дополнительно можно еще установить Nginx, чтобы ограничить доступ к интерфейсу для посторонних адресов.

☝️Воообще я рекомендую в любом случае устанавливать Nginx и хотя бы минимально его настроить. Обычно использую вот эту настройку.

Что в итоге:

  • Мне удалось сделать своего рода "коробочного бота" с функционалом автопостинга из VK в Telegram канал, которое:

1/ довольно просто и быстро развернуть/обновить

2/ имеется встроенная БД, которая поднимается вместе с приложением

3/ приложение не требовательно к ресурсам (занимает до 200 Mb)

  • По кол-ву устанавливаемого ПО на сервер, в сравнении с решением через Docker, особо ничего не поменялось: там достаточно было установить Docker, здесь JRE.
  • Нет зависимости от Docker Hub, особенно когда бесплатно доступен только один приватный репозиторий. Соответственно быстрее и проще обновить модуль
  • Собственно с этого момента началось мое постепенное погружение в разработку ботов на Spring boot 👨🏻‍💻

Полезные материалы:

📰 Статья на Baeldung: Spring Boot With H2 Database

📰 Статья на Habr: Systemd за пять минут

#develop #telegram_bot #spring #spring_boot #H2 #nginx