用MinIO自建OSS服务
前言
minio是一个对象存储方案(oss),一般都是公司企业之类的商业用途,个人用到的场景很少🤣,不过我还是找到了一个对我来说可以使用的场景,那就是用来做自建图床!
话不多说,记录以下minio的部署。我用的部署方式是下载已经编译好的二进制包,没有选择docker部署是因为我用来做host的机器是迅雷赚钱宝一代,系统是3.10内核的openwrt,用不了docker。
注意事项
minio从2022年开始,存储文件的方式就采用了纠删码格式,说人话就是上传的文件不再保留原格式,在文件系统里看到的是文件夹 + xl.meta文件。
如果需要获取源文件,必需要通过api或者web后台下载。
这个设计可以理解,minio毕竟是为了分布式存储设计的,纠删码可以理解为一种文件分片算法,类似raid但是比raid更先进,但缺点就是不适合个人用户。所以用minio来搭建图床服务就像杀鸡用牛刀,请根据自己的使用场景谨慎选择。
部署
第一步:安装
首先到【minio下载页面】找到对应自己硬件架构的二进制包,我的硬件是arm32/armv7,所以文件路径是/server/minio/release/linux-arm/minio
。
用wget下载到本地后记得添加可执行权限
# 下载
wget -O minio https://dl.min.io/server/minio/release/linux-arm/minio
# 添加可执行权限
chmod + x minio
第二步:启动
作为一个oss服务,肯定需要指定用来保存文件的路径了,所以最简单的启动命令如下
./minio server /path/to/save/data
minio的默认监听端口是9000,启动成功以后可以打开浏览器访问http://host_ip:9000
就进入minio的web控制台
了,默认账户名和密码都是minioadmin
。
如果要指定端口号,启动命令添加--address
参数即可。
./minio server --address=:12345 /path/to/save/data
这里有一个注意事项,minio区分了api的端口和web控制台的端口,默认的9000端口,或者在启动命令中指定的端口号,其实都是api端口。在浏览器中访问api端口时会自动跳转到webui的端口,如果装了防火墙的话记得放行端口。
如果要指定配置文件目录,在启动命令中添加--config-dir
参数
./minio server --address=:12345 --config-dir /path/to/config /path/to/save/data
第三步:修改默认账户密码
从服务的启动日志中可以看到默认的账户密码都是minioadmin
,而且会有黄字提醒修改账户密码。
修改密码的方式是在用户环境变量中添加两个参数MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
。根据自己的情况,在~/.bashrc
或者/etc/profile
中添加两行。
export MINIO_ACCESS_KEY=jackma
export MINIO_SECRET_KEY=1234567890
编辑保存后,记得重新加载配置文件使配置生效
# 根据自己情况二选一
source .bashrc
source /etc/profile
第四步:创建存储桶并配置匿名权限
创建存储桶
命名后确定即可。下面三个开关分别指版本控制、文件锁定、数量限制,根据自己需求选择是否启用。
创建的存储桶默认是私有private权限。如果要用作图床,也就意味着匿名访客需要有只读权限。
点击要编辑权限的桶,这里以2024为例。这里千万要注意,不是直接把bucket从private改成public,而是在Anonymous/匿名用户
标签页进行修改。
点击Anonymous
后点击add access rule
添加规则
在prefix一栏输入/
(斜杠的意思是所有规则中优先级最高),access一栏选择readonly
即可,然后保存。
第五步:编辑systemd/sysvint服务文件
systemd的配置文件
[Unit]
Description=minio
After=network.target
[Service]
User=jackma # 指定用户
Type=simple
ExecStart=/path/to/minio server --address=:12345 --config-dir /path/to/config /path/to/data
ExecStop=/bin/killall minio
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存为/etc/systemd/system/mino.service
,然后添加到开机启动项
# 添加到启动项 & 启动
systemctl enable --now minio.service
也可以参考【minio官方文档】的模板进行调整,模板如下
[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
# Built for ${project.name}-${project.version} (${project.name})
针对3.10内核openwrt的sysvinit的配置文件
#!/bin/sh /etc/rc.common
START=99
STOP=10
SERVICE_WRITE_PID=1
SERVICE_USE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /path/to/minio server --address=:12345 --config-dir /path/to/config /path/to/data
}
stop() {
kill $(pidof minio)
}
保存为/etc/init.d/minio
,然后授权并设置开机启动
# 授权
chmod +x minio
# 添加开机启动项
service minio enable
# 启动
service minio start
扩展用途
我只是把minio当作单服务在使用,文件通过web端进行上传,其实可以配置access keys配合picgo使用,暂时先不折腾了。