Перейти к содержанию

Apprise API

Apprise - это библиотека позволяющая унифицировать и мультиплексировать отправку уведомлений.

Схема работы проста - вы отправляете уведомление в Apprise, а оно разлетается в Telegram, Discord, ntfy.sh и так далее.

Apprise API - небольшое веб приложение, которое позволяет управлять конфигурациями схем уведомлений и отправлять через него или его API уведомления.

Установка и запуск через docker-compose

Я использую образ от linuxserver.io, подробнее про него можно почитать здесь.

  1. Заранее создаем папочку config, в котором будут храниться наши конфиги - mkdir config
  2. Вводим id <ваш пользователь>. Запоминаем группу и id пользователя. Это нужно для правильной работы с файлами из контейнера.
  3. Заполняем docker-compose.yml
docker-compose.yml
services:
    apprise-api:
        image: lscr.io/linuxserver/apprise-api:latest
        container_name: apprise-api
        environment:
        - TZ=Europe/Moscow
        - APPRISE_STATEFUL_MODE=simple # указываем, что мы хотим хранить конфиги на диске
        - PUID=1000 # сюда указываем ID пользователя
        - PGID=1000 # сюда указываем ID группы
        volumes:
        - ./config:/config
        ports:
        - 8010:8000 # 8010 - наш порт, по которому мы сможем получить доступ к приложению
        restart: unless-stopped
  1. Запускаем: docker compose up -d

Прячем за nginx и ограничиваем доступ

Не обязательный пункт, но лучше спрятать его за nginx и запретить менять/создавать конфиги кому попало. Мой конфиг выглядит как-то так:

/etc/nginx/conf.d/apprise.conf
upstream apprise {
    server localhost:8010;
}

server {
    server_name apprise.kiriha.ru;
    listen 443 ssl http2;

    include /etc/nginx/snippets/ssl.conf; # тут мой инклуд с ssl сертификатами

    # Переопределяем robots.txt, в нём запрещаем индексирование
    location = /robots.txt {
        add_header  Content-Type  text/plain;
        return 200 "User-agent: *\nDisallow: /\n";
    }

    location @apprise {
        proxy_set_header Host apprise.kiriha.ru; # сетим хедер, нужен для корректного отображения имени хоста в панели
        add_header X-Robots-Tag "noindex, follow" always; # на всякий добавляем заголовок с запретом на индексирование
        proxy_pass http://apprise;
    }

    location / {
        allow 192.168.73.129; # Ваша подсеть/ip с которого необходим доступ в панель, если не нужен - убирайте
        deny all; # если хотите оставить доступ для всех - убирайте
        try_files $uri @apprise;

        location ~ /notify/(.*)$ {
            allow all; # доступ к отправке нотификаций разрешаем для всех, иначе прописываем руками подсети/адреса которым разрешено отправлять уведомления
            try_files $uri @apprise;
        }

    }
}

Как с этим работать

Самая важная сущность здесь - это KEY.

Вот этот KEY вы должны НИКОМУ НЕ ПОКАЗЫВАТЬ, ибо через него мы как раз и отправляем уведомления, так как авторизации никакой нету (но если очень хочется, можно настроить basic-авторизацию).

Создание базовой конфигурации

Рассмотрю создание базовой конфигурации (она покрывает почти 90% кейсов), более сложные варианты с поддержкой тегов ищите в документации.

Заходим по адресу нашей панели нажимаем кнопку "New Configuration" и попадаем на страницу управления конфигурации.
Всё что дальше https://ВАШ_ИНСТАНС/cfg/ это и есть ваш KEY, запомните его.

Можно вставить своё значение и обновить страницу - так ключи будет проще запоминать.

Нажимаем "Configuration" и описываем куда мы будем посылать алерты.

Как настраивать для того или иного провайдера - читать здесь. Находим нужного нам провайдера, формируем URI и сохраняем.

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

tgram://mytoken/1821226127612/
discord://212213213/mywebhook

Сохраняем конфигурацию.

Отправка уведомления через cURL

После создания и сохранения конфигурации, мы можем отправить уведомление, сделаем это через curl:

curl -X POST -F "body=Test Message" https://ВАШ_ИНСТАНС/notify/СЮДА_ВСТАВЛЯТЬ_СВОЙ_КЛЮЧ

Если всё настроили правильно - то вы сможете увидеть свои уведомления, а в терминале будет выведен лог отправки.