Seafile 14.0 和 13.0 的单节点 Docker 部署默认使用 Caddy 处理反向代理和 HTTPS。如果已有 Nginx 等反向代理服务,可以停用 Caddy,并将 Seafile 及所需扩展组件的请求转发到相应容器。
本文以
Nginx 与 Seafile Docker 部署在同一台 Linux 服务器上
为例。使用独立反向代理服务器时,请根据“反向代理部署在另一台服务器”中的说明调整端口和地址。
需要反向代理的服务
根据实际启用的服务选择配置,不需要部署下表中的所有组件。
Docker Compose 文件
服务
容器监听端口
建议的宿主机端口
WebSocket
seafile-server.yml
Seafile
80
8080(同机使用 Nginx 时)
否
seadoc.yml
SeaDoc
80
8888
是
notification-server.yml
通知服务器
8083
8083
是
collabora.yml
Collabora Online
9980
6232
按 Collabora 部署方式配置
onlyoffice.yml
OnlyOffice
80
6233
根据集成配置转发升级连接
thumbnail-server.yml
缩略图服务器
80
8084
否
上表端口适用于官方单节点集成部署。独立部署的 SeaDoc、通知服务器、Collabora 或 OnlyOffice,应以各自的部署配置为准;如果这些服务并未由 Caddy 代理,则无需为它们重复修改 Docker Compose 文件。
注意:
如果 Nginx 和 Seafile 位于同一台服务器,Nginx 通常已监听宿主机的
80
或
443
端口,因此不要再给 Seafile 容器配置
"80:80"
。下面使用
127.0.0.1:8080:80
,使 Seafile 只通过本机的
8080
端口接受 Nginx 转发的请求。
修改 Docker Compose 配置
进入 Docker Compose 配置文件所在目录:
cd /opt/seafile
编辑
seafile-server.yml
,在现有的
seafile
服务下添加
ports
,同时删除此服务中与 Caddy 有关的
labels
配置:
services:
seafile:
ports:
- "127.0.0.1:8080:80"
以上只展示
需要添加的字段
,不要用它覆盖原有的
image
、
volumes
、
environment
和
depends_on
等配置。若服务已有
ports
字段,请修改现有映射,避免重复或冲突。
如果 Docker Compose 配置中包含以下 Caddy 标签,请删除相应的
labels
配置,而不是删除整个
seafile
服务:
# 删除与 Caddy 相关的标签,例如:
# labels:
# caddy: ${SEAFILE_SERVER_HOSTNAME}
# caddy.reverse_proxy: "{{upstreams 80}}"
Seafile 社区版和专业版都按上述方式调整。专业版镜像应与当前安装版本一致:Seafile 14.0 使用
seafileltd/seafile-pro-mc:14.0-latest
,Seafile 13.0 使用
seafileltd/seafile-pro-mc:13.0-latest
。
切换反向代理不需要修改镜像版本。
如果集成了其他服务,也需要在其对应的 YAML 文件中添加端口映射,并移除属于 Caddy 的标签。例如,SeaDoc 的
seadoc
服务可以添加:
services:
seadoc:
ports:
- "127.0.0.1:8888:80"
通知服务器、OnlyOffice、缩略图服务器等组件可参照端口表添加映射。对于已经由组件自身配置发布端口的服务,请检查现有映射,不要重复添加。不要将数据库、Redis 等无需经 Web 访问的服务端口对外开放。
修改
.env
编辑
/opt/seafile/.env
,从
COMPOSE_FILE
中移除
caddy.yml
,
保留所有正在使用的其他服务文件
。
例如,当前启用了 Seafile 和 SeaDoc:
# 修改前
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml'
# 修改后
COMPOSE_FILE='seafile-server.yml,seadoc.yml'
如果还启用了通知服务器、OnlyOffice 等服务,也应保留相应 YAML 文件。不要直接把所有部署的
COMPOSE_FILE
都改成仅包含
seafile-server.yml
。
如果由 Nginx 对外提供 HTTPS,请将
.env
中的公开访问地址与实际域名及协议保持一致:
SEAFILE_SERVER_HOSTNAME=seafile.example.com
SEAFILE_SERVER_PROTOCOL=https
此处
seafile.example.com
仅为示例,请替换为实际域名。HTTPS 证书由 Nginx 管理,移除 Caddy 后不会继续由 Caddy 自动申请或续期。
配置 Nginx 反向代理
以下
location
配置应放入提供 Seafile 服务的 Nginx
server { ... }
块中。如果 Nginx 已配置 HTTPS,直接将相关
location
段添加到现有 HTTPS 站点配置即可。证书路径、
listen
、
server_name
等参数需要根据实际部署环境设置。
Seafile
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_read_timeout 36000s;
proxy_buffering off;
proxy_request_buffering off;
client_max_body_size 0;
}
其中,
proxy_pass
的
8080
应与前面设置的 Seafile 宿主机端口一致。关闭代理缓冲可避免大文件上传和下载时因代理缓冲带来的问题。
SeaDoc(可选)
如果启用了 SeaDoc,增加文档服务和 WebSocket 的转发配置:
location /sdoc-server/ {
proxy_pass http://127.0.0.1:8888/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
client_max_body_size 100m;
}
location /socket.io {
proxy_pass http://127.0.0.1:8888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
通知服务器(可选)
如果启用了通知服务器,添加:
location /notification {
proxy_pass http://127.0.0.1:8083;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
access_log /var/log/nginx/notification.access.log;
error_log /var/log/nginx/notification.error.log;
}
OnlyOffice(可选)
如果启用了 OnlyOffice,先在 Nginx 的
http { ... }
上下文
中添加以下
map
指令,不能直接放在
server { ... }
或
location { ... }
中:
map $http_x_forwarded_proto $the_scheme {
default $http_x_forwarded_proto;
"" $scheme;
}
map $http_x_forwarded_host $the_host {
default $http_x_forwarded_host;
"" $host;
}
map $http_upgrade $proxy_connection {
default upgrade;
"" close;
}
然后,在 Seafile 对应的
server { ... }
块中添加:
location /onlyofficeds/ {
proxy_pass http://127.0.0.1:6233/;
proxy_http_version 1.1;
client_max_body_size 100M;
proxy_read_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host/onlyofficeds;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
缩略图服务器(可选)
如果启用了缩略图服务器,添加:
location /thumbnail {
proxy_pass http://127.0.0.1:8084;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log /var/log/nginx/thumbnail.access.log;
error_log /var/log/nginx/thumbnail.error.log;
}
Collabora Online(可选)
如果使用 Collabora Online,请按
Collabora Online 集成指南
配置其访问地址及反向代理。集成部署时,可根据实际配置将宿主机
6232
端口转发到容器
9980
端口;不要在未确认 Collabora 访问路径和 WebSocket 设置的情况下直接套用其他组件的 Nginx 规则。
反向代理部署在另一台服务器
如果 Nginx 与 Seafile 不在同一台主机上,前面配置中的
127.0.0.1
不能直接使用。需要:
-
在 Seafile 所在主机上,将对应服务的宿主机端口绑定到能够被代理服务器访问的网卡地址。例如将 Seafile 改为 "8080:80" ,或明确绑定指定的内网 IP。
-
将 Nginx 配置中的 proxy_pass http://127.0.0.1:8080; 改为 proxy_pass http://<Seafile 内网 IP>:8080; ,其他组件依此类推。
-
使用防火墙或安全组仅允许反向代理服务器访问这些端口,不要将后端服务直接暴露给互联网。
Docker 主机与独立代理服务器之间的网络连接需要正常,且上游请求使用的协议和端口应与实际配置一致。
重启并检查服务
修改完成后,在
/opt/seafile
目录中验证 Compose 配置并重新创建容器:
cd /opt/seafile
docker compose config --quiet
docker compose down
docker compose up -d
docker compose down
会中断当前服务。请在合适的维护时间执行,确保重要配置及数据已备份;不要额外使用会删除数据卷的选项。
在 Nginx 所在的服务器上检查配置并重新加载:
sudo nginx -t
sudo systemctl reload nginx
如果系统未使用 systemd,可根据 Nginx 的安装方式执行
sudo nginx -s reload
。
检查服务运行状态:
cd /opt/seafile
docker compose ps
docker compose logs -f seafile
同机部署时,还可以检查后端端口是否有响应:
curl -I http://127.0.0.1:8080/
最后,通过配置的域名访问 Seafile,检查登录、文件上传下载,以及已启用的 SeaDoc、通知服务器、OnlyOffice 等功能。若出现
502 Bad Gateway
,请优先检查 Docker 容器状态、端口映射和 Nginx
proxy_pass
地址。