CentOS7 下 MinIO 的安装和配置

起因是 BuyVM 的存储块补货了,于是下单买了一年 256 GB 的再套个 CloudFalre 用来做对象存储,存存图片和 Docker 镜像文件应该是够了,反正不够还能继续挂载。

顺便把 BuyVM 挂载硬盘的流程一起记下:
1、购买后去控制台把 Block Storage 附加到(Attached To)对应的 VPS 上。
2、在 VPS 里查看数据块编号,类似 scsi-0BUYVM_SLAB_VOLUME-1331 的就是存储块。

ls /dev/disk/by-id/

3、格式化。

mkfs.ext4 -F /dev/disk/by-id/scsi-0BUYVM_SLAB_VOLUME-1331

4、新建文件夹并挂载,这里以根目录下的 /storage 为例:

mount -o discard,defaults /dev/disk/by-id/scsi-0BUYVM_SLAB_VOLUME-1331 /storage

5、设置开机自动挂载,完成。

echo '/dev/disk/by-id/scsi-0BUYVM_SLAB_VOLUME-1331 /storage ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab

MinIO 的安装也没有任何难度,因为有现成编译好的版本,直接下载运行就行了。

1、我是用的是 CentOS7 系统,所以选择 linux-amd64 版本:

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

2、下载下来的文件加上权限就能运行,但是为了方便管理还是放到 /usr/local 路径下:

mv minio /usr/local/
chmod +x /usr/local/minio

测试启动一下:

/usr/local/minio server /stroage --address ":9000" --console-address ":9001"

启动成功,默认账号密码都是:minioadmin
启动成功

3、修改账号密码。
最新版本的 MinIO 已经停用从配置文件中读取账号密码启动的功能,因此现在只能将用户信息配置在系统的环境变量中。
以下命令仅可用来测试,在终端关闭后就会失效。

export MINIO_ROOT_USER=username
export MINIO_ROOT_PASSWORD=password

永久配置请参照这个命令,修改 /etc/profile 文件:

vi /etc/profile

并在空白处添加:

export MINIO_ROOT_USER=username
export MINIO_ROOT_PASSWORD=password

使其生效:

source /etc/profile

4、开机启动。
这里用最简单的方法实现开机启动:

crontab -e
# MinIO 开机启动
# . /etc/profile; 作用为先读取环境变量,不配置无法读取账号密码。
@reboot . /etc/profile;/usr/local/minio server /storage --address ":9000" --console-address ":9001"
service crond restart

如果重启后 MinIO 没有自启动的话,请自行查看 log,crontab 的配置头上可能需要加上 3 行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

这些是用来选择语言、可执行文件目录和用户的,具体情况还是看日志处理。

5、Nginx 上传文件的配置。
我至今遇到了两个错误:

  1. 413 Request Entity Too Large 修改上传文件最大大小解决。
  2. 文件下载报错 403 SignatureDoesNotMatch 就很巧全是大家碰到过的问题,修改 headers 传递解决。

最后的 Nginx 配置如下:

        ...

        location / {
            proxy_pass http://127.0.0.1:9001;
            # MinIO 上传最大大小 1 GB
            client_max_body_size 1024m;
            proxy_http_version 1.1;
            # headers 传递
            proxy_set_header Host $host;
            proxy_set_header Connection "upgrade";
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        ...

至此结束。

2021/07/21 更新
回滚以解决部分错误:MinIO 9000 端口强制跳转 9001 端口且报 This ‘admin’ API is not supported by server in ‘mode-server-fs’、An error occurred, please try again 和 The server side encryption configuration was not found 错误