部署专业版

本手册解释了如何在 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 内存。
    • 使用 SeaSearch ,一个基于开源搜索引擎 ZincSearch 构建的轻量级搜索引擎,作为索引器。
    • 在另一台机器上部署 Elasticsearch,并在 seafevents.conf 文件中修改 es_host es_port
文档约定
本文档使用以下约定:
  • /opt/seafile 是 Seafile 的目录。 如果您将 Seafile 放在不同的目录中,请相应地调整所有路径。
  • Seafile 使用两个 Docker 卷 来保存其数据库和 Seafile Docker 容器中生成的数据。 卷的 主机路径 分别是 /opt/seafile-mysql /opt/seafile-data ,不建议更改这些路径。 如果您更改了路径,请在按照这些说明进行操作时考虑到这一点。
  • Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。
安装 Docker
请选择适用于您的操作系统进行安装 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.0Github镜像源)
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 )中。为避免歧义,我们建议您更新这些配置文件。