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