Categories
Operations

Seafile 6.3 升级 7.x 避坑指南

#前言:我只试过docker版

官方升级指南在这里:https://cloud.seafile.com/published/seafile-manual-cn/docker/6.3_%E5%8D%87%E7%BA%A7%E5%88%B0_7.0.md

截至2020年12月16日我升级的时候,官方指南依然存在两个问题

第一个问题,是数据库无法直接迁移到docker-compose下的mariadb,原因是之前有部分的数据表是myisam存储引擎,你会遇到诸如:“Column last_update in table “mysql”.”innodb_table_stats” is INT UNSIGNED NOT NULL but should be BINARY”这类的问题,如果按照网上的说法,删除数据表再去重建,太费事了。因此在升级前,建议直接进老版本的docker容器内,把三个数据库(ccnet_db,seafile_db,seahub_db)都全部mysqldump出来

然后改一下docker-compose,只保留mariadb这一项服务,注意把挂载路径改到临时路径去,代码在这:

version: '2.0'
services:
db:
image: mariadb:10.1
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=root # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
volumes:
- /tmp/seafile-mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net

然后用docker-compose up -d跑起来,这个时候因为临时路径里没有数据库,所以容器内的mysql会自己初始化一个,然后进容器系统,把之前mysqldump导出的数据库,挨个导入进去,用户root的密码也是root,后续需要输入的。

接着,要创建用户和分配权限,用这一行命令:

for database in {ccnet_db,seafile_db,seahub_db}; do /usr/bin/mysql -e "grant all on ${database}.* to 'seafile'@'%.%.%.%' identified by '467fa02f-bf9a-4afb-9300-c4683073162a';"; done

然后你就可以停掉docker-compose的数据库了,把/tmp/seafile-mysql/db 拷贝到你的工作目录,比如 /opt/seafile-mysql

第二个问题,这个问题就比较无语了,官方的docker里面,居然没有python,在升级时就会报错:Can’t find a python executable of version 2.7 or above in PATH

你在宿主机怎么安装python都没用,因为都是跑docker的,所以你得自己制作一下官方镜像,方法也比较简单,如下:

编辑Dockerfile,在里面写下以下内容:
FROM seafileltd/seafile-mc:latest
RUN apt-get update && apt-get upgrade -y && apt-get install -y python python-configparser

然后执行 docker build -t seafile-mc . (末尾有英文半角符号句号)

等待片刻,完成后修改官方的docker-compose.yml,把里面的官方镜像换成 seafile-mc:latest

完成以上步骤,就可以升级了。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.