编译自己的minio运行程序

1.下载源码包

源码托管在github,如果嫌下载慢就去码云急速下载里面下载:

github仓库地址:https://github.com/minio/minio/releases
gitee镜像仓库:https://gitee.com/mirrors/minio/tags

假设我这里下载了的文件是这个 RELEASE.2023-12-14T18-51-57Z.tar.gz ,我们把压缩包解压后改名为minio

2.修改项目源码

  • 添加功能:配置crossdomain.xml

minio访问crossdomain.xml可以看到返回xml内容:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy>
    <allow-access-from domain="*" secure="false" />
</cross-domain-policy>

该配置安全扫描为不安全项,需要设置allow-access-from为具体的域名。

现在把它修改为,读取配置的环境变量,然后设置为具体的域名,让其返回类似下面的xml,不能使用*号

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="www.baidu.com" secure="false" />
    <allow-access-from domain="112.112.112.112" secure="false" />
</cross-domain-policy>

修改步骤:

(1)修改项目中的internal/config/constants.go文件,加入需要读取环境的名称,具体看修改后源码constants.go第86~91行。
(2)然后修改crossdomain.xml对应的处理类cmd/crossdomain-xml-handler.go,修改读取环境变量配置的值,具体查看修改后的文件crossdomain-xml-handler.go
(3)然后访问对应的地址,即可使用配置的xml。

  • 添加功能:自定义响应头Server的信息

请求minio接口时,返回的请求头会返回Server: MinIO,这样扫描会被针对扫描,需要修改为自定义的信息,例如这样:

Server: MyFs

这样就可以不会暴露出文件服务器的信息了。

修改步骤:直接修改cmd/api-headers.go文件,读取配置环境变量,修改后源码api-headers.go第55~59行;

  • 添加功能:追加安全扫描提示的响应头

安全扫描提示需要响应头

Referrer-Policy: strict-origin-when-cross-origin
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: master-only
X-Xss-Protection: 1; mode=block

修改步骤:修改cmd/generic-handlers.go文件,把缺少的响应头追加上即可,具体查看修改后的源码generic-handlers.go第522~532行。

3.编译项目

先确认go的版本 >1.19,然后把 GOPROXY 设置为国内镜像地址:

go version
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

配置环境变量GOROOTGOPATH,并把go.exe所在的文件夹添加到PATH中,下面是例子:

# window
setx GOROOT "C:\Program Files\Go"
setx GOPATH "C:\Users\lixin\go"

# linux
export GOROOT=/usr/local/go
export GOPATH=~/go
export PATH=$PATH:$GOROOT/bin

然后进入项目文件夹,把项目需要的依赖库下载下来:

go mod download

下载完成后执行编译:

# window
go build -ldflags "-s -w" -o E:\develop\minio\build\minio.exe github.com/minio/minio

# linux
go build -ldflags "-s -w" -o /usr/local/minio/build/minio github.com/minio/minio

linux编译时会使用tmp目录,如果tmp磁盘不足会报错,可以临时扩容一下:

mount -o remount,size=2G /tmp

4.运行文件服务

使用环境变量配置启动参数:

export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=Minio@1234
export MINIO_BROWSER=off
export MINIO_API_CORS_ALLOW_ORIGIN="https://10.202.1.1,https://61.166.240.1:8080"

# 新加的配置参数
export MINIO_ALLOW_ACCESS_FROM_DOMAIN=10.202.1.1,61.166.240.1:8080
export MINIO_HTTP_SERVER_INFO=MyFs

变量说明:

变量名称 说明
MINIO_ROOT_USER 管理控制台账号
MINIO_ROOT_PASSWORD 管理控制台密码
MINIO_BROWSER off关闭web控制台
MINIO_API_CORS_ALLOW_ORIGIN api可使用域名
MINIO_ALLOW_ACCESS_FROM_DOMAIN [new] crossdomain.xml文件的域名配置
MINIO_HTTP_SERVER_INFO [new] 响应头Server的信息

使用9000端口启动文件服务:

./minio server --address :9000 ./data
posted @ 2023-12-28 17:02  喵喵扑  阅读(1221)  评论(4编辑  收藏  举报