前置步骤
首先要求你当前镜像版本处于3.8.x,如果是3.x任意版本,那么修改镜像tag为3.8.3即可,例如:
注意:仅写了针对SQLite的情况,如有外部数据库与此类似
services:
cloudreve:
container_name: cloudreve
image: cloudreve/cloudreve:3.8.3 #修改这里
restart: unless-stopped
volumes:
- /home/cloudreve/data:/data
- /home/cloudreve/uploads:/cloudreve/uploads
- /home/cloudreve/downloads:/cloudreve/downloads
- /home/cloudreve/avatar:/cloudreve/avatar
- /home/cloudreve/conf.ini:/cloudreve/conf.ini
- /home/cloudreve/cloudreve.db:/cloudreve/cloudreve.db
- /xxx/xxx/share:/share #自己额外映射的数据目录可加
network_mode: "host"
#extra_hosts:
#- "host.docker.internal:host-gateway"
在更新到3.8.x后,请按照v3升级文档说明停止容器和备份你的文件↓
如无特殊声明,以下命令均在
docker-compose.yml文件所处的目录运行
文件备份
首先,创建一个新文件夹,例如v3
mkdir v3
并将 conf.ini 以及 cloudreve.db 移动到v3目录,另复制一份conf.ini到data目录下
cp conf.ini v3
cp conf.ini data
mv cloudreve.db v3
mv docker-compose.yml v3
修改conf.ini
如果你一开始就像我上面的docker-compose.yml配置且从未自行修改过conf.ini,那么你需要在这时修改conf.ini为以下形式来符合升级程序的要求
[System]
Debug = false
Mode = master
Listen = :5212
SessionSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HashIDSalt = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[Database]
; 数据库类型,目前支持 sqlite/mysql/mssql/postgres
Type = sqlite
; 数据库地址
Host = 127.0.0.1
; 字符集
Charset = utf8mb4
; SQLite 数据库文件路径
DBFile = /cloudreve/v3/cloudreve.db
; 进程退出前安全关闭数据库连接的缓冲时间
GracePeriod = 30
; 使用 Unix Socket 连接到数据库
UnixSocket = false
注意事项:
- 如果你的
conf.ini中缺失了HashIDSalt,自行填写一个随机字符串即可保证正常升级,但你的分享链接将会当场去世,这是无法解决的。 DBFile的路径非常重要,它应当是你在docker-compose.yml中映射的目标目录,此处增加的v3是我们移动过去的,在v4的docker-compose.yml文件中需要重新映射
创建v4的docker-compose.yml
直接下载仓库内的配置文件即可,或复制我下面的配置文件,注意将映射的目录改成自己先前映射的目录,以及版本号先改为4.0.0
wget https://raw.githubusercontent.com/cloudreve/Cloudreve/refs/heads/master/docker-compose.yml
如下所示,注意如有额外的数据目录,那么目录映射应保持与V3一致
services:
cloudreve:
image: cloudreve/cloudreve:4.0.0
container_name: cloudreve-backend
depends_on:
- redis
restart: unless-stopped
ports:
- 5212:5212
environment:
- CR_CONF_Database.Type=sqlite
- CR_CONF_Database.DBFile=/cloudreve/data/cloudreve.db
- CR_CONF_Redis.Server=redis:6379
volumes:
- /home/cloudreve/data:/cloudreve/data
- /xxx/xxx/share:/share #自己额外映射的数据目录可加
#v3upgrade
- /home/cloudreve/v3:/cloudreve/v3 #此处很重要,方便我们执行升级程序
- /home/cloudreve/uploads:/cloudreve/uploads #默认上传路径
- /home/cloudreve/avatar:/cloudreve/avatar
redis:
image: redis:latest
container_name: redis
restart: unless-stopped
volumes:
- /home/cloudreve/redis:/data
修改完成后,关闭此文件备用
修改v4的conf.ini
先前我们复制了一份conf.ini到data目录下,此时我们修改它如以下样式
这里仍然最需要注意的是HashIDSalt与DBFile,DBFile路径应当为容器内映射的目录
vi data/conf.ini
[System]
Debug = false
Mode = master
Listen = :5212
[System]
; 运行模式,可选值为 master/slave
Mode = master
; HTTP 监听端口,默认为 5212
Listen = :5212
; 是否开启 Debug 模式,默认为 false
Debug = false
; 呈递客户端 IP 时使用的 Header,默认为空。如果该 Header 由多个使用 `,` 分隔的 IP 构成,Cloudreve 会取用首个作为客户端 IP
; 对于配置反向代理的部署,可以取值为 X-Forwarded-For。但是,请注意,由于潜在的 XFF 注入问题,仅在确认可信的情况下使用
ProxyHeader =
; 进程安全退出的最长缓冲时间,默认为 0,不限制
GracePeriod = 0
; 日志级别,可选值为 debug/info/warning/error,默认为 info
LogLevel = info
SessionSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HashIDSalt = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; 启用 Unix Socket 监听
[UnixSocket]
; Unix Socket 监听路径,默认为空
; Listen = /run/cloudreve/cloudreve.sock
; 设置产生的 socket 文件的权限,默认为空
Perm = 0666
; 数据库相关,如果你只想使用内置的 SQLite 数据库,这一部分直接删去即可
[Database]
; 数据库类型,目前支持 sqlite/mysql/postgres/mariadb,默认为 sqlite
Type = sqlite
; 数据库端口,默认为 3306
Port = 3306
; 用户名,默认为空
User =
; 密码,默认为空
Password =
; 数据库地址,默认为空
Host = 127.0.0.1
; 数据库名称,默认为空
Name = cloudreve
; 连接字符集,默认为 utf8mb4
Charset = utf8mb4
; SQLite 数据库文件路径,默认为 data/cloudreve.db
DBFile = /cloudreve/data/cloudreve.db
; 使用 Unix Socket 连接到数据库,默认为 false,如需开启,请在 Host 中指定 Unix Socket 路径
UnixSocket = false
; 数据库连接字符串,如果设置,其他数据库配置将忽略,但 Type 仍需设置。
; 例如:root:123456@tcp(127.0.0.1:3306)/cloudreve?charset=utf8mb4&parseTime=True&loc=Local 用于 MySQL。
DatabaseURL =
; 跨域配置
[CORS]
AllowOrigins = *
AllowMethods = OPTIONS,GET,POST
AllowHeaders = *
AllowCredentials = false
; Redis 相关
[Redis]
; 连接类型,默认为 tcp
Network = tcp
; 服务器地址,默认为空,不启用
Server = 127.0.0.1:6379
; 密码,默认为空
Password =
; 数据库,默认为 0
DB = 0
; 用户名,默认为空
User =
; 是否使用 TLS 连接到 Redis,默认为 false
UseTLS = false
; 是否跳过 TLS 验证,默认为 false
TLSSkipVerify = false
修改完成后,保存备用
执行升级(主要内容)
这里是重点,如果你按我的路径去写,那么直接运行即可;如果你自己做了修改,那么请以你修改的为准。
这里需要注意的是,目录必须是容器内部的路径!!!必须是容器内部的路径!!!必须是容器内部的路径!!!
docker compose run --rm --entrypoint ./cloudreve cloudreve migrate --v3-conf v3/conf.ini -c data/conf.ini
运行后将直接开始执行数据库升级,运行完成后将自动退出并删除容器。
在这之后你就可以修改v4的docker-compose.yml,将image tag修改为latest,并执行以下命令更新并启动镜像
docker compose pull
docker compose up -d