编译自己的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
配置环境变量GOROOT
和GOPATH
,并把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