# 前言

在 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

  1. 下载 go 用以编译 minio 源代码 (在书写本篇时 go 的当前版本为 1.21.0)

    wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
  2. 解压 go ,并进行安装

    sudo rm -rf /usr/local/go
    sudo tar -C /usr/local -xzf ./go1.21.0.linux-amd64.tar.gz
  3. 修改启动脚本,加入 go 的环境变量和路径

    sudo vim /etc/profile

    在其中加入 go 的二进制路径:

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

    然后使用 wq 以保存并退出 vim (你也可以使用你喜爱的编辑器,例如 vscode 或者 nano 等等)

  4. 重新进入 bash,使用一下命令查看是否成功

    h
    go version

    该命令会输出 go 的版本

  5. 下载 minio 源代码:找到对应的 release 页面,直接下载其 source.tar.gz 源代码压缩包。

    wget https://github.com/minio/minio/archive/refs/tags/RELEASE.2021-05-27T22-06-31Z.tar.gz
  6. 解压源代码

    tar -xzvf RELEASE.2021-05-27T22-06-31Z.tar.gz
  7. 进入源代码目录并执行编译

    cd RELEASE.2021-05-27T22-06-31Z
    GO111MODULE=on go install
  8. 此时该二进制文件被编译到 ~/go/bin 中,我们直接使用 mv 命令将其移动到用户本地执行文件目录 /usr/local/bin

    mv ~/go/bin/minio /usr/local/bin
  9. 查看 minio 版本

    minio --version

    可以看到显示以下版本号

    minio version DEVELOPMENT.GOGET

# 配置 Minio 服务

  1. 配置 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
  2. 创建数据存放的位置和服务执行的用户

    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
  3. 在上述文件中定义了环境变量文件为 /etc/default/minio ,因此需要创建环境文件并声明对应的环境变量 MINIO_VOLUMES

    MINIO_VOLUMES="/home/minio-user/"
    MINIO_ROOT_USER={your accessKey}
    MINIO_ROOT_PASSWORD={your secretKey}
  4. 启动服务并设置开机自启

    sudo systemctl enable --now minio
  5. 查看服务的启动状态

    sudo systemctl status minio

至此我们完成了 minio 的服务配置。

# 参考资料

https://blog.min.io/configuring-minio-with-systemd/

# ⚠️特别注意

  • Apach Minio 最后一个版本没有 --console-address :9001 这样的参数项配置,如果使用了这个 --console-address 则毫无疑问使用到了 AGPLv3 的版本。