用 Docker 部署 Seafile 专业版

快速开始

安装 Docker

因为 Seafile v7.x.x 及以后版本容器是通过 Docker 运行的,所以您应该先在服务器上安装 Docker。

CentOS 中安装 Docker

Ubuntu 中安装 Docker

下载并修改 docker-compose.yml

Seafile 7.1 到 8.0 版本下载 URL: docker-compose.yml

Seafile 9.0 版本下载URL: docker-compose.yml

Seafile10.0 版本下载URL: docker-compose.yml

示例文件到您的服务器上,然后根据您的实际环境修改该文件。尤其是以下几项配置:

注意:seafile 9.0 版本,需要手动在宿主机上创建 elasticsearch 的映射路径,并且给 777 权限,否则 elasticsearch 启动会报路径权限问题,命令如下

mkdir -p /opt/seafile-elasticsearch/data  && chmod 777 -R /opt/seafile-elasticsearch/data

启动 Seafile 服务

执行以下命令启动 Seafile 服务

docker compose up -d

需要等待几分钟,等容器首次启动时的初始化操作完成后,您就可以在浏览器上访问http://<你的 seafile 域名> 来打开 Seafile 主页。

注意:您应该在 docker-compose.yml文件所在的目下执行以上命令。

安装授权文件(seafile-license.txt)

如果您已经向 Seafile 软件商购买了专业版的授权文件seafile-license.txt,您只需要将该授权文件拷贝至 Seafile 数据持久化目录中的seafile/目录下,然后重启docker容器,即可完成授权文件的安装。 假如,Seafile 数据持久化目录为/opt/seafile-data,那么,在您的宿主机上执行以下操作:

cp /path/to/seafile-license.txt /opt/seafile-data/seafile/

然后重启这个容器:

docker compose restart

更多配置项

自定义管理员用户名和密码

默认的管理员账号是 me@example.com 并且该账号的密码是 asecret,您可以在 docker-compose.yml 中配置不同的用户名和密码,为此您需要做如下配置:

seafile:
    ...

    environment:
        ...
        - SEAFILE_ADMIN_EMAIL=me@example.com
        - SEAFILE_ADMIN_PASSWORD=a_very_secret_password
        ...

使用 Let's encrypt SSL 证书

如果您把 SEAFILE_SERVER_LETSENCRYPT 设置为 true,该容器将会自动为您申请一个 letsencrypt 机构颁发的 SSL 证书,并开启 https 访问,为此您需要做如下配置:

seafile:
    ...
    ports:
        - "80:80"
        - "443:443"
    ...
    environment:
        ...
        - SEAFILE_SERVER_LETSENCRYPT=true
        - SEAFILE_SERVER_HOSTNAME=seafile.example.com
        ...

如果您想要使用自己的 SSL 证书,而且如果用来持久化存储 Seafile 数据的目录为 /opt/seafile-data,您可以做如下处理:

如果 SEAFILE_SERVER_LETSENCRYPT 设置为 true,遇到了 Seafile 无法启动并且有如下错误
subprocess.CalledProcessError: Command '/scripts/ssl.sh /shared/ssl cloud.seafile-demo.de' returned non-zero exit status 128.

容器中的脚本 /scripts/ssl.sh 需要修改内容, git clone git:// 替换为 git clone https://

您需要重启服务以使其生效:

docker compose restart

自 9.0.6 版本后,我们使用 acme 代替 acme-tiny 来获取证书,并修复了这个问题。

修改 Seafile 服务的配置

Seafile 的配置文件存放在 shared/seafile/conf 目录下,您可以根据Seafile 手册的指导来修改这些配置项。

一旦修改了配置文件,您需要重启服务以使其生效:

docker compose restart

查找日志

您可以使用以下命令来查看 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

增加一个新的管理员

确保各容器正常运行,然后执行以下命令:

docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh

根据提示输入用户名和密码,您现在有了一个新的管理帐户。

Seafile 目录结构

/shared

共享卷的挂载点,您可以选择在容器外部存储某些持久性信息.在这个项目中,我们会在外部保存各种日志文件和上传数据。 这使您可以轻松重建容器而不会丢失重要信息。

升级 Seafile 服务

如果要升级 Seafile 服务到最新版本:

docker pull docker.seafile.top/seafileltd/seafile-pro-mc:latest
docker compose down
docker compose up -d

备份和恢复

目录结构

我们假设您的 seafile 数据卷路径是 /opt/seafile-data,并且您想将备份数据存放到 /opt/seafile-backup 目录下。

您可以创建一个类似以下 /opt/seafile-backup 的目录结构:

/opt/seafile-backup
---- databases/  用来存放 MySQL 容器的备份数据
---- data/  用来存放 Seafile 容器的备份数据

要备份的数据文件:

/opt/seafile-data/seafile/conf  # configuration files
/opt/seafile-data/seafile/seafile-data # data of seafile
/opt/seafile-data/seafile/seahub-data # data of seahub

备份数据

步骤:

  1. 备份 MySQL 数据库数据;
  2. 备份 Seafile 数据目录;

  3. 备份数据库:

    # 建议每次将数据库备份到一个单独的文件中。至少在一周内不要覆盖旧的数据库备份。

    ``` cd /opt/seafile-backup/databases docker exec -it seafile-mysql mysqldump -uroot -p --opt ccnet_db > ccnet_db.sql docker exec -it seafile-mysql mysqldump -uroot -p --opt seafile_db > seafile_db.sql docker exec -it seafile-mysql mysqldump -uroot -p** --opt seahub_db > seahub_db.sql

    ```

    注释:-p 后面是mysql的root用户登录密码,不要有空格

  4. 备份 Seafile 资料库数据:

    • 直接复制整个数据目录

      ```bash cp -R /opt/seafile-data/seafile /opt/seafile-backup/data/ cd /opt/seafile-backup/data && rm -rf ccnet

      ```

    • 使用 rsync 执行增量备份

      ```bash rsync -az /opt/seafile-data/seafile /opt/seafile-backup/data/ cd /opt/seafile-backup/data && rm -rf ccnet

      ```

恢复数据

垃圾回收

在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行"GC"程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。

GC 脚本被放在docker容器的 /scripts 目录下。执行 GC 的方法很简单:docker exec seafile /scripts/gc.sh。对于社区版来说,该程序会暂停 Seafile 服务,但这是一个相对较快的程序,一旦程序运行完成,Seafile 服务也会自动重新启动。而专业版提供了在线运行 GC 的功能,不会暂停 Seafile 服务。

用 Docker 部署 OnlyOffice

您需要手动将 OnlyOffice 相关配置写入 docker-compose.yml 文件中

用 Docker 部署 OnlyOffice

用 Docker 部署 Clamav

您需要手动将 Clamav 相关配置写入 docker-compose.yml 文件中

用 Docker 部署 Clamav

S3/Swift/Ceph

常见问题

您可以运行 ******docker exec**** 之类的docker命令来查找错误。**

docker exec -it seafile /bin/bash

LetsEncrypt SSL 证书将要过期

如果证书没有自动更新,需要执行命令 /scripts/ssl.sh /shared/ssl/ <你的 seafile 域名> 以手动更新证书。

例如:/scripts/ssl.sh /shared/ssl/ example.seafile.com

SEAFILE_SERVER_LETSENCRYPT=false 改为 true

在使用 http 一段时间后,想改为 https,需要移走并备份 seafile.nginx.conf

mv /opt/seafile/shared/nginx/conf/seafile.nginx.conf /opt/seafile/shared/nginx/conf/seafile.nginx.conf.bak

启动新的容器,将会自动申请证书

docker compose down
docker compose up -d

您还需要手动将其他陪配置文件中的 http 改为 https,系统管理员页面中的 SERVICE_URL、FILE_SERVER_ROOT 也需要修改。

如果曾经改动过旧的 seafile.nginx.conf,现在可以按照您想要的内容修改新的 seafile.nginx.conf,然后执行以下命令使 nginx 配置生效。

docker exec seafile nginx -s reload

Last modified by 马宇航, 2023-10-13

快速开始
安装 Docker
下载并修改 docker-compose.yml
启动 Seafile 服务
安装授权文件(seafile-license.txt)
更多配置项
自定义管理员用户名和密码
使用 Let's encrypt SSL 证书
修改 Seafile 服务的配置
查找日志
增加一个新的管理员
Seafile 目录结构
code>/shared
升级 Seafile 服务
备份和恢复
目录结构
备份数据
恢复数据
垃圾回收
用 Docker 部署 OnlyOffice
用 Docker 部署 Clamav
S3/Swift/Cep
常见问题