本文介绍如何使用 Docker Compose 安装 Seafile 社区版 14.0 或 13.0,以及常见的管理和故障排查操作。建议新部署优先选择 14.0;如需部署 13.0,请使用对应版本的配置文件和说明。
环境要求
建议服务器至少配置
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
下载并修改
.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 容器。
在 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 容器正在运行,然后执行:
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
按照提示输入管理员账号和密码,即可创建或重设管理员账号。
备份和恢复
垃圾回收
删除文件后,文件对应的数据块不会立即被清除,因为其他文件可能仍在引用这些数据块。要回收不再被任何文件引用的数据块,需要运行 Seafile 垃圾回收(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
,还需检查并同步调整这些配置文件。