想自建对象储存?MinIO可能是最简单的选择
*封面来自pixiv~ 128930227
前言
如果你想使用市面上已有的公有云服务(比如阿里云OSS、AWS S3)来储存文件,那么肯定会被高昂的费用劝退。而且如果需要备份相册或存放私有文件,数据隐私又会是另一个顾虑。那么,有无能完全自主掌控数据且低成本的方案呢?我们可以利用现有资源(有剩余储存空间的云服务器、家里云+内网穿透....),自己搭建一个兼容S3协议的对象储存。
准备工作
1、一台服务器(或任何Linux设备)
*笔者建议使用带宽较高的服务器,否则使用体验会很差
2、手和脑子(废话)
不知道在哪里购买服务器?推荐雨云,价格可接受,操作方便,开箱即用。
开始部署MinIO
MinIO有两种部署方式 Docker部署和二进制文件部署,我比较推荐第二种,因为我认为手动部署比较麻烦、环境比较复杂的项目才需要docker,且docker有时候并不是很稳定。
既然如此,我们就开始吧!
首先,创建一个目录并进入(不建议在/root、/var这种系统目录下创建文件夹 你后续很有可能会遇到各种权限问题!!!),比如我这里是minio。
接下来,wget下载MinIO的二进制文件。
wget https://dl.min.io/server/minio/release/linux-amd64/minio
给文件添加运行权限:
chmod +x minio
创建一个专用用户(踩坑提示:不要直接使用root用户):
sudo useradd -r -s /bin/false minio-user
sudo chown -R minio-user:minio-user /minio
创建一个数据文件夹,比如我这里是/minio/data:
mkdir -p /minio/data
chmod -R 755 /minio/data # 赋予读写权限
sudo chown -R minio-user:minio-user /minio/data # 确保属主正确
尝试运行minio:
./minio server /minio/data --address ":9000" --console-address ":9001"
尝试访问你的服务器ip:9001,如果能访问成功,就说明minio能正常运行!不过先别急,要正式投入使用,还需要一些步骤。
配置系统服务
使用刚才直接运行的方式,一旦ssh连接断开,程序就不会再运行,也无法做到开机自启。
于是,我们使用systemd来配置系统服务。
首先,创建一个文件来配置环境变量(注意修改成你自己需要的配置):
sudo tee /etc/default/minio <<EOF
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="yourpassword_114514"
MINIO_VOLUMES="/minio/data"
MINIO_OPTS="--address :9000 --console-address :9001"
EOF
接下来,创建systemd服务文件:
sudo tee /etc/systemd/system/minio.service <<EOF
[Unit]
Description=MinIO Object Storage
After=network-online.target
Wants=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536
TimeoutStopSec=infinity
[Install]
WantedBy=multi-user.target
EOF
进入最后一步!让我们完成最后的设置:
# 重载 Systemd 配置
sudo systemctl daemon-reload
# 启动 MinIO
sudo systemctl start minio
# 设置开机自启
sudo systemctl enable minio
# 检查状态
sudo systemctl status minio
OK,如果输出的是这样的内容,就说明成功了,恭喜!
再试试访问MinIO控制台,输入你的用户名&密码登录!
应该能看到一个License页面,划到最下面点击Acknowledge即可进入后台!
可以点击+ Create Bucket 创建储存桶,不过我们先不着急,毕竟真正要拿来用,还得套个域名呀。
绑定域名(反向代理)
为了方便,这里只简单做一下api endpoint的反向代理,如果想让面板也能通过域名访问,可以按同样的方式配置。
笔者十分建议使用1panel、宝塔面板这样的运维工具来配置反向代理,但如果服务器资源有限,或者不想装运维面板,可以去搜搜如何手动配置Nginx反代。
我们以1panel为例,其他面板也大同小异。
像这样反向代理你的api endpoint。随后添加一条dns解析。
如果是cloudflare,国内使用不建议打开代理,毕竟对象储存讲究的是速度,开了代理就会慢很多。
不过,这里为了节省配置ssl证书的时间,就保持了打开的状态。
尝试ping你的域名,如果解析生效了,我们就来试一试将对象储存应用到实际场景里吧!
实践:将MInIO接入openlist
首先,来到MinIO管理页面,创建一个储存桶。
我们可以通过MinIO自带的object browser管理文件,为了方便后续验证是否接入成功,我们可以先传一个文件上去。
不错,来看看openlist那边如何操作吧!
添加一个储存,驱动选择“对象储存”
挂载路径可以随意填写,比如我的是MinIO。
我们重点需要关注的几个,分别是储存桶、endpoint、访问密钥 id、安全访问密钥、强制路径样式。
储存桶,顾名思义,我们填写刚才创建的储存桶的名称,比如我这里是openlist。
Endpoint,就是我们刚才做了反向代理的域名,我这里是https://api.nekoqwq.space。
访问密钥 id 就是你的MinIO用户名,安全访问密钥就是对应的密码。
需要注意,必须打开强制路径样式开关,否则openlist会访问“储存桶名称.api.nekoqwq.space”,由于我们没有配置泛域名解析,openlist将无法获取到储存桶内的文件。
点击添加,回到主页看看吧!
刚才上传的文件显示在了这里~配置成功!
尝试点击下载吧。
可以看到,文件被顺利的下载下来了。到这里,openlist的接入已经完成,恭喜~
尾声
到这里,你的自建对象储存已经搭建完成!恭喜!
如果这篇文章帮到了你或者遇到问题,欢迎在评论区留言,这是对我最大的鼓励与支持!谢谢!