温馨提示×

如何编译Linux MinIO

小樊
38
2026-08-25 01:53:38
栏目: 智能运维

下面以 Linux 平台编译 MinIO 服务端(minio) 为例,给你一个完整、可操作的说明。MinIO 官方主要使用 Go 编写,因此编译方式比较统一。


一、准备编译环境

1. 安装 Go(官方推荐 Go 1.21+)

MinIO 对 Go 版本要求较新,建议使用 Go 1.22 或以上

方式一:官方二进制(推荐)

wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz

配置环境变量(写入 ~/.bashrc~/.zshrc):

export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

验证:

go version

二、获取 MinIO 源码

官方仓库:

git clone https://github.com/minio/minio.git
cd minio

查看最新稳定版本(可选):

git tag
git checkout RELEASE.2024-06-06T09-20-06Z

建议用 RELEASE 标签版本,而不是直接 main 分支。


三、编译 MinIO

1. 标准编译(最常见)

go build -o minio .

编译完成后,当前目录会出现 minio 二进制文件:

ls -lh minio

2. 推荐:带版本信息的编译(官方方式)

MinIO 官方构建时会注入版本号和时间:

go build -ldflags="-s -w" -o minio .

或更完整:

VERSION=$(git describe --tags --always)
COMMIT=$(git rev-parse HEAD)
DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)

go build -ldflags="-X github.com/minio/minio/cmd.Version=${VERSION} \
                  -X github.com/minio/minio/cmd.CommitID=${COMMIT} \
                  -X github.com/minio/minio/cmd.CommitTime=${DATE}" \
       -o minio .

四、验证编译结果

./minio --version

输出示例:

minio version RELEASE.2024-06-06T09-20-06Z (commit: xxxxx)

五、运行 MinIO(示例)

1. 创建数据目录

mkdir -p /data/minio

2. 启动 MinIO

./minio server /data/minio

或指定端口和控制台:

MINIO_ROOT_USER=admin \
MINIO_ROOT_PASSWORD=admin123 \
./minio server /data/minio --console-address ":9001"

浏览器访问:

http://localhost:9001

六、交叉编译(可选)

编译 Linux 静态二进制(常用于生产)

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w" -o minio .

编译其他平台

# macOS
GOOS=darwin GOARCH=amd64 go build -o minio .

# ARM64
GOOS=linux GOARCH=arm64 go build -o minio .

七、常见问题

1. 编译很慢 / 下载依赖失败

设置 Go 代理:

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

2. 内存不足

MinIO 编译时可能占用较多内存,建议:

  • 至少 2GB 内存
  • 或关闭并行编译:
GOMAXPROCS=1 go build

八、总结

✅ 核心步骤:

  1. 安装 Go 1.21+
  2. git clone MinIO 源码
  3. go build 编译
  4. 运行 ./minio server

如果你需要:

  • 编译 MinIO Client(mc)
  • 编译 Debian / RPM 包
  • 在 ARM / 龙芯 / 麒麟上编译
  • 裁剪 MinIO 功能

可以继续告诉我你的具体场景。

0