Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted

ntfyv2.30.0

Приемник алертов и уведомлений: события из скриптов, мониторинга и бэкапов приходят пушем на телефон, подписка по темам, публикация одной командой - замена Pushover и Firebase.

Ntfy превращает сервер в личный приемник уведомлений: любая система, умеющая отправить HTTP-запрос, шлет сообщение в тему, и оно приходит пушем на телефон или в браузер. Тексты алертов остаются на вашем сервере, а не проходят через чужой сервис уведомлений; публикация - одной командой, без SDK и регистрации приложений. Приоритеты, теги, кнопки, вложения и отложенная доставка оформляют событие, а темы дают разным источникам свои каналы.

После создания сервера ntfy разворачивается сам: рецепт поднимает сервер и Caddy с автоматическим TLS, заводит администратора паролем сервера и закрывает сервер от посторонних, адрес формируется из IP. Вручную настраивать ничего не нужно; первый старт занимает около минуты.

Что внутри

ntfy 2.30.0
сервер уведомлений, REST API и веб-интерфейс в одном процессе (Go), слушает только 127.0.0.1:2586.
SQLite
кеш сообщений и база пользователей в каталогах /opt/ntfy/cache и /opt/ntfy/lib.
Caddy
reverse-proxy и авто-TLS (Let's Encrypt), наружу открыты только 80 и 443.

Безопасность

  • Сервер закрыт по умолчаниюбез учетной записи ни читать, ни писать нельзя (auth-default-access: deny-all); открытый сервер уведомлений за несколько дней находят посторонние и начинают слать через него спам.
  • Администратор заведен установкойвход паролем сервера, регистрация новых пользователей выключена.
  • fail2ban на SSHбанит IP после серии неудачных попыток входа по SSH.
  • HTTPS с автопродлениемLet's Encrypt на адрес сервера или ваш домен; сам ntfy наружу порт не открывает.
  • Закрепленная версия образарецепт ставит конкретный тег v2.30.0, а не latest.

Как войти

  1. Адрес формируется из IP сервера: замените точки на дефисы и добавьте .fatmetal.net. Пример: IP 45.15.159.10 -> https://45-15-159-10.fatmetal.net/.

  2. Сервер закрыт по умолчанию: администратор admin заведен установкой, пароль - тот же, что для входа по SSH (пароль сервера). Регистрация новых пользователей выключена.

  3. Публикация: curl -u admin:<пароль> -H "Title: Тест" -H "Priority: 4" -d "привет" https://ВАШ-АДРЕС/server-alerts.

  4. Подписка: откройте адрес в браузере (веб-интерфейс) или добавьте тему в мобильном приложении ntfy (iOS/Android), войдите под admin.

  5. Нужна тема без пароля для анонимных curl-скриптов - разрешите ее явно: ntfy access everyone server-alerts read-write (полная команда - в файле кредов).

Важно

Имя темы - латиница, цифры, дефис и подчеркивание: кириллицу сервер не принимает (ответ 404). Тему придумываете сами, это часть адреса.

Получатель на iPhone получает уведомления с задержкой до нескольких часов: iOS не разрешает приложению держать постоянное соединение. Мгновенная доставка возможна только пересылкой через публичный ntfy.sh (upstream-base-url), это компромисс между приватностью и скоростью.

Данные лежат в SQLite в каталогах /opt/ntfy/cache и /opt/ntfy/lib - бэкапьте оба.

Свой домен

  1. Направьте A-запись своего домена на IP этого сервера.
  2. Убедитесь, что домен указывает на сервер: ping ваш-домен показывает IP сервера. Пока не показывает - подождите: DNS обновляется от нескольких минут до часа.
  3. В /etc/ntfy-mp/params.env задайте DOMAIN=ваш-домен и выполните bash /opt/ntfy/install.sh - Caddy перевыпустит сертификат под ваш домен.
  4. Откройте https://ваш-домен и войдите как раньше: admin и пароль сервера не меняются.

Требования

Тариф CPU2-RAM4-DISK50: в простое весь стек держит около 24 МиБ, сам ntfy - около 12 МиБ, запас по памяти больше чем стократный. Упирается продукт не в память, а в диск: растут только кеш сообщений и вложения, у обоих настраиваемый срок хранения.

Подробный разбор с замерами в Базе знаний →
ntfy450 ₽/месЗапустить →