本手册解释了如何在 Linux 服务器上使用 Docker 和 Docker Compose 部署和运行 Seafile 专业版。该部署已在 Debian/Ubuntu 上进行了测试,但 Seafile 专业版也应该可以在其他 Linux 发行版上运行。
环境要求
安装 Seafile 专业版至少需要 4核 CPU 和 4GB 内存。
Seafile 专业版的其他要求
-
默认情况下,Seafile Pro 将使用 Elasticsearch 作为文件索引器。
如果 Elasticsearch 安装在同一服务器上,最低要求是4核CPU和 4GB 内存,确保
mmapfs 计数
不会导致像内存不足这样的异常,可执行以下命令(有关更多详细信息,请参阅
vm.max_map_count 设置
):
#run as root
sysctl -w vm.max_map_count=262144
或者
修改
/etc/sysctl.conf
文件后重启以永久生效:
nano /etc/sysctl.conf
# modify vm.max_map_count
vm.max_map_count=262144
-
如果你的机器没有足够的配置,在首次部署 Seafile Pro Docker 之后,可以通过以下两种方式之一来满足最低要求为 2 个核心和 2GB 内存。
-
在另一台机器上部署 Elasticsearch,并在 seafevents.conf 文件中修改 es_host 和 es_port 。
文档约定
本文档使用以下约定:
-
/opt/seafile 是 Seafile 的目录。 如果您将 Seafile 放在不同的目录中,请相应地调整所有路径。
-
Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。
安装 Docker
下载Seafile镜像
#12.0
docker pull seafileltd/seafile-pro-mc:12.0-latest
#13.0
docker pull seafileltd/seafile-pro-mc:13.0-latest
-
自 12.0 版本起,Seafile 专业版版本托管在 DockerHub 上,下载时不再需要用户名和密码,如果镜像下载有问题,可以通过官网联系我们的销售人员获取支持。
-
Seafile 7.0 ~ 11.0版本的 Seafile专业版可在私有 Docker 仓库中获取。
下载
并修改
.env
从 Seafile Docker 12.0开始,Seafile使用以下三个配置文件:
.env
,
seafile-server.yml
和
caddy.yml
。
mkdir /opt/seafile
cd /opt/seafile
# Seafile PRO 12.0(Github镜像源)
wget -O .env https://manual.seafile.com/12.0/repo/docker/pro/env
wget https://manual.seafile.com/12.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/12.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/12.0/repo/docker/caddy.yml
# Seafile PRO 13.0
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
【12.0】以下字段需特别注意:
变量名
描述
默认值
SEAFILE_VOLUME
Seafile 数据目录
/opt/seafile-data
SEAFILE_MYSQL_VOLUME
MySQL 数据目录
/opt/seafile-mysql/db
SEAFILE_CADDY_VOLUME
用于存储从 Let's Encrypt 获得的证书的 Caddy 数据目录
/opt/seafile-caddy
SEAFILE_ELASTICSEARCH_VOLUME
Elasticsearch数据目录(仅专业版有效)
/opt/seafile-elasticsearch/data
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
MySQL root的密码
(仅在首次部署时需要)
SEAFILE_MYSQL_DB_USER
MySQL 的用户(可在conf/seafile.conf中找到)
seafile
SEAFILE_MYSQL_DB_PASSWORD
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
JWT_PRIVATE_KEY
JWT 私钥,Seafile 需要一个长度不小于 32 个字符的随机字符串,可以使用`pwgen -s 40 1` 生成。
(必填)
SEAFILE_SERVER_HOSTNAME
Seafile服务器的主机名或域名
(必填)
SEAFILE_SERVER_PROTOCOL
Seafile服务器协议(http或https)
http
TIME_ZONE
时区
Asia/Shanghai
INIT_SEAFILE_ADMIN_EMAIL
初始化的管理员用户名
me@example.com(建议修改)
INIT_SEAFILE_ADMIN_PASSWORD
初始化的管理员密码
asecret(建议修改)
INIT_S3_STORAGE_BACKEND_CONFIG
是否在初始化期间同步配置 S3 存储后端(带有前缀 INIT_S3_* 的变量,更多详情,请参考 AWS S3的配置-https://manual.seafile.com/12.0/setup/setup_with_s3/)
false
INIT_S3_COMMIT_BUCKET
S3 存储后端commit对象存储桶(仅当 `INIT_S3_STORAGE_BACKEND_CONFIG` 设置为 true 时有效)
(当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时必填)
INIT_S3_FS_BUCKET
S3 存储后端fs对象存储桶(仅当 `INIT_S3_STORAGE_BACKEND_CONFIG` 设置为 true 时有效)
(当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时必填)
INIT_S3_BLOCK_BUCKET
S3 存储后端block对象存储桶(仅当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时有效)
(当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时必填)
INIT_S3_KEY_ID
S3 存储后端密钥 ID(仅当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时有效)
(当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时必填)
INIT_S3_SECRET_KEY
S3 存储后端密钥(仅当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时有效)
(当`INIT_S3_STORAGE_BACKEND_CONFIG`设置为 true 时必填)
INIT_S3_USE_V4_SIGNATURE
如果已启用,则S3使用 v4 协议
true
INIT_S3_AWS_REGION
你的存储桶所在区域(仅当`INIT_S3_STORAGE_BACKEND_CONFIG`和`INIT_S3_USE_V4_SIGNATURE`均设置为 true 时有效)
us-east-1
INIT_S3_HOST
你的存储桶的主机名(仅当`INIT_S3_STORAGE_BACKEND_CONFIG`和`INIT_S3_USE_V4_SIGNATURE`均设置为 true 时有效)
s3.us-east-1.amazonaws.com
INIT_S3_USE_HTTPS
如果已启用,则S3使用 HTTPS 连接
true
【13.0】新增及变动字段:
变量名
描述
默认值
SEAFILE_MYSQL_DB_HOST
MySQL 的host
db
SEAFILE_MYSQL_DB_PORT
MySQL 的Port
3306
CACHE_PROVIDER
用于 Seafile 的缓存服务器。可用选项包括
redis 和
memcached 。从 Seafile 13 开始,建议使用
redis 作为缓存服务来支持新功能,以及
默认情况下,memcached 将不再集成到 Seafile Docker 中。
redis
REDIS_HOST
Redis 服务地址
redis
REDIS_PORT
Redis 服务端口
6379
REDIS_PASSWORD
Redis 服务密码
空
MEMCACHED_HOST
Memcached 服务地址
memcached
MEMCACHED_PORT
Memcached 服务端口
11211
ENABLE_NOTIFICATION_SERVER
启用 (true) 或禁用 (false) Seafile 的通知功能
false
NOTIFICATION_SERVER_URL
通知服务地址
空
MD_FILE_COUNT_LIMIT
(仅在部署元数据服务器时有效)。元数据功能允许的存储库中最大文件数。如果仓库中的文件数超过此值,则不会为仓库启用元数据管理功能。对于启用了元数据管理的仓库,如果其中的记录数达到此值,但仍有一些文件未记录在元数据服务器中,则将跳过未记录文件的元数据管理。
100000
SEAF_SERVER_STORAGE_TYPE
存储什么样的 Seafile 数据。可用选项包括disk(即本地磁盘)s3 和multiple(请参阅多存储后端)
disk
S3_COMMIT_BUCKET
S3 存储后端commit对象存储桶
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_FS_BUCKET
S3 存储后端fs对象存储桶
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_BLOCK_BUCKET
S3 存储后端block对象存储桶
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_KEY_ID
S3 存储后端密钥 ID
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_SECRET_KEY
S3 存储后端密钥
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_AWS_REGION
存储桶的区域
us-east-1(默认值)
S3_HOST
存储桶的主机地址
(不使用 AWS 时必填)
S3_USE_HTTPS
使用与 S3 的 HTTPS 连接(如果已启用)
true
S3_USE_V4_SIGNATURE
如果启用,使用 S3 的 v4 协议
true
S3_PATH_STYLE_REQUEST
此选项要求 Seafile 使用 URL
https://192.168.1.123:8080/bucketname/object 访问对象。在Amazon S3,默认 URL 格式为虚拟主机样式,例如https://bucketname.s3.amazonaws.com/object。但这种风格依赖于高级 DNS 服务器设置。因此,大多数自托管存储系统仅实现路径样式格式。
false
S3_SSE_C_KEY
openssl rand -base64 24 可以生成一串 32 个字符。它可以是任何 32 个字符长的随机字符串。如果启用 SSE-C,则需要使用 V4 身份验证协议和 https。
空
NON_ROOT
在没有 root 用户的情况下运行 Seafile 容器
false
mkdir -p /opt/seafile-elasticsearch/data
chmod 777 -R /opt/seafile-elasticsearch/data
为 Seafile 及其组件配置 S3(仅13.0)
从 Seafile Pro 13.0 开始,为了方便用户未来部署 Seafile 的相关扩展组件和其他服务,将在
.env
中提供一个部分来存储 Seafile 和一些扩展组件(如
SeaSearch
、
Metadata server
)的
S3 配置
。您可以通过标题栏找到它
S3 的存储配置
。
.env
中的 S3 配置仅支持单个 S3 存储后端模式
Seafile 服务器仅支持在
.env
中配置 S3 以进行
单个 S3 存储后端模式
(即当
SEAF_SERVER_STORAGE_TYPE=s3
时)。如果您想使用其他存储后端(例如
Ceph
、
Swift
)或其他只能在
seafile.conf
中设置的设置(如
多存储后端
)将
SEAF_SERVER_STORAGE_TYPE
设置为
multiple
,并根据您的配置设置
MD_STORAGE_TYPE
和
SS_STORAGE_TYPE
。
启动 Docker容器
执行docker compose,命令如下:
docker compose up -d
ERROR: Named volume "xxx" is used in service "xxx" but no declaration was found in the volumes section
当您的 Docker(或 docker-compose)版本过低时,您可能会遇到此问题。您可以根据 Docker 官方文档升级或重新安装 Docker 服务来解决这个问题。
注意:
你必须在包含
.env
的目录中运行上述命令。如果
.env
文件在其他目录,请运行
docker compose --env-file /path/to/.env up -d
启动服务后,您可以通过跟踪容器
seafile
的日志(即
docker logs seafile -f
)查看进度。
---------------------------------
This is your configuration
---------------------------------
server name: seafile
server ip/domain: seafile.example.com
seafile data dir: /opt/seafile/seafile-data
fileserver port: 8082
database: create new
ccnet database: ccnet_db
seafile database: seafile_db
seahub database: seahub_db
database user: seafile
Generating seafile configuration ...
done
Generating seahub configuration ...
----------------------------------------
Now creating seafevents database tables ...
----------------------------------------
----------------------------------------
Now creating ccnet database tables ...
----------------------------------------
----------------------------------------
Now creating seafile database tables ...
----------------------------------------
----------------------------------------
Now creating seahub database tables ...
----------------------------------------
creating seafile-server-latest symbolic link ... done
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
然后,你可以看到 Seafile 服务器成功启动的以下消息:
Starting seafile server, please wait ...
Seafile server started
Done.
Starting seahub at port 8000 ...
----------------------------------------
Successfully created seafile admin
----------------------------------------
Seahub is started
Done.
最后,您可以访问
http://seafile.example.com
来使用 Seafile。
502网关错误意味着您的系统还未初始化完成。
查找日志
您可以使用以下命令来查看 Seafile Docker 的日志
docker compose logs -f
Seafile 容器中 Seafile 服务本身的日志文件存放在
/shared/logs/seafile
目录下,或者您可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如:
/opt/seafile-data/logs/seafile
同样 Seafile 容器的系统日志存放在
/shared/logs/var-log
目录下,或者宿主机目录
/opt/seafile-data/logs/var-log
。
安装授权文件(seafile-license.txt)
如果您已经购买了专业版的授权文件
seafile-license.txt
,您只需要将该授权文件放到Seafile的目录卷中,
在Compose文件中设定的默认Seafile 数据持久化目录为
/opt/seafile-data
,
如果您修改了路径,请将授权文件保存在您的自定义路径下。
注意:
如果授权文件有不同的名称或无法读取,Seafile 服务器将以试用模式启动,最多支持三个用户。
然后重启Seafile:
docker compose down
docker compose up -d
Seafile 目录结构
/opt/seafile-data
共享卷的挂载点,您可以选择在容器外部存储某些持久性信息.在这个项目中,我们会在外部保存各种日志文件和上传数据。 这使您可以轻松重建容器而不会丢失重要信息。
-
/opt/seafile-data/seafile: Seafile 服务的配置文件,日志文件以及数据文件
-
/opt/seafile-data/seafile/logs: Seafile 服务运行产生的日志文件目录。比如您可以在 /opt/seafile-data/seafile/logs/seafile.log 文件中看到 seaf-server 的日志
-
-
/opt/seafile-data/logs: 系统和Nginx日志目录
-
/opt/seafile-data/logs/var-log: 我们将容器内的 /var/log 链接到本目录。您可以在 /opt/seafile-data/logs/var-log/nginx/ 中找到 nginx 的日志文件
-
检查部署
使用命令
docker container list
会列出在
.env
中指定的容器。
现在,你的Seafile容器卷目录看起来应该像这样:
$ tree /opt/seafile-data -L 2
/opt/seafile-data
├── logs
│ └── var-log
├── nginx
│ └── conf
└── seafile
├── ccnet
├── conf
├── logs
├── pro-data
├── seafile-data
└── seahub-data
所有的seafile配置文件存储在
/opt/seafile-data/seafile/conf
这个目录,Nginx的配置文件目录
/opt/seafile-data/nginx/conf
。
修改配置文件需要重新启动 Seafile 生效:
docker compose restart
所有的Seafile日志文件存储在目录
/opt/seafile-data/seafile/logs
,
其他日志文件都在目录
/opt/seafile-data/logs/var-log
。
备份和恢复
垃圾回收
在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行"
GC
"程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。
常见问题
如何进入docker 容器内部排查错误?
docker exec -it seafile /bin/bash
如果忘记了Seafile的管理员账号或密码,如何创建新的管理员账户?
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
运行命令时,Seafile 服务必须处于运行状态。
如果安装失败,如何恢复初始状态重新开始安装?
删除
opt/seafile
,
/opt/seafile-data
和
/opt/seafile-mysql
这三个目录即可重新开始安装。
容器启动期间出现了问题,如何查看更多信息?
可以使用此命令查看 Docker 日志:
docker compose logs -f
。
Seafile 如何使用缓存?
Seafile 在许多情况下使用缓存来提高性能。内容包括但不限于用户会话信息、头像、个人资料、数据库记录等。从 Seafile Docker 13 开始,
Redis 作为默认缓存服务器来支持新功能(请参阅
upgradte notes),它已集成在 Seafile Docker 13 中,可以直接在.env中进行配置,
默认情况下不需要额外的设置
)
集
成在 Seafile Docker 中的 Redis 安全吗?它有访问密码吗?
Seafile Docker 集成的 Redis 默认没有设置密码,只能通过 Docker 专网访问,不会对外暴露服务端口。当然,如有必要,您也可以为其设置密码。您可以在
.env
设置
REDIS_PASSWORD
并移除
seafile-server.yml
中注释内容来启用 Redis 密码
:
services:
...
redis:
image: ${SEAFILE_REDIS_IMAGE:-redis}
container_name: seafile-redis
# remove the following comment markers
command:
- /bin/sh
- -c
- redis-server --requirepass "$${REDIS_PASSWORD:?Variable is not set or empty}"
networks:
- seafile-net
...
出于某种原因,如果仍然必须使用 Memcached 作为缓存服务器,应该怎么做?
如果您仍想使用 Memcached(Seafile Docker 13 未提供),只需按照以下步骤作:
-
将 CACHE_PROVIDER 设置为 memcached 并修改 .env 中的 MEMCACHED_xxx
-
删除在 seafile-server.yml 的 redis 部分和 redis 依赖项 部分。
也可以在服务启动后对缓存服务器进行更改(通过在
.env
),但相应的配置文件不会直接更新(例如
seahub_settings.py
,
seafile.conf
和
seafevents.conf
)中。为避免歧义,我们建议您更新这些配置文件。