Ntfy - self-hosted сервер пуш-уведомлений: он принимает сообщения по HTTP и доставляет их на ваши устройства. Публикация в топик простым запросом curl -d "текст" https://домен/топик, подписка через веб-UI, мобильные приложения iOS и Android, CLI или напрямую по SSE и WebSocket. Это легкий хаб уведомлений: скрипт, мониторинг или сервер шлет curl-ом - и на телефоне всплывает пуш, без Pushover, Pushbullet и без Firebase.

Работает по модели pub-sub через HTTP: вы придумываете имя топика, публикуете в него и подписываетесь с любого устройства. Есть приоритеты 1-5, теги и эмодзи, заголовки, click-action и кнопки, вложения и иконки, отложенная доставка, авторизация и ACL, публикация по e-mail, вебхуки, UnifiedPush для degoogled-Android и звонки через Twilio.

Карта разворачивает ntfy в два контейнера: binwiederhier/ntfy:v2.26.3 (сервер, слушает только localhost) и Caddy, который выпускает Let's Encrypt и открывает доступ по HTTPS. Стек предельно легкий - сам ntfy держит около 16.66 МиБ RAM, весь стек с Caddy около 32 МиБ.

Что внутри

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

Как войти

  1. Адрес формируется из IP сервера: замените точки на дефисы и добавьте .fatmetal.net. Пример: IP 45.15.159.10 -> https://45-15-159-10.fatmetal.net/.
  2. Публикация уведомления - простым curl-ом в топик, при желании с заголовками: curl -H "Title: Тест" -H "Priority: 4" -H "Tags: rocket" -d "привет" https://ВАШ-АДРЕС/мой-топик.
  3. Подписка - откройте адрес в браузере (веб-UI) или добавьте топик в мобильном приложении ntfy (iOS/Android), укажите свой сервер и имя топика.
  4. ВНИМАНИЕ: топики по умолчанию ОТКРЫТЫЕ (auth-default-access: read-write) - кто знает имя топика, тот читает и пишет. Чтобы закрыть: заведите пользователя docker exec -it ntfy ntfy user add --role=admin admin, поставьте в /opt/ntfy/etc/server.yml auth-default-access: "deny-all" и перезапустите (docker compose up -d), затем раздайте явные права через ACL.

Свой домен

Направьте A или CNAME на этот сервер, пропишите домен в /etc/ntfy-mp/params.env (DOMAIN=ваш-домен) и перезапустите install.sh (или Caddy) - выпустится Let's Encrypt, а base-url подтянется под ваш домен. Полная памятка и адрес - на сервере: cat /root/ntfy-credentials.txt.

Требования

Ubuntu 24.04, открытые порты 80/443. Один из самых легких сервисов: сам ntfy держит около 16.66 МиБ RAM, весь стек с Caddy - около 32 МиБ. Хватает младшего тарифа CPU2-RAM4-DISK50. Критично: топики по умолчанию открытые (закройте через ACL, если нужен приватный сервер) и делайте бэкап каталогов /opt/ntfy/cache и /opt/ntfy/lib (SQLite).

Подробный разбор с замерами