# 前言
在 2021 年 Minio 突然从 Apache
开源许可转换为了 AGPLv3
许可,这意味着后续如果你使用了 minio
作为存储程序以及修改到其代码都需要开源出你的程序(如果不想开源但仍然想盈利也可以,使用钞能力购买商业许可即可),但是其实大部分后续修复的补丁我们是不需要的,集成的 web 界面其实也很鸡肋(对于个人开发者仅需要一个稳定的对象存储服务即可)。因此想要绕过 AGPLv3
,我们只需选择其最后一个 Apache
版本作为我们的对象存储服务。
# ApacheV2 版 minio 定位
通过 License 的文件更改,可以定位到该修改的 commit
的父节点为 https://github.com/minio/minio/tree/e0d3a8c1f4e52bb4a7d82f7f369b6796103740b3,这也是最后修改前的最后一个版本。当然这是一个开发版本,而我们更希望找到一个发行版本,经过 release
页面中查询,可以发现其最后一个版本为 https://github.com/minio/minio/tree/RELEASE.2021-04-22T15-44-28Z,至此我们找到了我们所需要的版本。
# 安装 Minio
环境: Ubuntu 22.04
下载
go
用以编译minio
源代码 (在书写本篇时 go 的当前版本为 1.21.0)wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
解压
go
,并进行安装sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf ./go1.21.0.linux-amd64.tar.gz
修改启动脚本,加入 go 的环境变量和路径
sudo vim /etc/profile
在其中加入 go 的二进制路径:
export PATH=$PATH:/usr/local/go/bin
然后使用
wq
以保存并退出 vim (你也可以使用你喜爱的编辑器,例如 vscode 或者 nano 等等)重新进入 bash,使用一下命令查看是否成功
h go version
该命令会输出
go
的版本下载
minio
源代码:找到对应的release
页面,直接下载其source.tar.gz
源代码压缩包。wget https://github.com/minio/minio/archive/refs/tags/RELEASE.2021-05-27T22-06-31Z.tar.gz
解压源代码
tar -xzvf RELEASE.2021-05-27T22-06-31Z.tar.gz
进入源代码目录并执行编译
cd RELEASE.2021-05-27T22-06-31Z
GO111MODULE=on go install
此时该二进制文件被编译到
~/go/bin
中,我们直接使用mv
命令将其移动到用户本地执行文件目录/usr/local/bin
中mv ~/go/bin/minio /usr/local/bin
查看 minio 版本
minio --version
可以看到显示以下版本号
minio version DEVELOPMENT.GOGET
# 配置 Minio 服务
配置 systems 的服务
/etc/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local
User=minio-user
Group=minio-user
ProtectProc=invisible
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Specifies the maximum number of threads this process can create
TasksMax=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
创建数据存放的位置和服务执行的用户
groupadd -r minio-user
sudo useradd -r -g minio-user minio-user
sudo mkdir -p /home/minio-user
sudo chown -R minio-user:minio-user /home/minio-user
在上述文件中定义了环境变量文件为
/etc/default/minio
,因此需要创建环境文件并声明对应的环境变量MINIO_VOLUMES
MINIO_VOLUMES="/home/minio-user/"
MINIO_ROOT_USER={your accessKey}
MINIO_ROOT_PASSWORD={your secretKey}
启动服务并设置开机自启
sudo systemctl enable --now minio
查看服务的启动状态
sudo systemctl status minio
至此我们完成了 minio
的服务配置。
# 参考资料
https://blog.min.io/configuring-minio-with-systemd/
# ⚠️特别注意
- Apach Minio 最后一个版本没有
--console-address :9001
这样的参数项配置,如果使用了这个--console-address
则毫无疑问使用到了AGPLv3
的版本。