大家好,我是开心哥!

memos更新到0.22.0版本后,配置的存储策略minio忽然不能用了,上去一看,少了url相对应的字段信息,去github上找解决方案,看着很多人提出问题,但是官方没有给到解决方案,很是不理解,用的好好的怎么忽然就更新了呢;

在刚开始我也曾各种尝试其他方式绕过去,发现都不好使,媳妇又经常用,迫不得已我先恢复着用0.21版本,想着后期在想办法吧;

近期,想着看看这个问题解决了没有,在github上查了很久,看到了一条我无法拒绝的理由,安全,memos成员的回复(点击查看)让我了解到他们是不会改变的,安全问题确实让我们无言以对;

然后在各种issue里边找方案,还真找到几种方案,有大神都验证过了,切实可用,我在参考他们的方案后,自己融合了一下,最后形成了一种适合自己的方案。

1、环境介绍

全都是https域名+端口号访问方式

minio

docker安装的minio,并做反向代理+ssl证书

memos

docker安装的memos,并做反向代理+ssl证书

2、memos安装操作

升级

如果是升级memos,最好是从0.21升级到0.22.0版本,然后一个小版本小版本升级确认是否可用,我直接升级到latest,干崩了,后来一个一个版本升级的,现在用的是0.22.5。

从0.21升级到0.22.0后,tag标签需要重新生成一下

安装

就是正常的安装,重点在配置minio

注意:

memos0.22大版本使用mysql会出现官方未修复错误

failed to create resource: Error 1406 (22001): Data too long for column 'reference' at row 1

解决办法:

ALTER TABLE resource MODIFY COLUMN reference TEXT;

2、minio安装操作(重点)

Path style 和 Virtual hosted style 是 S3 存储服务 URL 的两种构建方式。

在memos0.21版本的时候,s3对象存储(minio)中用的是Path style的URL构建方式,Bucket是在后边拼接,一个域名就能搞定例如我的域名是https://minio.bangkaixin.com:9001,Bucket是memos,那么在我们请求的时候他是类似https://minio.bangkaixin.com:9001/memos的格式;

而在memos0.22.0版本升级后,s3对象存储(minio)中用的是 Virtual hosted style的URL构建方式,Bucket会拼接在Endpoint的前边,例如我的域名是https://minio.bangkaixin.com:9001,Bucket是memos,请求的时候就是https://memos.minio.bangkaixin.com:9001;

我一开始想着无非就是多一个域名解析就可以了,尝试过后,发现还是不行,最后查询与尝试后发现需要在创建minio的时候添加上MINIO_DOMAIN环境变量,也就是需要支持Virtual hosted style的URL构建方式

我们如果想在memos0.22.0版本后使用s3对象存储(minio),需要增加环境变量MINIO_DOMAIN,让minio支持Virtual hosted style的访问方式(Minio不配置MINIO_DOMAIN的影响);

假如我们平常访问minio的时候域名为https://minio.bangkaixin.com:9001,我们需要设置MINIO_DOMAIN字段为minio.bangkaixin.com就可已使用;

按照要求安装好minio后,剩下的就是配置域名证书了

最好使用可以自动续时间的域名证书管理工具;

假如我们在minio存储memos附件的Bucket是memos

memos0.21版本时,我们的minio只需要一个域名就可以,minio.bangkaixin.com

memos0.22.0版本后,我们的minio需要两个域名minio.bangkaixin.com,memos.minio.bangkaixin.com,申请证书的时候申请多域名证书即可,通配符证书我试着不能使用。

例如我这用acme.sh在群晖上申请了多域名证书,两个域名都可以使用

也用1panel上申请多域名证书尝试确认都可以使用。

在这两个平台上我都是做了一层反向代理,指向本地或者其他ip的minio服务,都很好用。

3、在memos上配置使用s3对象存储(minio)

就是正常填写即可

填完正常使用即可,别忘了改memos中reference 字段的大小