Парочка open source решений по доставке уведомлений

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

Фотография: Mathyas Kurmann / Unsplash.com

Фотография: Mathyas Kurmann / Unsplash.com

Все решения, о которых мы поговорим сегодня, можно считать альтернативой сервису Firebase Cloud Messaging (FCM). Поскольку он принадлежит Google, многих пользователей беспокоит вопрос конфиденциальности данных. Безусловно, можно настроить шифрование уведомлений, но такой подход ведет к дополнительным сложностям и потенциальным задержкам. В то же время альтернативные платформы могут быть интересны на случай проблем с доступом к серверам Google по тем или иным причинам.

Gotify — чтобы отправлять сообщения на сервер

Это решение представил энтузиаст из Берлина в 2018 году и выпустил его по лицензии MIT. По умолчанию инструмент работает с SQLite, но некоторым пользователям может не хватить её производительности, тогда можно подключить PostgreSQL, MySQL или MariaDB.

Роль клиента играет браузер или приложение для Android, доступное в каталоге F-Droid, а также в виде APK. Для стабильной работы автор предлагает отключить на телефоне оптимизацию расхода батареи, иначе Gotify не сможет присылать уведомления в фоновом режиме. Чтобы оповещения не были слишком навязчивыми, их можно настроить их приоритет — например, самые важные будут приходить со звуком и вибрацией. На конечных устройствах можно только просматривать и удалять уведомления — по умолчанию отправить их в сторону сервера не получится. Однако эту функциональность можно реализовать с помощью Gotify-CLI или другого HTTP-клиента (в том числе curl).

Одна из фишек решения — это плагины. Можно воспользоваться готовыми наработками комьюнити, чтобы настроить отправку уведомлений в Slack или интеграцию с системой мониторинга Nagios. Можно написать собственные расширения и включить их в репозиторий проекта — с разработкой поможет документация, в том числе для API.

Что касается вопросов, связанных с ИБ, то Gotify позволяет использовать обратный прокси. Его можно развернуть с помощью Nginx, HAProxy, Apache и Caddy 2. Последний вариант будет проще — в конфиге достаточно указать соответствующий порт.

В сообществе инструмент используют для решения как рабочих, так и личных задач. Например, резидент Hacker News поделился подробностями своего проекта — с помощью Gotify он реализовал передачу уведомлений из чата Zulip. Некоторые применяют инструмент для доставки оповещений с домашних камер видеонаблюдения. Хотя ряд пользователей все же отмечает определенные недостатки. Так, несмотря на оптимизации мобильный клиент быстро расходует батарею телефона.

ntfy — уведомления без регистрации и смс

Релиз ntfy состоялся в 2021 году под двойной лицензией Apache License 2.0 и GPLv2. Позже для поддержки проекта ввели платные тарифы, но инструмент по-прежнему можно развернуть на собственном сервере. В основе решения лежит принцип передачи сообщений «издатель — подписчик» (publish-subscribe pattern). В этом случае сообщения делятся на классы и не содержат сведений о получателях (подписчиках). При этом подписчики взаимодействуют с одним или несколькими классами сообщений и абстрагированы от конкретных отправителей (издателей).

Для рассылки оповещений предусмотрено два способа: с помощью PUT- или POST-запросов, а также CLI. CLI поддерживает Windows, macOS, Linux и его дистрибутивы — подробное руководство по установке для каждой из систем можно найти в документации. Чтобы обеспечить обмен данными с другими сервисами, API можно настроить либо с помощью веб-сокетов, либо в виде потока HTTP-запросов в формате JSON, SSE или TEXT. Из интересных функций программного интерфейса можно отметить фильтрацию сообщений по ID, содержанию, заголовку, тегам, приоритету.

Novu — когда нужен свой центр уведомлений

Этот инструмент для разработчиков был опубликован специалистом из Израиля в 2021 году под лицензией MIT. Сейчас проект развивается силами комьюнити, которое насчитывает почти 400 участников. Особенность архитектуры Novu заключается в том, что в ней коммуникационные задачи разделены на компоненты. За каждым из них закреплены определенные функции: от передачи сообщений до управления данными. Такое разделение упрощает обслуживание системы уведомлений и ее масштабирование.

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

Фотография: Tim Mossholder / Unsplash.com

Фотография: Tim Mossholder / Unsplash.com

Интересно, что решение предоставляет единый API, благодаря которому можно построить собственный центр уведомлений для работы с разными каналами коммуникации: SMS, чаты, почта, пуш-уведомления. Однако стоит заметить, что инструмент поддерживает базу данных MongoDB и Redis, чего может быть недостаточно для некоторых категорий пользователей.

UnifiedPush — когда нужен альтернативный протокол

Это — протокол для отправки пуш-уведомлений на Android. Он вышел в 2021 году по лицензии Apache-2.0. Приложения, которые поддерживают UnifiedPush, могут получать все уведомления через специальный дистрибьютор, поддерживающий единственное подключение с сервером. В качестве дистрибьютора можно выбрать уже упомянутый ntfy, NextPush, Conversations и другие сервисы, а также написать собственный.

В сообществе надеются на рост числа клиентов, поддерживающих протокол. Сейчас их более двадцати, среди них — приложения для серверов Matrix и децентрализованной соцсети Mastodon. Если UnifiedPush получит достаточно широкое распространение, то и разработчики станут охотнее его использовать.

Apprise — легковесный и доступный

Apprise — это библиотека Python, позволяющая рассылать оповещения по электронной почте, SMS и даже через Discord. Автор — разработчик из Канады, который выпустил проект в 2018 году под лицензией BSD 2-Clause. Он также написал приложение для управления домом Home Assistant, которое интегрируется с Apprise по API.

Решение выступает как прокси-сервер и позволяет легко управлять сервисами по доставке оповещений. Для подключения приложения к библиотеке достаточно прописать схему и конфигурацию — в общем виде она выглядит так:

schema://credentials/? optional_configuration

Например, для Discord это может быть discord://webhook_id/webhook_token, для Gotify — gotify://hostname/token. Полный список поддерживаемых сервисов и примеров их настроек есть в репозитории на GitHub.

Сами уведомления можно отправлять с помощью CLI или конфигурационных файлов в формате YAML и TEXT. Сообщения могут приходить в формате MARKDOWN, HTML и TEXT.

Что касается API, он позволяет управлять группами получателей с помощью тегов, например, devops, admin, family. Основное преимущество программного интерфейса — легковесность, которая достигается отсутствием SSL-шифрования и дополнительных зависимостей. Еще больше о возможностях API — в документации.

Из других интересных функций решения стоит отметить, что все сообщения отправляются асинхронно, чтобы обеспечить быстрый отклик. Плюс — инструмент автоматически дробит объемные уведомления на более мелкие, чтобы количество знаков не превышало ограничения платформы — например, 1024 символа для сообщения в Telegram с вложенными медиафайлами. Еще библиотека совместима с легаси-системами, такими как CentOS 6+.

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

Дополнительное чтение

Построить топологию и проверить отказоустойчивость: подборка open source решений для эмуляции сетей. В статье разбираем Containerlab, Mininet, Kathará, IMUNES, CORE, Toxiproxy и Cloonix — инструменты, позволяющие строить виртуальные сетевые лаборатории, моделировать топологии на базе контейнеров или ВМ, проверять отказоустойчивость и проводить тестирование сетевого ПО.

Pet-проекты и решения от open source организаций: подборка открытых инструментов для сетевого мониторинга. Рассматриваем возможности пяти решений: Sniffnet, Leaf Node Monitoring, Portmaster, HertzBeat и Gyeeta. Они позволяют получать данные о доменных именах и провайдерах хостов, проверять работу сайтов и серверов, отслеживать активность приложений, а также просматривать аналитику по различным протоколам.

© Habrahabr.ru