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