使用现有 MySQL 服务器进行部署

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 密码。
其他部署参数(如域名、管理员账号、JWT 私钥,以及专业版的搜索服务设置)仍需按照相应的 社区版部署说明 或 专业版部署说明 配置。
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 。
更多配置项请参阅 Seafile 环境变量 。