cloudreve 升级 V4 遇到的问题

官方教程:从 V3.x.x 升级 | Cloudreve

Fine,官方教程教的很好,但我是用docker compose部署的,并且我倒霉的在备份的时候丢了conf.ini文件(dockerfile中通过./cloudreve/conf.ini:/cloudreve/conf.ini挂载,但在cp conf.ini 的时候不知道为什么,得到的是空文件),因此写这篇文章记录一下遇到的坑。

首先,docker-compose 文件基本不用更改,部分内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cloudreve:
container_name: cloudreve
image: cloudreve/cloudreve:latest
restart: unless-stopped
ports:
- "5212:5212"
volumes:
- ./cloudreve/data:/cloudreve/data
- ./cloudreve/uploads:/cloudreve/uploads
- ./cloudreve/conf.ini:/cloudreve/conf.ini
- ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
- ./cloudreve/avatar:/cloudreve/avatar
depends_on:
- aria2
networks:
- net

首先,我们要知道V3的cloudreve.dbconf.ini存储位置是/cloudreve/下,而在V4版本中,其存储位置是/cloudreve/data

因此,在备份(请一定记得备份cloudreve.dbcloudreve.dbconf.ini之后,可以直接保持原来的形式都不变化,然后在本地的./cloudreve/下创建了data文件夹后,就可以直接启动docker compose up -d,拉去最新的镜像了。

容器启动后,就可以发现在本地的./cloudreve/data下已经出现了cloudereve.dbconf.ini文件,这是V4新版本的文件,而我们的旧版本配置和数据库文件仍然位于./cloudreve/conf.ini./cloudreve/cloudreve.db

这个时候,通过docker exec -it xxxxxx /bin/sh进入容器,然后直接使用升级工具

1
2
# 运行升级工具
./cloudreve migrate --v3-conf conf.ini -c data/conf.ini

会发现出现如下问题

``hash ID salt is not set, please set it from v3 conf file`

其原因在于我的conf.ini 是空的,官方教程中表明可以按照如下操作进行

  1. 在 V3 的配置文件 conf.ini[System] 配置项中添加 HashIDSalt 配置项,并填写一个随机值;
  2. 重试升级程序.

然后,就会发现出现了如下问题:

Failed to migrate: failed to create setting hash_id_salt: ent: constraint failed: constraint failed: UNIQUE constraint failed: settings.name (2067)

其原因在与,他初始化的表中有hash_id_salt字段,出现了唯一冲突,这时需要连接数据库,删除这个记录

由于我直接使用了sqlite,我将./cloudreve/data/cloudreve.db scp 出来后,直接用 datagrip 连接上后,就可以做delete操作了,这边建议直接删除整个settings表

当然删除这个仍然不够,会发现还有别的表也会出现这个限制,逐一删除对应的表即可,最终会删除settingsnodesstorage_policiesgroups表,即可完成迁移。

建议使用指令:./cloudreve migrate --v3-conf conf.ini -c data/conf.ini --force-reset全部重来,