本文介绍如何在 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 --version
docker compose version
下载 Seafile 镜像
Seafile 专业版镜像可以直接从 Docker Hub 下载,无需单独登录私有镜像仓库。
Seafile 14.0:
docker pull seafileltd/seafile-pro-mc:14.0-latest
Seafile 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/seafile
cd /opt/seafile
wget -O .env https://manual.seafile.com/14.0/repo/docker/pro/env
wget https://manual.seafile.com/14.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/14.0/repo/docker/pro/seasearch.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 14.0 默认使用 SeaSearch,部署前需要设置 SeaSearch 的授权令牌
SEASEARCH_TOKEN
,相关方法见下文。
Seafile 13.0
mkdir -p /opt/seafile
cd /opt/seafile
wget -O .env https://manual.seafile.com/13.0/repo/docker/pro/env
wget https://manual.seafile.com/13.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/13.0/repo/docker/pro/elasticsearch.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
Seafile 13.0 的默认部署使用 Elasticsearch。如使用默认的本地 Elasticsearch,应先创建数据目录,并设置允许 Elasticsearch 写入的权限:
mkdir -p /opt/seafile-elasticsearch/data
chmod 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/seafile
docker 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 started
Starting seahub at port 8000 ...
Successfully created seafile admin
Seahub is started
随后使用浏览器访问
.env
配置的地址,例如
http://seafile.example.com
。
如果首次访问时出现
502 Bad Gateway
,可能是数据库或 Seafile 服务尚未初始化完成;可以稍等片刻,并查看 Seafile 容器日志确认运行状态。
查找日志
查看当前 Docker Compose 项目的容器日志:
cd /opt/seafile
docker compose logs -f
只查看 Seafile 容器日志:
docker compose logs -f seafile
Seafile 服务日志位于容器内的
/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/seafile
docker compose down
docker compose up -d
Seafile 目录结构
/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/seafile
docker 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/seafile
docker 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
下的对应配置,并重建或重启相关容器。不要通过删除现有数据目录来让配置生效。