Notification Server

Notification Server 通过 WebSocket 协议与 Seafile 客户端及 Web 界面保持双向连接,使文件和资料库的状态变化能够及时推送给用户。
在未启用通知服务器时,客户端需要定期轮询 Seafile 服务器,才能获取资料库更新、文件锁定状态和子目录权限等变化。使用 Notification Server 可以减少轮询延迟及相应的服务器开销。例如,在 Web 界面打开目录后,文件锁定状态发生变化时,用户无需依赖手动刷新页面获取最新状态。
支持的通知类型
Notification Server 支持以下状态变化通知:
  1. 资料库内容更新。
  2. 资料库中文件的锁定状态变化。
  3. 资料库中目录权限变化。
单节点 Docker 部署
适用于 Seafile 14.0 和 13.0 的社区版及专业版单节点 Docker 部署。通知服务器以独立容器运行,与 Seafile 使用同一个 Docker Compose 项目和网络,并由 Caddy 提供反向代理。
以下示例假设 Seafile 的 Docker Compose 配置文件位于 /opt/seafile 。如果使用了其他部署目录,请相应调整路径。
1. 下载通知服务器配置文件
进入 Seafile 的 Docker Compose 目录:
            
                
                
cd /opt/seafile
Seafile 14.0:
            
                
                
wget -O notification-server.yml https://manual.seafile.com/14.0/repo/docker/notification-server.yml
Seafile 13.0:
            
                
                
wget -O notification-server.yml https://manual.seafile.com/13.0/repo/docker/notification-server.yml
请选择与已安装的 Seafile 大版本一致的配置文件。
2. 修改 .env
编辑 /opt/seafile/.env :
            
                
                
nano /opt/seafile/.env
在 COMPOSE_FILE 中加入 notification-server.yml ,同时保留原有的其他组件。例如:
            
                
                
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml,notification-server.yml'
如果已启用 SeaSearch、元数据服务器等其他组件,仍需在 COMPOSE_FILE 中保留对应的 YAML 文件。各文件名之间使用逗号分隔。
启用通知服务:
            
                
                
ENABLE_NOTIFICATION_SERVER=true
通知服务还涉及以下两个 URL:
变量名
用途
同一 Compose 项目中的配置
NOTIFICATION_SERVER_URL
浏览器、客户端连接通知服务器所使用的公开地址
默认使用 Seafile 域名下的 /notification 路径;如果公开访问地址不同,需要修改
INNER_NOTIFICATION_SERVER_URL
Seafile 服务端连接通知服务器所使用的内部地址
保持默认 http://notification-server:8083
例如,当 Seafile 的公开地址为 https://seafile.example.com 时,通知服务的公开地址通常为:
            
                
                
NOTIFICATION_SERVER_URL=https://seafile.example.com/notification
使用默认 Caddy 代理和域名配置时,可以保留模板生成的默认公开地址。 同一 Compose 项目内不要把 INNER_NOTIFICATION_SERVER_URL 改成 127.0.0.1 :容器中的 127.0.0.1 指向该容器自身,而不是通知服务器容器。
3. 启动服务
在 /opt/seafile 目录执行:
            
                
                
docker compose config --quiet
docker compose down
docker compose up -d
docker compose down 会暂时停止当前 Compose 项目的服务,请安排在合适的维护时间执行。
4. 检查运行状态
查看容器:
            
                
                
docker compose ps
docker compose logs -f notification-server
如使用默认 Caddy 反向代理,可在浏览器中打开:
            
                
                
https://seafile.example.com/notification/ping
请将示例域名及 https 协议替换为实际配置。正常情况下返回:
            
                
                
{"ret": "pong"}
也可以使用 curl :
            
                
                
curl -i https://seafile.example.com/notification/ping
端口说明: 默认的单节点 notification-server.yml 未将容器的 8083 端口映射到宿主机。因此,在宿主机直接访问 http://127.0.0.1:8083/ping 通常不会成功,应优先通过已配置的反向代理地址检查。只有专门配置了端口映射时,才可通过宿主机相应地址及端口直接访问。
兼容的客户端
Notification Server 支持以下客户端版本:
客户端
最低兼容版本
SeaDrive 客户端
3.0.1
Seafile 同步客户端
8.0.11
客户端成功连接通知服务器后, seafile.log 或 seadrive.log 中可能出现如下日志:
            
                
                
Notification server is enabled on the remote server xxxx
在 Seafile 集群中使用 Notification Server
Notification Server 在专业版中没有额外的专属功能,其通知机制与社区版相同。对于 Seafile 集群,应在一个节点或独立服务器上运行通知服务器,并通过负载均衡器将相应的 HTTP 和 WebSocket 请求转发到该服务。
以下示例采用 独立 Docker Compose 部署 ,通知服务器与 Seafile 主服务使用不同的 Compose 项目。
1. 下载独立部署配置
在运行 Notification Server 的主机上创建工作目录:
            
                
                
mkdir -p /opt/notification-server
cd /opt/notification-server
Seafile 14.0:
            
                
                
wget -O notification-server.yml https://manual.seafile.com/14.0/repo/docker/notification-server/notification-server.yml
wget -O .env https://manual.seafile.com/14.0/repo/docker/notification-server/env
Seafile 13.0:
            
                
                
wget -O notification-server.yml https://manual.seafile.com/13.0/repo/docker/notification-server/notification-server.yml
wget -O .env https://manual.seafile.com/13.0/repo/docker/notification-server/env
2. 配置独立服务器的 .env
编辑 /opt/notification-server/.env ,根据实际环境修改下列变量:
变量名
说明
COMPOSE_FILE
保持 notification-server.yml
SEAFILE_MYSQL_DB_HOST
Seafile 所使用的 MySQL 数据库主机地址
SEAFILE_MYSQL_DB_PORT
MySQL 端口,默认 3306 ,非默认端口时设置
SEAFILE_MYSQL_DB_USER
Seafile 数据库用户名,通常为 seafile
SEAFILE_MYSQL_DB_PASSWORD
Seafile 数据库用户密码
JWT_PRIVATE_KEY
必须与 Seafile 的 .env 中配置的值一致
SEAFILE_SERVER_HOSTNAME
Seafile 对外使用的域名或主机名
SEAFILE_SERVER_PROTOCOL
Seafile 对外使用的协议, http 或 https
TIME_ZONE
时区,如 Asia/Shanghai
SEAFILE_VOLUME
通知服务器容器使用的持久化日志目录所对应的基础路径;按部署主机实际存储路径设置
独立部署模板还包括通知服务器镜像等变量,通常使用对应版本的默认值即可。
注意: 独立服务器必须能够访问 Seafile 使用的 MySQL 数据库。 JWT_PRIVATE_KEY 应与 Seafile 完全一致;不要为通知服务器另行生成不同的密钥。
3. 启动独立 Notification Server
            
                
                
cd /opt/notification-server
docker compose config --quiet
docker compose up -d
检查状态及日志:
            
                
                
docker compose ps
docker compose logs -f notification-server
独立部署模板默认将宿主机 8083 端口映射到容器的 8083 端口。可在能够访问通知服务器的主机上进行检查:
            
                
                
curl http://<notification-server-host>:8083/ping
预期返回:
            
                
                
{"ret": "pong"}
请通过防火墙、安全组等方式限制 8083 端口的访问来源,只允许 Seafile 服务端及负载均衡器等必要主机访问,不建议直接向公网开放该端口。
4. 配置 Seafile 服务端
在部署 Seafile 的主机上修改其 .env 文件:
            
                
                
ENABLE_NOTIFICATION_SERVER=true
NOTIFICATION_SERVER_URL=https://seafile.example.com/notification
INNER_NOTIFICATION_SERVER_URL=http://192.168.0.83:8083
请将示例地址替换为实际地址:
  • NOTIFICATION_SERVER_URL 是客户端和浏览器通过负载均衡器访问的公开地址。
  • INNER_NOTIFICATION_SERVER_URL 是 Seafile 服务端直接访问通知服务器的内部地址,应填写 Seafile 容器实际可访问的主机名或 IP 和端口。
修改完成后,在 Seafile 的 Compose 目录中重新加载服务:
            
                
                
cd /opt/seafile
docker compose up -d
5. 配置负载均衡器
负载均衡器应满足以下转发要求:
  1. 将 /notification/ping 的 HTTP 请求转发至 Notification Server。
  2. 将以 /notification 开头的 WebSocket 请求转发至 Notification Server,并支持 HTTP 协议升级。
  3. 其他 Seafile 请求继续转发至正常的 Seafile 后端。
下面以 HAProxy 2.0 或更高版本为例。请将后端 IP 地址替换为实际地址,并将以下配置合并到现有的 HAProxy 配置中,避免与已有的 frontend 、 backend 名称及监听端口冲突。
            
                
                
# /etc/haproxy/haproxy.cfg 中的路由示例(HTTP)
frontend seafile_http
bind *:80
mode http
option forwardfor
acl notification_ping path -i /notification/ping
acl notification_path path_beg -i /notification
use_backend notification_nodes if notification_ping
use_backend notification_nodes if notification_path
default_backend seafile_nodes
backend seafile_nodes
mode http
server seafile01 192.168.0.137:80 check
backend notification_nodes
mode http
option forwardfor
timeout tunnel 1h
server notification01 192.168.0.83:8083 check
该示例重点展示请求分流;生产环境的 HTTPS 监听、证书、健康检查和其他 Seafile 节点配置应保留原有设置。如果负载均衡器对 URL 路径前缀有重写要求,还需确保 /notification/ping 和 WebSocket 实际请求路径能被后端正确识别。
完成修改后,先验证 HAProxy 配置,再按实际部署方式重新加载 HAProxy:
            
                
                
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
最后通过公开地址检查:
            
                
                
curl -i https://seafile.example.com/notification/ping
若返回 {"ret":"pong"} ,说明通知服务器的 HTTP 检查接口已可以通过代理访问;WebSocket 连接还需结合浏览器开发者工具或客户端日志确认。
常见问题
通知服务器容器没有启动
在相应的 Compose 工作目录执行:
            
                
                
docker compose ps
docker compose logs --tail=100 notification-server
检查 .env 中的数据库连接配置、 JWT_PRIVATE_KEY 及所引用的 YAML 文件是否正确。使用独立部署时,重点确认数据库主机可以从通知服务器访问。
/notification/ping 无法访问
先确认通知服务器正在运行,再依次检查域名、协议、反向代理规则和防火墙配置。单节点集成部署通常通过 Caddy 访问通知接口,不要求宿主机监听 8083 端口。
/notification/ping 正常,但没有实时通知
HTTP 检查接口正常不等于 WebSocket 一定能够连接。请检查反向代理是否允许 WebSocket Upgrade, NOTIFICATION_SERVER_URL 是否可从用户设备访问,以及客户端版本是否满足要求。集群部署还需要确认 Seafile 服务端能访问 INNER_NOTIFICATION_SERVER_URL 。