Seafile 14.0 和 13.0 的 Docker 部署可以连接已有的 MySQL 服务器,无需再启动 Docker Compose 自带的数据库容器。社区版和专业版均可使用以下方法。
本文以
/opt/seafile
为 Docker Compose 配置文件目录,以
192.168.0.2:3306
为已有 MySQL 服务器地址。请根据实际环境替换示例值。
注意: 以下步骤用于 新部署 的 Seafile 连接已有 MySQL 服务。如果要把已经运行的 Seafile 从一个数据库服务器迁移到另一个数据库服务器,应先备份数据库并制定迁移方案,不要仅修改连接地址。
准备 MySQL 服务器
请先确认:
-
MySQL 服务器已启动,且 Seafile Docker 所在服务器可以访问其地址和端口(通常是 3306 )。
-
MySQL 服务器允许来自 Seafile 部署服务器的连接,防火墙和 MySQL 用户的访问权限已正确设置。
-
首次部署时可以使用具备初始化所需权限的 MySQL 管理员凭据;完成初始化后,Seafile 使用指定的数据库用户连接数据库。
-
如已有重要数据库,请先备份,避免初始化时与现有数据库名称发生冲突。
Seafile 默认使用以下三个数据库名称:
ccnet_db
、
seafile_db
和
seahub_db
。如需自定义名称,可修改
.env
中对应的
SEAFILE_MYSQL_DB_CCNET_DB_NAME
、
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME
和
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME
。
1. 移除 Docker Compose 自带的数据库服务
进入存放
.env
和 Compose 配置文件的目录:
cd /opt/seafile
编辑
seafile-server.yml
:
nano seafile-server.yml
在顶层
services:
下找到
db:
服务,
删除或完整注释整个
db
服务配置
,包括其镜像、环境变量、数据卷、网络和健康检查等内容。保留
seafile
、
redis
等其他服务。
修改 Seafile 服务的依赖项
在同一文件中,找到
seafile
服务的
depends_on
配置,移除对
db
的依赖,保留 Redis 依赖。修改后该部分应如下所示:
depends_on:
redis:
condition: service_started
请将此片段保留在
seafile
服务下,并保持与原 YAML 文件一致的缩进。
使用 SeaDoc 时
如果
.env
的
COMPOSE_FILE
中包含
seadoc.yml
,还需编辑
seadoc.yml
:
nano seadoc.yml
在
seadoc
服务下删除以下依赖项:
depends_on:
db:
condition: service_healthy
seadoc.yml
中的数据库连接参数会读取
.env
的
SEAFILE_MYSQL_DB_*
设置,通常无需另行修改。如果还启用了其他扩展组件,也应检查其 Compose 文件是否引用了已移除的
db
服务。
2. 修改
.env
中的 MySQL 连接设置
编辑
.env
:
nano .env
将 MySQL 相关变量设置为外部服务器的实际信息,例如:
SEAFILE_MYSQL_DB_HOST=192.168.0.2
SEAFILE_MYSQL_DB_PORT=3306
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=ROOT_PASSWORD
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=PASSWORD
变量名
说明
SEAFILE_MYSQL_DB_HOST
MySQL 服务器的 IP 地址或主机名。不能继续使用默认值
db
,除非该名称确实能够解析到外部 MySQL。
SEAFILE_MYSQL_DB_PORT
MySQL 监听端口,默认为
3306
。
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
首次部署时用于初始化数据库的 MySQL
root
密码。
SEAFILE_MYSQL_DB_USER
Seafile 日常连接数据库使用的用户名,默认是
seafile
。
SEAFILE_MYSQL_DB_PASSWORD
上述数据库用户的密码。
以上密码均为示例占位值,必须替换为真实凭据。
.env
包含敏感信息,应限制访问权限,不要上传到公开代码仓库。
首次部署完成后
,Seafile 将使用
SEAFILE_MYSQL_DB_USER
和
SEAFILE_MYSQL_DB_PASSWORD
连接 MySQL。此时可以在
.env
中清空
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
,不必继续保留数据库
root
密码。
3. 检查配置并启动 Seafile
在
/opt/seafile
目录执行:
# 检查 Compose 配置是否有效
docker compose config --quiet
# 查看将要启动的服务
docker compose config --services
确认输出的服务列表中不再包含
db
,也没有因引用不存在的
db
服务而报错。然后启动:
docker compose up -d
查看容器状态和 Seafile 初始化日志:
docker compose ps
docker compose logs -f seafile
如果无法连接 MySQL,请优先检查外部数据库的网络访问、端口、用户名、密码及授权范围;如果 Compose 提示依赖
db
服务不存在,请检查各个 Compose 文件中是否仍有
depends_on: db
。