
icewind1991/notify_pushnotify_push是为Nextcloud客户端提供更新通知的应用,旨在解决客户端需定期检查服务器文件变更导致的服务器负载过高问题。通过服务器主动推送更新通知,可大幅减少客户端检查频率,同时客户端仍需定期检查(频率可降低),通知基于“尽力而为”原则,可能存在遗漏或误发情况。
config.php或环境变量配置,确保配置同步适用于Nextcloud服务器管理员,尤其在客户端数量较多、频繁的更新检查导致服务器负载过高的场景,可优化服务器性能,提升文件同步体验。
部署需完成三个核心步骤:设置推送服务器、配置反向代理、配置Nextcloud应用。
设置服务
推送服务器需作为后台守护进程运行,推荐通过systemd服务管理。创建服务文件/etc/systemd/system/notify_push.service,内容如下:
ini[Unit] Description = Push daemon for Nextcloud clients [Service] Environment = PORT=3030 # 若该端口已占用,可修改为其他端口 ExecStart = /path/to/push/binary/notify_push /path/to/nextcloud/config/config.php [Install] WantedBy = multi-user.target
说明:需根据实际环境调整二进制文件路径(/path/to/push/binary/notify_push)和Nextcloud配置文件路径(/path/to/nextcloud/config/config.php)。
配置参数
推送服务器支持两种配置方式,推荐优先使用Nextcloud的config.php以保持配置同步:
config.php配置:自动加载Nextcloud数据库、Redis及实例URL等配置config.php时,设置以下变量(环境变量优先级高于config.php):
DATABASE_URL:Nextcloud数据库连接URL,如postgres://user:password@db_host/db_nameREDIS_URL:Redis连接URL,如redis://redis_hostNEXTCLOUD_URL:Nextcloud实例URL,如[***]端口配置:仅通过环境变量PORT设置,默认80。
启动服务
配置完成后,启动服务并设置开机自启:
bash# 启动服务 sudo systemctl start notify_push # 设置开机自启 sudo systemctl enable notify_push
强烈建议将推送服务部署在反向代理后,以处理TLS加密并避免开放新端口。可复用Nextcloud现有Web服务器(Nginx或Apache)。
Nginx配置
在Nextcloud的server块中添加以下location配置:
nginxlocation /push/ { proxy_pass http://localhost:3030/; # 若推送服务使用其他端口,需对应修改 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
说明:路径末尾斜杠必须保留。修改后重载Nginx:
bashsudo nginx -s reload
Apache配置
先启用代理模块:
bashsudo a2enmod proxy sudo a2enmod proxy_http
在Nextcloud的<VirtualHost>块中添加:
dotenvProxyPass /push/ http://localhost:3030/ ProxyPassReverse /push/ http://localhost:3030/
重启Apache生效:
bashsudo systemctl restart apache2
推送服务器和反向代理配置完成后,启用应用并设置推送服务器URL:
bash# 启用notify_push应用 occ app:enable notify_push # 设置推送服务器URL(替换为实际反向代理后的URL) occ notify_push:setup [***]
说明:应用会自动测试配置是否正确,确保推送服务可正常访问。
开发Nextcloud Web应用时,可使用@nextcloud/notify_push JavaScript库(npm地址)处理认证、连接推送服务器及监听事件。
桌面及非Web客户端接收通知的实现步骤:
[***],从响应的ocs.data.capabilities.notify_push.endpoints.websocket获取WebSocket端点。notify_file:用户文件变更notify_activity:新活动项(文件相关活动可能不触发)notify_notification:通知创建、处理或已忽略javascriptfunction discover_endpoint(nextcloud_url, user, password) { let headers = new Headers(); headers.set('Accept', 'application/json'); headers.set('OCS-APIREQUEST', 'true'); headers.set('Authorization', 'Basic ' + btoa(user + ":" + password)); return fetch(`${nextcloud_url}/ocs/v2.php/cloud/capabilities`, { method: 'GET', headers: headers, }) .then(response => response.json()) .then(json => json.ocs.data.capabilities.notify_push.endpoints.websocket); } function listen(url, user, password) { let ws = new WebSocket(url); ws.onmessage = (msg) => { console.log("收到通知:", msg); } ws.onopen = () => { ws.send(user); // 发送用户名 ws.send(password); // 发送密码 } } // 使用示例 let username = "your_username"; let password = "your_password"; let nextcloud_url = "[***]"; discover_endpoint(nextcloud_url, username, password).then((endpoint) => { console.log(`推送服务器地址: ${endpoint}`); listen(endpoint, username, password); });
开发阶段可使用测试客户端(从GitHub Actions下载),命令格式:
bashtest_client [***] 用户名 密码
说明:测试客户端用于验证推送服务是否正常工作,输出接收到的通知信息。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务