随着国内云计算厂商的政策缩紧,国内云计算厂商之前各种小羊毛慢慢都在“温暖升级”,比如腾讯云的COS就从一开始的新老用户免费50G到后面的新用户50G免费6个月,免费期过后2022年9月1日起老用户“对象存储服务 COS 存储容量、请求及数据取回计费项将由按月结算升级为按日结算”,官方的功能升级目的为“便于您通过日结账单做更精细的费用管理”,我放在腾讯云COS的文件不多,就是网站的图片文件,也就200MB不到,如果是之前的按月结算,可能一个月也就不到1分钱,但是新政策之后,腾讯云每天至少从我账户扣除1分钱,钱虽然不多,但是这一天天的每天都在扣费有点肉疼,薅了这么久腾讯云的羊毛,也不能说人家不好,正好最近接触到了MinIO这个替代品,服务器资源也足够,干脆将这部分功能自建好了,于是有了这篇折腾记录。
为什么需要MinIO
MinIO支持众多平台,我现在网站服务器系统是Debian,选择AMD64系统类型的即可,下载:
wget https://dl.min.io/server/minio/release/linux-amd64/minio赋予可执行权限及移动到bin目录:
chmod +x miniomv minio /usr/local/bin/为MinIO单独创建一个不可登录的用于用来运行MinIO服务:
useradd -r minio -s /sbin/nologinchown minio:minio /usr/local/bin/minio如果上述过程无意外,执行如下命令即可查看MinIO的版本信息:
minio --version为MinIO创建文件保存目录,我是选择保存在/data/minio,如果跟我不一样的话,下述配置文件记得一并更改:
mkdir /data/minio -pchown minio:minio /data/minio创建配置文件:
vim /etc/default/minioMINIO_ACCESS_KEY="cloudbool_minio_access"MINIO_SECRET_KEY="cloudbool_minio_secret"MINIO_VOLUMES="/data/minio"MINIO_OPTS="--address :9001 --console-address :9000"这里说几点需要留意的。
MINIO_ACCESS_KEY及MINIO_SECRET_KEY为后续登录控制面板及API的凭证,如果是放到公网的话,一定要注意设置复杂一点。
MINIO_VOLUMES为MinIO保存对象文件及基础文件的目录,我上面设置的是/data/minio,如果跟我不一样,需要注意MinIO运行的用户对这个目录具有写入权限。
MINIO_OPTS后面的两个参数信息分别是API的端口号及控制面板端口号,如果只需要其中之一,选择对应的一个也可以,留意设定的端口号没有被占用以及跟别的服务不冲突即可。
进程管理服务:
vim /etc/systemd/system/minio.service[Unit]Description=MinIODocumentation=https://docs.min.ioWants=network-online.targetAfter=network-online.targetAssertFileIsExecutable=/usr/local/bin/minio[Service]WorkingDirectory=/usr/local/User=minioGroup=minioProtectProc=invisibleEnvironmentFile=/etc/default/minioExecStartPre=/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 alwaysRestart=always# Specifies the maximum file descriptor number that can be opened by this processLimitNOFILE=1048576# Specifies the maximum number of threads this process can createTasksMax=infinity# Disable timeout logic and wait until process is stoppedTimeoutStopSec=infinitySendSIGKILL=no[Install]WantedBy=multi-user.target# Built for ${project.name}-${project.version} (${project.name})注意上述指定的User及Group对应的用户名及分组名存在及有相应的权限。
进程控制:
systemctl daemon-reloadsystemctl start miniosystemctl restart miniosystemctl status minio到这一步如果没有错误已经可以访问MinIO了,访问服务器IP:console-address例如192.168.1.10:9000即可访问MinIO的控制面板并进行创建bucket、上传对象文件等操作了。
Nginx反代MinIO