想自建对象储存?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的接入已经完成,恭喜~

尾声

到这里,你的自建对象储存已经搭建完成!恭喜!

如果这篇文章帮到了你或者遇到问题,欢迎在评论区留言,这是对我最大的鼓励与支持!谢谢!


想自建对象储存?MinIO可能是最简单的选择
https://www.leonxie.cn/archives/minio-oss
作者
LeonXie
发布于
2025年08月06日
更新于
2025年08月08日
许可协议