自托管推送服务 Ntfy —— 零成本搭建个人通知系统
自托管通知服务 | 零成本
自托管推送服务 Ntfy —— 零成本搭建个人通知系统
不想依赖第三方推送服务?用自己的服务器搭建一个 ntfy,轻量、免费、可自持。
为什么选择 Ntfy
市面上推送服务繁多,但大多需要注册账号、付费订阅或依赖第三方通道。ntfy (ntfy.sh) 提供了一个轻量级的替代方案:
- 零依赖:一个二进制文件即可运行
- HTTP 协议:
curl -d "消息" http://服务器/主题即可推送 - 多端支持:手机 App、浏览器推送、Web UI
- 自持数据:SQLite 本地存储,不依赖任何云服务
服务器部署
环境要求
- Linux 服务器(ARM64 / amd64 均可)
- Docker 或直接运行二进制
- 网络可访问 GitHub(用于下载二进制)
方式一:二进制直接运行(推荐)
# 下载 ntfy 二进制(以 ARM64 为例)
curl -fsSL https://github.com/binwiederhier/ntfy/releases/download/v2.28.0/ntfy_2.28.0_linux_arm64.tar.gz -o /tmp/ntfy.tar.gz
tar xzf /tmp/ntfy.tar.gz -C /tmp/
cp /tmp/ntfy_2.28.0_linux_arm64/ntfy /usr/local/bin/ntfy
chmod +x /usr/local/bin/ntfy
方式二:Docker 部署
# docker-compose.yml
services:
ntfy:
build:
context: .
dockerfile: Dockerfile
container_name: ntfy
command: [serve]
ports:
- "80:80"
- "8080:8080"
volumes:
- ntfy_data:/data
- ./server.yml:/etc/ntfy/server.yml:ro
restart: unless-stopped
配置文件
# server.yml
listen: 0.0.0.0:80
db-type: sqlite
db-path: /var/lib/ntfy/ntfy.db
log-level: info
web-root: /
cache-duration: 60s
cache-max-messages: 20
配置项说明:
| 参数 | 说明 |
|---|---|
listen | 监听地址和端口 |
db-type | 数据库类型(sqlite/boltdb) |
web-root | Web UI 根路径 |
cache-max-messages | 每个主题缓存消息数 |
使用方法
命令行推送
# 基础推送
curl -d "消息内容" http://10.126.126.5/主题名
# 带标题和优先级
curl -d "磁盘不足" -H "Title: 告警" -H "Priority: 5" http://10.126.126.5/alert
# 发布到多个主题
curl -d "备份完成" http://10.126.126.5/backup http://10.126.126.5/notify
手机端订阅
- 下载 ntfy App(Android / iOS)
- 添加服务器地址:
http://10.126.126.5 - 订阅任意主题即可收到推送
Web UI
浏览器打开 http://10.126.126.5/,可直接订阅和查看历史消息。
服务管理
使用 systemd 管理服务,确保开机自启和自动重启:
# 创建 systemd 服务文件
cat > /etc/systemd/system/ntfy.service << 'EOF'
[Unit]
Description=ntfy push notification server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ntfy serve -c /etc/ntfy/server.yml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable ntfy
systemctl start ntfy
常用命令:
systemctl status ntfy # 查看状态
systemctl restart ntfy # 重启服务
systemctl stop ntfy # 停止服务
journalctl -u ntfy -f # 实时查看日志
推送优先级
ntfy 支持 1-5 级优先级,用于区分消息的紧急程度:
| 优先级 | 说明 |
|---|---|
| 1 | 最低优先级 |
| 3 | 默认优先级 |
| 5 | 最高优先级(通知会打断静音模式) |
实际应用场景
- 服务器监控:CPU/内存异常时自动推送
- 备份提醒:定时任务完成后通知结果
- CI/CD 通知:构建状态实时推送
- 家庭自动化:IoT 设备状态变更通知