Seafile 迁移升级记录

Seafile 迁移升级记录

IT, 其他

由于以前部署的 Seafile 的宿主机年久失修,Seafile 也停留在 7.0.x 版本,因此在这次切换到托管在 MyLoc 的服务器以后,决定完全迁移重建,下面是过程的记录。

备份数据

由于我使用 Seafile 后端是 S3 OSS,因此需要备份的只有 Seafile 数据库,配置文件。 S3 OSS 部分直接使用 Rclone 同步到 MyLoc 的 MINIO 中。

Seafile的配置文件均位于 seafile/conf 中,包含 ccnet.confgunicorn.conf.pyseafdav.confseafevents.confseafile.confseahub_settings.py。这些文件包含了原始的数据库配置信息,稍后需要根据情况进行修改。

迁移到 Docker

初始化 Docker 环境

由于 Seafile Pro 7.0.x 的依赖是 4 年前的,Python依赖已经 EOL,因此我选择将数据全部迁移到 Docker 环境,并依次升级。首先是将非 Docker 的配置和数据迁移到 Docker 中。为此我们需要与原始环境相同版本的 Seafile Docker,幸运的是 Seafile Pro 的 Regisrty 提供从 7.0 开始的各种镜像。运行如下指令即可获取 Docker Regisrty 全部可用的版本号:


~# curl -u seafile:zjkmid6rQibdZ=uJMuWS -X GET https://docker.seadrive.org/v2/seafileltd/seafile-pro-mc/tags/list

得到如下列表:


{
  "name": "seafileltd/seafile-pro-mc",
  "tags": [
    "10.0-latest",
    "10.0.10",
    "10.0.10-arm",
    "10.0.11",
    "10.0.11-arm",
    "10.0.12",
    "10.0.12-arm",
    "10.0.13",
    "10.0.13-arm",
    "10.0.14",
    "10.0.14-arm",
    "10.0.15",
    "10.0.15-arm",
    "10.0.16",
    "10.0.16-arm",
    "10.0.4",
    "10.0.5",
    "10.0.6",
    "10.0.7",
    "10.0.8",
    "10.0.9",
    "10.0.9-arm",
    "11.0-latest",
    "11.0.2-testing",
    "11.0.4",
    "11.0.4-arm",
    "11.0.5",
    "11.0.5-arm",
    "11.0.6",
    "11.0.6-arm",
    "11.0.7",
    "11.0.7-arm",
    "11.0.8",
    "11.0.8-arm",
    "11.0.9",
    "11.0.9-arm",
    "7.0.13",
    "7.0.7",
    "7.1.14",
    "7.1.17",
    "7.1.22",
    "8.0.10",
    "8.0.11",
    "8.0.12",
    "8.0.14",
    "8.0.16",
    "8.0.17",
    "9.0.10",
    "9.0.11",
    "9.0.12",
    "9.0.13",
    "9.0.14",
    "9.0.15",
    "9.0.16",
    "9.0.4",
    "9.0.5",
    "9.0.6",
    "9.0.7",
    "9.0.8",
    "9.0.9",
    "latest"
  ]
}

那么,导入数据就从 7.0.13 版本开始。官方提供了迁移指南,但是为了不在宿主系统安装额外的数据库,方便维护,因此我依据官方提供的 docker-compose.yml 将服务全部转移到 Docker 环境中。

在开始之前需要登录 Docker Regisrty:

~# docker login docker.seadrive.org

下载 docker-compose.yml 样例:

mkdir /opt/seafile
cd /opt/seafile

# Seafile PE 7.1 and 8.0
wget -O "docker-compose.yml" "https://manual.seafile.com/docker/docker-compose/pro/7.1_8.0/docker-compose.yml"

修改配置文件,配置 MariaDB 的 ROOT 密码,Seafile 的默认用户等。随后为数据持久化创建所需文件夹:

~# mkdir /opt/seafile-data
~# mkdir /opt/seafile-mysql
~# mkdir -p /opt/seafile-elasticsearch/data
~# chmod 777 -R /opt/seafile-elasticsearch/data

随后运行一次 Docker,生成相应的配置文件,同时可以直接访问80端口确认服务是否运行正常。确认功能正常后,即可停止 Docker:

~# cd /opt/seafile-data
~# docker compose up -d
~# docker compose down # Stop after verified

导入数据库

由于前一步生成的数据库在后续步骤中不会被用到,因此可以通过删除持久化数据库文件 rm -rf /opt/seafile-mysql/* 或者 DROP 数据表实现。仅启动 MySQL:

~# docker compose up -d db

根据在 docker-compose.yml 中预设的 Root 密码登录,并导入备份的数据库:

~# docker exec -i seafile-mysql mysql -u root -p$Password < backup.sql

随后登入该数据库,创建数据库用户并赋予权限:

~# docker exec -it seafile-mysql mysql -u root -p # Login SQL to modify database
MariaDB [(none)]> CREATE USER 'seafile'@'%.%.%.%' IDENTIFIED BY 'your_password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `ccnet`.* TO 'seafile'@'%.%.%.%';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `seafile-db`.* TO 'seafile'@'%.%.%.%';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `seahub-db`.* TO 'seafile'@'%.%.%.%';
MariaDB [(none)]> FLUSH PRIVILEGES;

修改完成后使用 seafile 用户登录检查数据库,确保能够正常连接。

修改配置文件

完成数据库导入后即可修改 Seafile 的配置文件适配该数据库内容。需要修改 ccnet.conf, seafevents.conf, seafile.conf, seahub_settings.py ,只需要修改数据库的名称,用户名,密码即可。在我的配置中,还有 S3 OSS 的 backend 以及 memcached 需要依据新的环境修改配置。通常在修改配置文件,使之与数据库配置对应以后即可正常运行。

若环境中 S3 使用的是自签证书,则还需要修改配置文件,添加自签 CA 证书。比较简单的方式是在宿主系统中添加 CA,使用 CURL 等工具确认已加入信任后,将整个 /etc/ssl/certs 以只读方式挂载到 seafile 服务的容器中,即修改 volumes 挂载:

volumes:
- /opt/seafile-data:/shared # Required, specifies the path to Seafile data persistent store.
- /etc/ssl/certs:/etc/ssl/certs:ro # Server Certs

随后启动 Docker:
~# docker compose up -d[/bash] 此时迁移工作已经完成,通常可以通过浏览器访问 Seafile 文件。如果需要求改反向代理,也可以直接修改 /opt/seafile-data/nginx/conf/seafile.nginx.conf 以适配环境。

升级 Seafile

这个步骤中 Docker 的好处会更为明显,在修改 Docker 镜像版本,适配 compose 配置以后,即可升级 Seafile 版本。升级路径可以查看官方文档

根据说明内容,依次将版本号升级为:7.0->7.1->8.0->9.0->10.0->11.0
只需要使用每个 Major 版本的最后一个 patch release 即可。

其中 7.0→8.0 之间无需修改 docker-compose.yml ,只要升级完成能够访问 Seafile 网页即可视为完成升级。

在 8.0→9.0 的升级中,需要升级依赖:

  • mariadb 的版本升级到 10.6,添加环境变量 MARIADB_AUTO_UPGRADE=1
  • memcached 升级到 1.6.18;
  • elasticsearch 切换到官方镜像 7.16.2;

在 9.0→10.0 的升级中需要升级依赖:

  • mariadb 的版本升级到 10.11;
  • elasticsearch 依次升级为 7.17.5 和 8.6.2,并添加环境变量 "xpack.security.enabled=false" ,若直接升级 8.6.2 则会遇到 “log.level”:“ERROR”, “message”:“fatal exception while booting Elasticsearch”, “ecs.version”: “1.2.0”,“service.name”:“ES_ECS” …

升级到最新的 v11 无需修改其他配置。

参考内容

https://manual.seafile.com/docker/non_docker_to_docker/

https://manual.seafile.com/upgrade/upgrade_docker/

https://manual.seafile.com/docker/pro-edition/deploy_seafile_pro_with_docker/

https://bbs.seafile.com/t/topic/19304

Amefs, EFS, IT, Linux, Seafile
上一篇文章
pfSense 配置 AdGuardHome

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Fill out this field
Fill out this field
请输入有效的电子邮箱地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

keyboard_arrow_up