Ntfy 通知推送服务搭建教程
Ntfy(读作 notify)是一款简单的基于 HTTP 的发布/订阅通知服务。它的设计理念是尽可能简单:发送通知只需要一条 curl 命令,接收通知只需要订阅一个主题(topic)。Ntfy 支持 Android、iOS、Web 多端接收,并且无需注册账号即可使用。本文将介绍如何在搬瓦工 VPS 上自建 Ntfy 服务。
一、Ntfy 功能特点
- 极其简单:发送通知只需
curl -d "消息内容" ntfy.sh/topic,无需认证。 - 多端支持:提供 Android、iOS、Web 客户端和 PWA 支持。
- 附件支持:支持发送带附件的通知(图片、文件)。
- 操作按钮:通知中可以添加可点击的操作按钮(打开 URL、发送 HTTP 请求)。
- 定时发送:可以设置消息在指定时间发送。
- 消息缓存:离线消息会被缓存,客户端上线后自动接收。
- 访问控制:自建服务器支持用户认证和主题权限控制。
- UnifiedPush:兼容 UnifiedPush 协议,可以作为 Android 应用的推送网关。
二、环境准备
- 搬瓦工 VPS 一台,256MB 内存即可(使用优惠码 NODESEEK2026 享受 6.77% 折扣)。
- 已安装 Docker(参考 Docker 安装教程)。
三、Docker 部署
mkdir -p /opt/ntfy/{cache,etc}
cat > /opt/ntfy/docker-compose.yml <<'EOF'
version: '3.8'
services:
ntfy:
image: binwiederhier/ntfy:latest
restart: always
ports:
- "8080:80"
command: serve
environment:
TZ: Asia/Shanghai
volumes:
- /opt/ntfy/cache:/var/cache/ntfy
- /opt/ntfy/etc:/etc/ntfy
EOF
3.1 创建配置文件
cat > /opt/ntfy/etc/server.yml <<'EOF'
base-url: https://ntfy.yourdomain.com
cache-file: /var/cache/ntfy/cache.db
attachment-cache-dir: /var/cache/ntfy/attachments
attachment-total-size-limit: 1G
attachment-file-size-limit: 15M
behind-proxy: true
auth-default-access: deny-all
EOF
auth-default-access: deny-all 表示默认禁止所有访问,需要认证后才能使用。如果你希望不认证即可使用,改为 read-write。
四、启动服务
cd /opt/ntfy
docker compose up -d
4.1 创建管理员用户
docker compose exec ntfy ntfy user add --role=admin admin
按提示设置密码。
4.2 设置主题权限
# 允许所有人只读某个公开主题
docker compose exec ntfy ntfy access everyone public-alerts read-only
# 允许特定用户读写某个主题
docker compose exec ntfy ntfy access admin server-alerts read-write
五、发送通知
5.1 简单文本通知
curl -u admin:password -d "服务器磁盘使用率超过 90%" https://ntfy.yourdomain.com/server-alerts
5.2 带标题和优先级
curl -u admin:password \
-H "Title: 磁盘告警" \
-H "Priority: high" \
-H "Tags: warning" \
-d "服务器 /dev/sda1 磁盘使用率 92%" \
https://ntfy.yourdomain.com/server-alerts
5.3 带操作按钮
curl -u admin:password \
-H "Title: 新版本发布" \
-H "Actions: view, 查看详情, https://github.com/project/releases" \
-d "v2.0.0 已发布,包含重要安全更新" \
https://ntfy.yourdomain.com/server-alerts
5.4 发送图片附件
curl -u admin:password \
-H "Title: 服务器截图" \
-H "Filename: screenshot.png" \
-T /path/to/screenshot.png \
https://ntfy.yourdomain.com/server-alerts
六、配置反向代理
cat > /etc/nginx/sites-available/ntfy <<'EOF'
server {
listen 80;
server_name ntfy.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
}
client_max_body_size 20m;
}
EOF
ln -sf /etc/nginx/sites-available/ntfy /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d ntfy.yourdomain.com
七、客户端配置
在 Android(Google Play/F-Droid)或 iOS(App Store)下载 Ntfy 客户端。添加你的自建服务器地址,订阅感兴趣的主题即可接收推送通知。也可以直接在浏览器中访问 https://ntfy.yourdomain.com 使用 Web 版本。
八、在脚本中集成
#!/bin/bash
# 通用通知函数
notify() {
curl -s -u admin:password \
-H "Title: $1" \
-H "Priority: ${3:-default}" \
-d "$2" \
https://ntfy.yourdomain.com/server-alerts
}
# 使用示例
notify "备份完成" "数据库备份成功,文件大小 1.2GB" "low"
notify "服务异常" "Nginx 服务已停止" "urgent"
九、数据备份
tar czf /opt/ntfy/backup_$(date +%Y%m%d).tar.gz /opt/ntfy/cache /opt/ntfy/etc
总结
Ntfy 是最简单易用的自托管推送通知服务,一条 curl 命令即可发送通知。如果你需要更结构化的消息管理,可以参考 Gotify 推送服务。选购搬瓦工 VPS 请访问 bwh81.net,使用优惠码 NODESEEK2026 享受 6.77% 折扣。