使用 Docker 部署 Seafile 社区版

本文介绍如何使用 Docker Compose 安装 Seafile 社区版 14.0 或 13.0,以及常见的管理和故障排查操作。建议新部署优先选择 14.0;如需部署 13.0,请使用对应版本的配置文件和说明。
注意: 以下步骤用于全新部署。如果需要将已有的 Seafile 13.0 升级到 14.0,请按照 Seafile 14.0 Docker 升级指南 操作,不要直接用新版本的配置文件覆盖现有服务。
环境要求
建议服务器至少配置 2 核 CPU(主频高于 2 GHz)和 2 GB 内存 。如需支持较多用户、存储大量文件或部署额外服务,应适当增加服务器资源。
文档约定
本文使用以下目录:
路径
用途
/opt/seafile
存放 Docker Compose 配置文件。
/opt/seafile-data
保存 Seafile 数据、配置文件和日志。
/opt/seafile-mysql
保存数据库数据,默认数据库文件位于 /opt/seafile-mysql/db 。
/opt/seafile-caddy
保存 Caddy 的持久化数据,包括 HTTPS 证书等。
这些目录用于在容器删除或重新创建后保留重要数据。建议使用默认路径。如果需要修改目录位置,请同时调整 .env 中对应的变量和后续操作命令。
Seafile Docker 使用 Caddy 作为 HTTP/HTTPS 反向代理。Seafile 服务及容器内 Nginx 的配置和日志保存在相应的持久化目录中。
安装 Docker
请根据服务器操作系统,参考 Docker 官方安装指南 安装 Docker,并确认能够运行 docker compose 命令。
下载并修改 .env
在 /opt/seafile 目录中下载配置文件。 请根据需要安装的版本选择一组命令,不要混用两个版本的文件。
Seafile 14.0
            
                
                
mkdir -p /opt/seafile
cd /opt/seafile
wget -O .env https://manual.seafile.com/14.0/repo/docker/ce/env
wget https://manual.seafile.com/14.0/repo/docker/ce/seafile-server.yml
wget https://manual.seafile.com/14.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/14.0/repo/docker/caddy.yml
nano .env
Seafile 13.0
            
                
                
mkdir -p /opt/seafile
cd /opt/seafile
wget -O .env https://manual.seafile.com/13.0/repo/docker/ce/env
wget https://manual.seafile.com/13.0/repo/docker/ce/seafile-server.yml
wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/13.0/repo/docker/caddy.yml
nano .env
.env 文件包含服务地址、数据库密码、管理员账号、存储路径等配置。标准部署只需要设置下方的必要参数,其余参数可保持默认值。
配置文件中的 COMPOSE_FILE 用于指定需要启动的 Compose YAML 文件; COMPOSE_PATH_SEPARATOR 用于指定多个文件名之间的分隔符。请保留下载模板中的相关配置,除非需要调整所部署的服务。
必要配置
变量名
用途
设置要求
SEAFILE_SERVER_HOSTNAME
Seafile 的外部访问域名或主机名。
必填,填写实际访问地址对应的域名或主机名。
JWT_PRIVATE_KEY
Seafile 使用的 JWT 私钥。
必填,至少 32 个字符。
SEAFILE_MYSQL_DB_PASSWORD
Seafile 数据库用户的密码。
必填。
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
MySQL root 用户的初始密码。
首次部署时必填。
INIT_SEAFILE_ADMIN_EMAIL
Seafile 初始管理员邮箱。
首次部署时必填。
INIT_SEAFILE_ADMIN_PASSWORD
Seafile 初始管理员密码。
首次部署时必填。
可以使用以下命令生成 JWT 私钥:
            
                
                
pwgen -s 40 1
请为数据库和管理员账号设置强密码。初始化管理员账号和密码用于首次创建管理员;服务部署完成后,修改这些初始化变量不会直接重置已有管理员账号。
常用配置
变量名
用途
默认值或说明
BASIC_STORAGE_PATH
Docker 持久化数据的基础目录。
Seafile 14.0: 默认 /opt 。一般只需设置基础目录,无需逐一修改由其派生的数据、数据库和 Caddy 路径。
SEAFILE_SERVER_PROTOCOL
Seafile 的外部访问协议。
http ,也可设置为 https 。
TIME_ZONE
容器使用的时区。
默认为 UTC 时区;以所下载的 .env 文件中的值为准。
SEAFILE_VOLUME
Seafile 数据的持久化目录。
/opt/seafile-data 。
SEAFILE_MYSQL_VOLUME
MySQL 数据的持久化目录。
/opt/seafile-mysql/db 。
SEAFILE_CADDY_VOLUME
Caddy 数据的持久化目录。
/opt/seafile-caddy 。
NON_ROOT
是否以非 root 用户运行 Seafile 容器。
false 。如需启用,请参阅 以非 root 用户运行 Seafile 容器 。
在 Seafile 14.0 中,可以通过 BASIC_STORAGE_PATH 调整持久化数据的基础目录。 SEAFILE_VOLUME 、 SEAFILE_MYSQL_VOLUME 和 SEAFILE_CADDY_VOLUME 也可用于单独指定各组件的存储位置。修改路径时,应确认 .env 中最终使用的目录与实际挂载一致。
如需通过 HTTPS 访问 Seafile,可在 .env 中设置:
            
                
                
SEAFILE_SERVER_PROTOCOL=https
SEAFILE_SERVER_HOSTNAME=seafile.example.com
请将 seafile.example.com 替换为自己的域名,并确保域名解析及网络访问配置正确。
数据库配置
变量名
用途
默认值
SEAFILE_MYSQL_DB_HOST
MySQL 服务地址。
db
SEAFILE_MYSQL_DB_PORT
MySQL 服务端口。
3306
SEAFILE_MYSQL_DB_USER
Seafile 使用的 MySQL 用户名。
seafile
SEAFILE_MYSQL_DB_CCNET_DB_NAME
ccnet 数据库名称。
ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME
Seafile 数据库名称。
seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME
Seahub 数据库名称。
seahub_db
数据库密码通过 SEAFILE_MYSQL_DB_PASSWORD 设置。
Seafile 14.0: 全新部署时,数据库使用 utf8mb4 字符集,并在 seafile.conf 中设置 connection_charset = utf8mb4 ,以支持 Emoji 等特殊字符。对于从旧版本升级的已有数据库,请按照升级指南处理,不要假定升级会自动转换数据库字符集。
缓存服务配置
Seafile 使用缓存提高用户会话、头像、用户资料和数据库记录等内容的访问效率。
Seafile 14.0 和 13.0 的 Docker 部署均默认集成并使用 Redis,无需额外部署缓存服务器。 Seafile 14.0 不推荐使用 Memcached ,因为部分功能依赖 Redis。
变量名
用途
默认值
CACHE_PROVIDER
缓存服务类型,可选 redis 或 memcached 。
redis
REDIS_HOST
Redis 服务地址。
redis
REDIS_PORT
Redis 服务端口。
6379
REDIS_PASSWORD
Redis 访问密码。
不设置
MEMCACHED_HOST
Memcached 服务地址,仅使用 Memcached 时有效。
memcached
MEMCACHED_PORT
Memcached 服务端口,仅使用 Memcached 时有效。
11211
如需为内置 Redis 设置访问密码,请参阅文末“内置 Redis 默认有密码吗?”。
可选扩展配置
如果需要使用 SeaDoc、通知服务或元数据管理等功能,可以在 .env 中启用对应的服务。没有使用这些功能时,保持默认配置即可。
变量名
用途
默认值或说明
ENABLE_NOTIFICATION_SERVER
启用或关闭通知服务,取值为 true 或 false 。
false
NOTIFICATION_SERVER_URL
通知服务的外部访问地址。
启用通知服务时,按实际域名配置。
MD_FILE_COUNT_LIMIT
元数据管理允许处理的单个资料库最大文件数。
100000 ,仅启用元数据服务时有效。
ENABLE_SEADOC
启用或关闭 SeaDoc。
Seafile 14.0 默认 false 。
SEADOC_SERVER_URL
SeaDoc 的外部访问地址。
启用 SeaDoc 时配置。
ENABLE_METADATA_MANAGEMENT
启用或关闭元数据管理。
Seafile 14.0 默认 false 。
INNER_METADATA_SERVER_URL
Seafile 容器访问元数据服务所使用的内部地址。
启用元数据管理时配置。
ENABLE_SEAFDAV
启用或关闭内置 WebDAV 服务。
Seafile 14.0 默认 false 。
SEAFDAV_WORKERS
WebDAV 工作进程数量。
Seafile 14.0 默认 5 。
MD_FILE_COUNT_LIMIT 用于限制单个资料库的元数据管理规模。如果资料库文件数超过该值,将不会为其启用元数据管理。对于已经启用元数据管理的资料库,达到记录上限后,尚未记录的文件将不再进行元数据管理。
在 Seafile 14.0 中,如需启用 WebDAV,可设置:
            
                
                
ENABLE_SEAFDAV=true
SEAFDAV_WORKERS=5
更多可选配置请参阅 环境变量说明 。
启动 Seafile 服务
保存 .env 后,在配置文件所在目录执行:
            
                
                
cd /opt/seafile
docker compose up -d
如果 .env 文件位于其他目录,可使用:
            
                
                
docker compose --env-file /path/to/.env up -d
使用第二种方式时,也要确保 Compose 能正确找到 .env 所引用的 YAML 配置文件。
查看启动进度
执行以下命令查看 Seafile 容器日志:
            
                
                
docker logs seafile -f
首次启动时,Seafile 会初始化数据库、生成配置并启动 Seafile 和 Seahub。成功启动时,日志通常包含类似信息:
            
                
                
Starting seafile server, please wait ...
Seafile server started
Starting seahub at port 8000 ...
Successfully created seafile admin
Seahub is started
日志内容可能因部署版本和初始化状态而有所不同。启动成功后,可在浏览器中访问 Seafile,例如:
            
                
                
http://seafile.example.com
如果启用了 HTTPS,请使用 https:// 访问。
命名卷未声明
如果启动时出现以下错误:
            
                
                
ERROR: Named volume "xxx" is used in service "xxx" but no declaration was found in the volumes section
可能是 Docker 或 Docker Compose 版本过旧,也可能是 Compose 配置文件不完整。请先检查下载的配置文件是否齐全、是否属于同一版本,再参考 Docker 官方安装指南 更新 Docker。
Seafile 目录结构
Seafile 使用宿主机上的持久化目录保存数据、配置和日志,以便重新创建容器时保留重要信息。
常见目录如下:
路径
用途
/opt/seafile-data/seafile
Seafile 服务配置及数据文件。
/opt/seafile-data/seafile/logs
Seafile 服务进程日志,例如 seafile.log 。
/opt/seafile-data/logs
服务和容器相关日志。
/opt/seafile-data/logs/seafile
Seafile 日志的另一常见存放位置。
/opt/seafile-data/logs/var-log
对应容器内的 /var/log ,包含 Nginx 等日志。
日志文件的实际位置可能随容器挂载配置而变化。如果在上述路径中未找到日志,请查看当前容器的挂载情况,或直接使用 Docker 日志命令排查。
查找日志
在 /opt/seafile 目录中查看全部容器日志:
            
                
                
docker compose logs --follow
如果 .env 位于其他路径:
            
                
                
docker compose --env-file /path/to/.env logs --follow
只查看 Seafile 容器日志:
            
                
                
docker compose logs seafile --follow
或者:
            
                
                
docker compose --env-file /path/to/.env logs seafile --follow
Seafile 容器内的日志通常位于 /shared/logs/seafile ,对应的宿主机目录可在 /opt/seafile-data/logs/seafile 中查找。容器的系统日志通常位于 /shared/logs/var-log ,对应宿主机目录为 /opt/seafile-data/logs/var-log 。
查看 Caddy 容器日志:
            
                
                
docker logs seafile-caddy --follow
如果需要持续查看 /opt/seafile-data 下的所有 .log 文件,可执行:
            
                
                
sudo tail -f $(find /opt/seafile-data/ -type f -name '*.log' 2>/dev/null)
该命令要求目标日志文件已经存在。如果日志较多,建议优先使用 docker compose logs ,或者单独查看需要排查的日志文件。
更多配置项
Seafile 的主要配置文件位于:
            
                
                
/opt/seafile-data/seafile/conf
如需调整其他配置,请参阅 Seafile 配置说明 。
增加管理员
确保 Seafile 容器正在运行,然后执行:
            
                
                
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
按照提示输入管理员账号和密码,即可创建或重设管理员账号。
备份和恢复
建议定期备份 Seafile 数据库以及持久化的数据和配置文件。具体操作请参阅 备份与恢复 。
垃圾回收
删除文件后,文件对应的数据块不会立即被清除,因为其他文件可能仍在引用这些数据块。要回收不再被任何文件引用的数据块,需要运行 Seafile 垃圾回收(GC)程序。
具体操作请参阅 垃圾回收(GC) 。
常见问题
如何进入 Docker 容器排查问题?
            
                
                
docker exec -it seafile /bin/bash
忘记管理员账号或密码怎么办?
确保 Seafile 服务正在运行,然后执行:
            
                
                
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
按照提示创建或重设管理员账号。
安装失败后,如何重新安装?
对于 尚未投入使用、没有需要保留的数据 的全新部署,可以停止相关容器,删除 /opt/seafile 、 /opt/seafile-data 和 /opt/seafile-mysql 目录后重新安装。
警告: 删除这些目录会永久移除部署配置、数据库及 Seafile 持久化数据。对于已有用户数据的服务,应先备份并查明故障原因,不要直接删除。
容器启动失败时如何查看详细信息?
在 Compose 配置目录执行:
            
                
                
docker compose logs -f
也可以使用以下命令查看 Seafile 容器日志:
            
                
                
docker logs seafile -f
Seafile 为什么需要缓存?
Seafile 使用缓存提高用户会话、头像、个人资料和数据库记录等内容的访问速度。14.0 和 13.0 的 Docker 部署默认使用 Redis,通常无需额外配置。
内置 Redis 默认有密码吗?
内置 Redis 默认 没有设置访问密码 ,但在默认部署中只通过 Docker 私有网络访问,不会对外暴露端口。
如需启用密码,在 .env 中设置 REDIS_PASSWORD ,并编辑对应版本的 seafile-server.yml ,为 redis 服务启用以下启动命令:
            
                
                
services:
# 保留原文件中的其他配置
redis:
# 保留原文件中的镜像、容器名称和网络等配置
command:
- /bin/sh
- -c
- redis-server --requirepass "$${REDIS_PASSWORD:?Variable is not set or empty}"
注意: 上面的代码仅展示需要启用的 command 部分,不是完整的 Compose 文件。请勿用它覆盖原文件中的整个 redis 服务配置;Seafile 连接 Redis 时也必须使用相同的密码。
可以使用 Memcached 吗?
Seafile 14.0: 不推荐使用 Memcached。部分功能依赖 Redis,建议保留默认的 Redis 配置。
Seafile 13.0: 可以使用自行部署的 Memcached。需要在 .env 中将 CACHE_PROVIDER 设置为 memcached ,配置 MEMCACHED_HOST 和 MEMCACHED_PORT ,并从 seafile-server.yml 中移除内置 Redis 服务及 Seafile 对 Redis 的依赖。
如果在服务启动后才切换缓存服务,修改 .env 不会自动更新已有的 seahub_settings.py 、 seafile.conf 和 seafevents.conf ,还需检查并同步调整这些配置文件。