ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

自建 ntfy 推送服务器:一条 Docker 命令起服务,再补三块生产配置

2026/9/2 13:29:57 拓冰建站 浏览量
自建 ntfy 推送服务器:一条 Docker 命令起服务,再补三块生产配置 自建 ntfy 推送服务器一条 Docker 命令起服务再补三块生产配置【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfyntfy 是一个自托管的推送通知服务器任何设备向它发一条 HTTP 请求消息就会实时推送到你的手机或桌面适合把服务器告警、自动化脚本的输出送到手边。本文带你用 Docker 把 ntfy 自建服务器跑起来再讲清上生产前必做的三块配置。先选型三条路线看你是谁你的场景路线说明个人 / 家用 / 测试Docker Compose一条命令起服务配置和缓存都落在宿主机目录里生产服务器apt / rpm 系统包Debian 系和 RHEL 系都有官方包装完自带 systemd 服务开发者 / 要改代码源码编译需要 Go 环境make build全量构建make cli-linux-amd64只出二进制下面的主路径按第一条写。另外两条一句话带过系统包安装走官方 apt 仓库装完systemctl start ntfy即服务化源码路线克隆仓库git clone https://gitcode.com/GitHub_Trending/nt/ntfy后执行make cli-linux-amd64产物是带 Web 界面前的纯二进制适合调试或二次开发。主路径Docker 一步步跑起来仓库根目录自带一份 Compose 文件docker-compose.yml它把宿主机的/etc/ntfy和/var/cache/ntfy挂进容器——前者放server.yml配置后者放消息缓存。先克隆仓库拿到它克隆只是拉取代码到本地不会改动仓库本身git clone https://gitcode.com/GitHub_Trending/nt/ntfy cd ntfy docker compose up -d -p 8080-p 8080把端口映射到 8080避开常见的 80 口占用。看到容器状态为running就说明起好了。接下来用一条命令验证收发链路向test-topic发一条消息再立即订阅它curl -d 部署验证 http://localhost:8080/test-topic curl -N http://localhost:8080/test-topic/stream第二条命令挂住不返回、并立刻打印出刚才那条消息说明发布和订阅都通了。此时浏览器打开http://localhost:8080能看到 Web 订阅界面手机 App 把服务器地址指过来订阅同一主题即可收到推送。不想用 Compose 的话一条docker run -p 8080:80 -d binwiederhier/ntfy serve也能跑但它既不挂配置也不落缓存适合临时体验不适合长期使用。上生产前必做1. 消息缓存落盘重启不丢消息改/etc/ntfy/server.yml宿主机目录已被容器挂载仓库的 server/server.yml 是注释模板可作键名参考。默认配置下消息只存内存重启后since拉历史这类操作就失效了。加两行cache-file: /var/cache/ntfy/cache.db cache-duration: 72hcache-file指向 SQLite 缓存文件cache-duration决定消息保留多久。docker compose restart ntfy生效想确认缓存真的写盘重启后再执行上面的订阅命令能拉到历史消息即算成功。2. 启用 HTTPS手机 App 和 Web Push 都要求服务器走 TLS这是上生产最容易漏的一步。在同一个server.yml里加监听地址和证书路径证书可先用 Lets Encrypt 签好listen-http: :80 listen-https: :443 key-file: /etc/ntfy/ntfy.key cert-file: /etc/ntfy/ntfy.crt注意证书要放宿主机/etc/ntfy/下它会被挂进容器。改完docker compose restart ntfy然后curl -k https://localhost/healthz返回 200 即生效。3. 访问控制与限流裸奔的 ntfy 会被扫描器当成免费推送服务刷。同样改server.yml至少做两件事behind-proxy: true proxy-forwarded-header: X-Forwarded-For visitor-request-limit-burst: 20 visitor-request-limit-replenish: 5s前两项在反代Nginx/Caddy后面时必配否则所有访客都被算成一个 IP限流形同虚设后两项把单访客的发送速率压下来。更细的主题级权限按用户划分读写的 ACL用auth-file配命令工具ntfy user和ntfy access管理详见 docs/config.md。改完docker compose restart ntfy用curl -i观察返回码变化即可确认。验证与排错现象浏览器打不开http://主机:8080。排查docker compose ps看容器状态宿主机上ss -lntp | grep 8080看端口归属。处置容器没起来就看docker compose logs ntfy的报错通常是挂载目录不存在先mkdir -p /etc/ntfy /var/cache/ntfy端口被别的进程占着就换-p映射。现象服务器能收到消息手机 App 一直不弹通知。排查手机里订阅的地址是否就是服务器实际地址和端口App 是否走了自签证书会报连接错误。处置自建服务器先上 HTTPS见上节再把 App 服务器地址指过来公司/校园网环境下确认 80/443 没被代理拦掉。现象日志里大量429正常用户也被限流。排查确认是否套了反代却没配behind-proxy。处置补上behind-proxy: true和转发头配置后重启让 ntfy 按真实访客 IP 限流需要更细的速率策略可参考 docs/config.md 里的 rate limiting 一节。延伸服务器能起来之后下一件事通常是接告警源仓库里的server/templates/grafana.yml是一份现成的 Grafana 消息模板docs/integrations.md 里列了更多现成集成发测试消息也可以直接用examples/publish-python/publish.py改一下地址和主题来跑。进阶方向消息模板template-dir可以把不同来源的 JSON 统一转成好看的标题和正文如果之后要接 iOS 推送还需要配置upstream-base-url指向上游这块 docs/install.md 有完整说明。先让服务器稳定跑着配置按节拆开加每次只改一处排错会省很多时间。【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考