cloudreve 升级 V4 遇到的问题
cloudreve 升级 V4 遇到的问题
Fine,官方教程教的很好,但我是用docker compose
部署的,并且我倒霉的在备份的时候丢了conf.ini
文件(dockerfile
中通过./cloudreve/conf.ini:/cloudreve/conf.ini
挂载,但在cp
conf.ini
的时候不知道为什么,得到的是空文件),因此写这篇文章记录一下遇到的坑。
首先,docker-compose 文件基本不用更改,部分内容如下
1 | cloudreve: |
首先,我们要知道V3的cloudreve.db
和conf.ini
存储位置是/cloudreve/
下,而在V4版本中,其存储位置是/cloudreve/data
下
因此,在备份(请一定记得备份cloudreve.db
)cloudreve.db
和conf.ini
之后,可以直接保持原来的形式都不变化,然后在本地的./cloudreve/
下创建了data
文件夹后,就可以直接启动docker compose up -d
,拉去最新的镜像了。
容器启动后,就可以发现在本地的./cloudreve/data
下已经出现了cloudereve.db
和conf.ini
文件,这是V4新版本的文件,而我们的旧版本配置和数据库文件仍然位于./cloudreve/conf.ini
和./cloudreve/cloudreve.db
下
这个时候,通过docker exec -it xxxxxx /bin/sh
进入容器,然后直接使用升级工具
1 | # 运行升级工具 |
会发现出现如下问题
``hash ID salt is not set, please set it from v3 conf file`
其原因在于我的conf.ini
是空的,官方教程中表明可以按照如下操作进行
- 在 V3 的配置文件
conf.ini
的[System]
配置项中添加HashIDSalt
配置项,并填写一个随机值; - 重试升级程序.
然后,就会发现出现了如下问题:
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表
当然删除这个仍然不够,会发现还有别的表也会出现这个限制,逐一删除对应的表即可,最终会删除settings
,nodes
,storage_policies
,groups
表,即可完成迁移。
建议使用指令:./cloudreve migrate --v3-conf conf.ini -c data/conf.ini --force-reset
全部重来,