ntfy — простой сервер push-уведомлений: curl на URL — и пуш на телефон. Подходит для бэкапов, Fail2ban, Uptime Kuma и cron-задач.
mkdir -p ~/ntfy/{cache,etc}
cd ~/ntfy
cat > etc/server.yml << 'EOF'
base-url: "https://ntfy.yourdomain"
cache-file: "/var/cache/ntfy/cache.db"
attachment-cache-dir: "/var/cache/ntfy/attachments"
auth-file: "/var/lib/ntfy/user.db"
auth-default-access: "deny-all"
behind-proxy: true
EOF
deny-all — без анонимной публикации; пользователей создадите после старта.
docker-compose.ymlservices:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
restart: unless-stopped
command: serve
environment:
TZ: Europe/Moscow
volumes:
- ./cache:/var/cache/ntfy
- ./etc:/etc/ntfy
- ntfy_lib:/var/lib/ntfy
labels:
- traefik.enable=true
- traefik.http.middlewares.ntfy_https.redirectscheme.scheme=https
- traefik.http.routers.ntfy.entrypoints=web
- traefik.http.routers.ntfy.middlewares=ntfy_https@docker
- traefik.http.routers.ntfy.rule=Host(`ntfy.yourdomain`)
- traefik.http.routers.ntfy_https.entrypoints=websecure
- traefik.http.routers.ntfy_https.rule=Host(`ntfy.yourdomain`)
- traefik.http.routers.ntfy_https.tls=true
- traefik.http.routers.ntfy_https.tls.certresolver=le
- traefik.http.services.ntfy.loadbalancer.server.port=80
networks:
- traefik_network
volumes:
ntfy_lib:
networks:
traefik_network:
external: true
docker compose up -d
docker exec -it ntfy ntfy user add --role=admin youruser
Установите приложение ntfy, подпишитесь на топик, например homelab-alerts (с логином).
В веб-интерфейсе управления пользователями нет. Обычных людей и доступ к топику задаёте в CLI:
docker exec ntfy ntfy user list
docker exec -it ntfy ntfy user add username
docker exec ntfy ntfy access username homelab-alerts read-write
docker exec ntfy ntfy user del username
read-only вместо read-write — только получать пуши. Админ видит все топики; обычный пользователь — только те, куда выдали access.
Топик как сущность в базе не создаётся: достаточно имени и ACL. Новый канал тому же человеку:
docker exec ntfy ntfy access username backups read-write
docker exec ntfy ntfy access
После этого он подписывается в приложении на backups. Закрыть топик: ntfy access username backups deny.
curl -u 'youruser:password' \
-H "Title: Backup OK" \
-d "Ночной rclone завершился успешно" \
https://ntfy.yourdomain/homelab-alerts
auth-default-access: write-only на публичном сервере без необходимости.ntfy_lib и каталог ./etc.Итог: лёгкие push-алерты для всего домашнего сервера через HTTPS.