本文介绍如何在 Linux 服务器上通过 Docker 和 Docker Compose 安装 Seafile 专业版(Seafile Professional Edition)。适用于 Seafile 14.0 和 13.0,以 Seafile 14.0 的标准部署流程为主。部署方式已在 Debian、Ubuntu 和 CentOS 上进行过测试,也可以用于其他兼容 Docker 的 Linux 发行版。
环境要求
Seafile 专业版的资源需求取决于使用的文件搜索引擎:
部署方式
CPU
内存
说明
Seafile 14.0,使用默认的 SeaSearch
至少 2 核
至少 2GB
Docker 标准部署;建议根据用户规模预留更多资源。
在同一服务器上部署 Elasticsearch
至少 4 核
至少 4GB
适用于选择 Elasticsearch 的部署。
使用部署在其他服务器上的 Elasticsearch
至少 2 核
至少 2GB
搜索服务器需要单独准备资源。
建议为 Seafile 专业版准备 4 核 CPU(主频高于 2GHz)和至少 4GB 内存,并预留充足的磁盘空间;一般建议可用磁盘空间超过 50GB。
搜索服务说明:
- Seafile 14.0 默认使用 SeaSearch 作为文件搜索引擎。标准部署不需要额外安装 Elasticsearch。
如果使用 Elasticsearch,应根据其要求调整 vm.max_map_count。例如,以 root 用户运行:
sysctl -w vm.max_map_count=262144若要持久生效,可在 /etc/sysctl.conf 中加入:
vm.max_map_count=262144保存后重新加载配置(例如运行 sysctl -p),或重启系统。有关说明参阅 Elasticsearch vm.max_map_count 配置。使用默认 SeaSearch 时不需要为 Elasticsearch 执行这一步。
文档约定
- /opt/seafile 用于保存 Seafile 的 Docker Compose 文件和 .env。如使用其他目录,需相应修改命令中的路径。
- 默认将 Seafile 数据持久化在 /opt/seafile-data,将数据库文件持久化在 /opt/seafile-mysql 下。建议保留默认路径;调整路径前应确认挂载和备份策略。
- Seafile 容器中的配置文件和日志会保存在宿主机的持久化目录中。下文均以默认路径为例。
安装 Docker
安装完成后,执行以下命令确认 Docker 和 Compose 可用:
docker --versiondocker compose version下载 Seafile 镜像
Seafile 专业版镜像可以直接从 Docker Hub 下载,无需单独登录私有镜像仓库。
Seafile 14.0:
docker pull seafileltd/seafile-pro-mc:14.0-latestSeafile 13.0:
docker pull seafileltd/seafile-pro-mc:13.0-latest只需要拉取计划安装的版本。后续的 .env 和 YAML 文件也必须使用同一版本的模板,不要混用。
下载并修改 .env
Docker 部署使用 .env 和多个 YAML 文件管理组件及配置。其中,seafile-server.yml 用于 Seafile 主服务,caddy.yml 用于 Caddy 反向代理;专业版还包含搜索服务的配置文件。
Seafile 14.0
mkdir -p /opt/seafilecd /opt/seafilewget -O .env https://manual.seafile.com/14.0/repo/docker/pro/envwget https://manual.seafile.com/14.0/repo/docker/pro/seafile-server.ymlwget https://manual.seafile.com/14.0/repo/docker/pro/seasearch.ymlwget https://manual.seafile.com/14.0/repo/docker/seadoc.ymlwget https://manual.seafile.com/14.0/repo/docker/caddy.ymlnano .envSeafile 14.0 默认使用 SeaSearch,部署前需要设置 SeaSearch 的授权令牌 SEASEARCH_TOKEN,相关方法见下文。
Seafile 13.0
mkdir -p /opt/seafilecd /opt/seafilewget -O .env https://manual.seafile.com/13.0/repo/docker/pro/envwget https://manual.seafile.com/13.0/repo/docker/pro/seafile-server.ymlwget https://manual.seafile.com/13.0/repo/docker/pro/elasticsearch.ymlwget https://manual.seafile.com/13.0/repo/docker/seadoc.ymlwget https://manual.seafile.com/13.0/repo/docker/caddy.ymlnano .envSeafile 13.0 的默认部署使用 Elasticsearch。如使用默认的本地 Elasticsearch,应先创建数据目录,并设置允许 Elasticsearch 写入的权限:
mkdir -p /opt/seafile-elasticsearch/datachmod 777 -R /opt/seafile-elasticsearch/data上述权限命令来自 Seafile 13.0 的标准部署说明。777 允许所有本地用户写入该目录;对安全要求较高的环境,建议依据 Elasticsearch 容器使用的 UID/GID 设置更严格的属主和权限。
必填配置
编辑 .env,至少设置下列参数。首次部署时需要配置数据库管理员密码及 Seafile 初始管理员账号。
变量名
说明
要求
SEAFILE_SERVER_HOSTNAME
Seafile 对外访问的域名或主机名。
必填
JWT_PRIVATE_KEY
JWT 私钥,长度不少于 32 个字符的随机字符串。
必填
SEAFILE_MYSQL_DB_PASSWORD
Seafile 数据库用户的密码。
必填
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
MySQL root 用户的初始密码。
首次部署时必填
INIT_SEAFILE_ADMIN_EMAIL
初始 Seafile 管理员的邮箱(登录名)。
首次部署时必填
INIT_SEAFILE_ADMIN_PASSWORD
初始 Seafile 管理员密码。
首次部署时必填
SEASEARCH_TOKEN
Seafile 访问 SeaSearch API 使用的授权令牌。
使用 SeaSearch 时必填;Seafile 14.0 默认需要
可以使用下列命令生成 JWT 私钥:
pwgen -s 40 1如果系统未安装 pwgen,请先通过操作系统的软件包管理器安装。
生成 SeaSearch 授权令牌
Seafile 14.0 默认以 Seafile 的初始管理员账号和密码初始化 SeaSearch 管理员。根据 .env 中设置的 INIT_SEAFILE_ADMIN_EMAIL 和 INIT_SEAFILE_ADMIN_PASSWORD,运行:
printf '%s' 'admin@example.com:your_admin_password' | base64 | tr -d '\n'将 admin@example.com 和 your_admin_password 替换为实际的初始管理员邮箱和密码,然后把输出内容填写到 .env 的 SEASEARCH_TOKEN 中。
如果希望为 SeaSearch 设置不同的管理员账号,可以修改 INIT_SS_ADMIN_USER 和 INIT_SS_ADMIN_PASSWORD,并使用这两个账号参数生成 SEASEARCH_TOKEN。令牌必须与 SeaSearch 实际使用的账号和密码匹配。
常用可选配置
变量名
说明
默认值
BASIC_STORAGE_PATH
Docker 持久化数据的基础目录。使用默认目录时通常无需修改。
/opt(14.0)
SEAFILE_SERVER_PROTOCOL
服务器对外使用的协议,http 或 https。
http
TIME_ZONE
容器使用的时区,可以设置为 Asia/Shanghai。
Etc/UTC(14.0)
NON_ROOT
是否以非 root 用户运行 Seafile 容器。
false
若使用 HTTPS 域名,需相应设置 SEAFILE_SERVER_PROTOCOL=https,并配置证书及反向代理。
数据库配置
变量名
说明
默认值
SEAFILE_MYSQL_DB_HOST
数据库主机地址。
db
SEAFILE_MYSQL_DB_PORT
数据库端口。
3306
SEAFILE_MYSQL_DB_USER
Seafile 使用的数据库用户名。
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 14.0 新部署的数据库使用 utf8mb4 字符集,并在 seafile.conf 中使用 connection_charset = utf8mb4,以支持 Emoji 等特殊字符。已有数据库的升级和字符集转换应按实际情况处理,不应直接假定旧数据已自动转换。
缓存配置
Seafile 14.0 和 13.0 的 Docker 标准部署均集成 Redis,通常不需要修改缓存配置。
变量名
说明
默认值
CACHE_PROVIDER
缓存服务类型。建议使用 redis。
redis
REDIS_HOST
Redis 主机地址。
redis
REDIS_PORT
Redis 服务端口。
6379
REDIS_PASSWORD
Redis 访问密码。
未设置
搜索服务配置
Seafile 14.0 默认使用 SeaSearch,Seafile 13.0 的标准部署使用 Elasticsearch。
变量名
说明
Seafile 14.0 默认值
ENABLE_SEARCH
是否启用搜索服务。
true
SEARCH_ENGINE
搜索引擎,支持 seasearch 或 elasticsearch。
seasearch
SEASEARCH_URL
Seafile 容器访问 SeaSearch 服务的地址。
http://seasearch:4080
SEASEARCH_TOKEN
SeaSearch API 授权令牌。
必须自行设置
ENABLE_FULL_TEXT_SEARCH
是否索引文档内容以支持全文搜索。
true
Seafile 14.0 如需改用 Elasticsearch,应将 SEARCH_ENGINE 设置为 elasticsearch,配置相应的 Elasticsearch 组件和连接参数,并参阅 Elasticsearch 搜索配置。不要只修改 SEARCH_ENGINE,还需确保 Elasticsearch 服务可用。
存储后端配置
默认使用本地磁盘存储。专业版也支持 S3 兼容对象存储以及多存储后端。
变量名
说明
默认值或要求
SEAF_SERVER_STORAGE_TYPE
Seafile 数据存储类型,常用 disk 和 s3。
disk
S3_COMMIT_BUCKET
保存 commit 对象的存储桶。
使用 S3 时必填
S3_FS_BUCKET
保存 fs 对象的存储桶。
使用 S3 时必填
S3_BLOCK_BUCKET
保存 block 对象的存储桶。
使用 S3 时必填
S3_KEY_ID
S3 访问密钥 ID。
使用密钥方式连接 S3 时配置
S3_SECRET_KEY
S3 访问密钥。
使用密钥方式连接 S3 时配置
S3_AWS_REGION
AWS S3 所在区域。
us-east-1
S3_HOST
S3 兼容服务的访问地址。
非 AWS S3 时需要设置
S3_USE_HTTPS
是否通过 HTTPS 连接 S3。
true
S3_USE_V4_SIGNATURE
是否使用 S3 V4 签名。
true
S3_PATH_STYLE_REQUEST
是否使用路径式 URL 访问对象存储。
false
S3_SSE_C_KEY
使用 SSE-C 加密时的密钥。
默认未设置
将 SEAF_SERVER_STORAGE_TYPE=s3 后,还需要填写相应的存储桶和连接参数。Docker 中的 .env 可配置单一 S3 存储后端;多存储后端、Ceph、Swift 等方案需要额外配置。详情参阅 S3 存储后端和多存储后端。
如需为 SeaSearch 或元数据服务器使用 S3,可分别设置 SS_STORAGE_TYPE、S3_SS_BUCKET,或 MD_STORAGE_TYPE、S3_MD_BUCKET;这些组件可以共用 .env 中的 S3 连接参数。
其他扩展功能
启动 Docker 容器
进入包含 .env 的目录并启动服务:
cd /opt/seafiledocker compose up -d如果 .env 保存在其他目录,可以指定其路径:
docker compose --env-file /path/to/.env up -d初次启动时,Docker 将创建数据库并初始化 Seafile。可以通过下列命令观察启动进度:
docker logs seafile -f正常启动时,日志中通常会显示类似以下信息:
Starting seafile server, please wait ...Seafile server startedStarting seahub at port 8000 ...Successfully created seafile adminSeahub is started随后使用浏览器访问 .env 配置的地址,例如 http://seafile.example.com。
如果首次访问时出现 502 Bad Gateway,可能是数据库或 Seafile 服务尚未初始化完成;可以稍等片刻,并查看 Seafile 容器日志确认运行状态。
查找日志
查看当前 Docker Compose 项目的容器日志:
cd /opt/seafiledocker compose logs -f只查看 Seafile 容器日志:
docker compose logs -f seafileSeafile 服务日志位于容器内的 /shared/logs/seafile,宿主机默认可以在 /opt/seafile-data/logs/seafile 中查找。容器系统日志位于 /shared/logs/var-log,对应宿主机目录为 /opt/seafile-data/logs/var-log。
使用 SeaSearch 时,可以查看 SeaSearch 容器日志:
docker logs -f seafile-seasearch安装专业版授权文件
未安装付费授权文件时,Seafile 专业版可以以试用模式运行,最多支持 3 个用户。如已购买授权,将名为 seafile-license.txt 的文件放在 Seafile 容器的持久化数据根目录,默认路径为:
/opt/seafile-data/seafile-license.txt如果自定义了持久化目录,应将授权文件放在实际挂载目录中。文件名必须为 seafile-license.txt,且 Seafile 容器需要有读取权限。
放置授权文件后,重启服务:
cd /opt/seafiledocker compose downdocker compose up -dSeafile 目录结构
/opt/seafile-data
Seafile 将配置文件、数据文件和日志持久化在宿主机目录中。以默认部署为例:
/opt/seafile-data/├── logs/│ └── var-log/├── nginx/│ └── conf/└── seafile/ ├── ccnet/ ├── conf/ ├── logs/ ├── pro-data/ ├── seafile-data/ └── seahub-data/常用目录说明:
- /opt/seafile-data/seafile/conf:Seafile 配置文件。
- /opt/seafile-data/seafile/seafile-data:Seafile 文件数据。
- /opt/seafile-data/seafile/pro-data:专业版相关数据。
- /opt/seafile-data/seafile/logs:Seafile 服务进程日志。
- /opt/seafile-data/logs/var-log:容器系统及 Nginx 日志。
- /opt/seafile-data/nginx/conf:Nginx 配置文件。
修改运行中的 Seafile 配置文件后,通常需要重启相关服务才能生效:
cd /opt/seafiledocker compose restart检查部署状态
查看正在运行的容器:
docker container list查看 Seafile 持久化目录:
tree /opt/seafile-data -L 2如果修改了默认存储目录,应将命令中的路径替换为实际路径。
备份和恢复
垃圾回收
常见问题
如何进入 Seafile 容器排查问题?
docker exec -it seafile /bin/bash忘记管理员账号或密码时,如何创建新的管理员账户?
确保 Seafile 服务正在运行,然后执行:
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh根据提示输入管理员账号和密码。
如何查看容器启动失败的原因?
cd /opt/seafiledocker compose logs -f如果出现以下错误:
ERROR: Named volume "xxx" is used in service "xxx" but no declaration was found in the volumes section安装失败后,如何重新初始化部署?
在确认不需要保留现有数据的前提下,可以停止容器并清理安装目录、数据库目录和数据目录,然后重新部署。
注意:此操作会永久删除已有 Seafile 数据和数据库,不能用于升级或修复已投入使用的实例。 除 /opt/seafile、/opt/seafile-data、/opt/seafile-mysql 外,如果使用 SeaSearch 或 Elasticsearch,还需要按实际部署情况核对对应的持久化数据目录。清理前务必完成备份。
集成的 Redis 是否安全?可以设置密码吗?
默认 Redis 只在 Docker 内部网络中提供服务,不向外部开放端口,且默认未设置访问密码。如果需要添加密码,请在 .env 中设置 REDIS_PASSWORD,并在 seafile-server.yml 的 Redis 服务中启用以下 command 配置:
services: redis: # 保留原文件中已有的 image、container_name、networks 等设置 command: - /bin/sh - -c - redis-server --requirepass "$${REDIS_PASSWORD:?Variable is not set or empty}"上面的代码只展示需要启用的 command 部分,不应使用它覆盖整个 Redis 服务配置。修改后重新创建相关容器,使配置生效。
修改 .env 后为什么配置没有立即生效?
.env 中的一些选项只会在首次初始化时写入 Seafile 配置文件。服务已完成初始化后,修改相关变量可能不会自动覆盖已有配置。必要时需要检查 /opt/seafile-data/seafile/conf 下的对应配置,并重建或重启相关容器。不要通过删除现有数据目录来让配置生效。