Notification Server 通过 WebSocket 协议与 Seafile 客户端及 Web 界面保持双向连接,使文件和资料库的状态变化能够及时推送给用户。
在未启用通知服务器时,客户端需要定期轮询 Seafile 服务器,才能获取资料库更新、文件锁定状态和子目录权限等变化。使用 Notification Server 可以减少轮询延迟及相应的服务器开销。例如,在 Web 界面打开目录后,文件锁定状态发生变化时,用户无需依赖手动刷新页面获取最新状态。
支持的通知类型
Notification Server 支持以下状态变化通知:
-
资料库内容更新。
-
资料库中文件的锁定状态变化。
-
资料库中目录权限变化。
单节点 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. 配置负载均衡器
负载均衡器应满足以下转发要求:
-
将 /notification/ping 的 HTTP 请求转发至 Notification Server。
-
将以 /notification 开头的 WebSocket 请求转发至 Notification Server,并支持 HTTP 协议升级。
-
其他 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
。