抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

背景

最近在调研一款能管理我的tencent-cos的在线管理端软件,然后调研了很多软件,之前试用过nextcloud发现一般,然后看中了minio,看评测说性能比较好,并且支持S3协议。

在实际使用过程中是使用的docker部署,具体命令如下,对应文档可以点击minio-gateway

1
2
3
4
docker run -p 9000:9000 --name minio-s3 \
-e "MINIO_ACCESS_KEY=access_key" \
-e "MINIO_SECRET_KEY=secret_key" \
minio/minio gateway s3 https://cos.ap-beijing.myqcloud.com

然而在我将信息填入以后,发现始终无法创建,提示:ERROR Unable to initialize gateway backend: Could not parse the specified URI.
然而通过中心搜索并不能寻找到结果,然后使用全英文搜索就找到问题所在了,原因是:tencent-cos的bucket命名是以: bucket名+个人的账号数字为命名方式的,和minio的默认创建桶的方式不一样,所以始终提示该错误。

改造过程

既然问题已经找到,剩下的问题就解决问题了,解决问题一般有两种方案,一般是解决创造问题的人,一种是直接解决,然而通过腾讯云的工单并不能解决问题,直接说是第三方的原因导致的,无法进行修改。
直接解决问题也很简单:

  • 先找到minio的github仓库,然后fork到自己的仓库中,
  • 按文件夹查找cmd->gateway->s3->gateway-s3.go文件
  • 然后找到randString这个方法
  • 修改最后的返回值为:return prefix + string(b[0:30-len(prefix)]) + "-123"
  • 此时问题解决。

修改完代码如何投入使用

其实记录本篇文章的目的不仅仅是解决上面遇到的问题,更是记录一下实际在修改完代码后如何投入使用,最简单的方法有两种:

  • 如果直接使用宿主机安装的,那么用带有go环境的电脑,直接进入仓库运行make 打包出可执行文件minio然后替换原来的直接执行
  • 如果使用docker安装的稍微有些麻烦,但是原理是替换容器中的可执行文件,然后再次执行,下面详细讲解一下

docker容器修改启动minio

  • 如果没有go环境先安装go环境,如果会github action的可以先用github action来进行打包和封装进镜像
  • 然后运行make 运行完后会打包出一个minio的可执行文件
  • 然后将官方镜像文件下载下来,先运行一下,再通过docker cp minio minio:/opt/bin/
  • minio 这个容器中的可执行文件直接替换成新的,如果你的容器名不叫这个,可以更换成自己的名字或者容器ID
  • 不知道minio在容器中存放的位置,可以镜像仓库中的Dockerfile.release中找到,如:curl -s -q https://dl.min.io/server/minio/release/linux-${TARGETARCH}/archive/minio.${RELEASE} -o /opt/bin/minio 此时就找到了/opt/bin/minio的存放位置

改造结果

注意:改造完成后,容器可以正常运行,此时可以将该容器打造成一个镜像,再上传到你的镜像仓库中,作为cos的专用版使用。

此时整个过程都比较简单,就是需要安装go环境和利用docker容器的一些常用方法,进行对应的改造。

就写到这了,有问题可以直接通过邮件联系我一起交流。

评论