博文

自托管推送服务 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-rootWeb 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

手机端订阅

  1. 下载 ntfy App(Android / iOS)
  2. 添加服务器地址:http://10.126.126.5
  3. 订阅任意主题即可收到推送

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 设备状态变更通知

参考资源

相关阅读

← 返回博文列表