使用 MinIO 自建对象存储服务器教程及常见问题的解决

对象存储具有很多优势,包括:高度可扩展性,适合海量数据;成本效益好;数据持久性强;易于访问;支持元数据管理,便于检索;多数支持版本控制;提供加密和访问控制,安全性高。它特别适合存储非结构化数据,如图片、视频和备份文件等。我在工作和生活中的使用也越来越多,然而有些云计算厂商收费不菲,近期还涨价,于是乎我的开源基础设施上只好又多了一笔自建对象存储服务器。

经过反复比较,我选用的开源项目是:MinIO、并使用 docker-compose 来搭建;如果你是全新安装,推荐使用 Debian 12 GNU/Linux 操作系统。

安装 docker-compose

Debian 12 非常方便,直接一行命令可以装好 docker 和 docker-compose

sudo apt install docker-compose

部署 MinIO

建立一个文件夹,进入该文件夹新建 docker-compose.yaml 文件。

以下是我的 docker-compose.yaml 文件,我的操作系统是 Debian 12, 如果你是别的系统,或者想换其他的 minio 版本,tag 的名称在这里 https://hub.docker.com/r/bitnami/minio/tags 请替换对应的 tag 即可。

version: ‘3’

services:
minio:
image: docker.io/bitnami/minio:2024-debian-12
ports:
– ‘9000:9000’
– ‘9001:9001’
networks:
– minionetwork
volumes:
– ‘minio_data:/data’
environment:
– MINIO_ROOT_USER=imax
– MINIO_ROOT_PASSWORD= pa$$word (把pa$$word替换成你的密码)
– MINIO_DEFAULT_BUCKETS= singapore (把singapore替换成一个你设置的bucket名)

networks:
minionetwork:
driver: bridge

volumes:
minio_data:
driver: local

注意替换密码和默认 bucket 的名称,bucket 名称随便起一个就行,我在此以 singapore 作为名字为例。编辑好 docker-compose.yaml 文件,保存推出,并在该文件夹中执行下列命令:

docker-compose up -d

看到运行成功之后,准备下一步

安装 Caddy Web Server

大概2019年开始使用 Caddy,用了几年感觉非常不错,在此也推荐使用 Caddy  来作为 Web Server,而不是 Apache 或者 Nginx ,Caddy 的安装和使用更简单方便,省心;而且还带有 Let’s Encrypt 集成的自动 HTTPS 支持、增强安全性的 HTTP/2 协议支持等。只是给 docker 做反向代理的话,Caddy 太合适不过了。在 Debian/ Ubuntu 下,使用下列命令即可安装:

sudo apt install caddy

装好 Caddy 好,打开 http://ip 就可以看到 Caddy Server 的默认页面,此时我们要做的就是编辑 Caddy 的配置文件

vi /etc/caddy/Caddyfile

下面是我给的一个简单的可以运行的 Caddyfile,分别将 9001 端口和 9000 端口用两个不同的域名去反代访问。如果想使用更多 Caddy 的特性,可以了解 Caddy 后再去强化,请注意编辑 Caddyfile 前将下列两个域名替换成你自己的域名,并将主机名 A 记录解析到你的服务器的 IP 地址,并检查确认解析生效。

oss.wenqixiang.com {
reverse_proxy localhost:9001
}

os3.wenqixiang.com{
reverse_proxy localhost:9000
}

MinIO 的 9001 端口提供的是 web 管理界面,9000 端口是 endpoint 地址,保存 Caddyfile, 运行下列命令重启 Caddy 来使配置生效。

sudo systemctl reload caddy

稍等几秒钟,给 Caddy Server 一点时间申请 SSL 安全证书,然后打开浏览器输入 https://oss.wenqixiang.com 打开网页,出现下列管理界面就说明安装成功了。

常见问题

照理说,打开该界面,MinIO 就部署成功了,然而实际使用上我遇到了不少问题,并且在网上没有找到资料,经过几天的摸索和尝试而解决了,在这里也一并记录如下。首先第一个:

去configuration页面设置区域为 us-east-1

我在配置好 MinIO ,并建立 bucket, secret key 等之后发现怎么都连不上,每次都报错无法连接,或者无法找到区域,后来在文档中找到 If not specified, default value is us-east-1.保存之后果然解决我的问题,其实我的服务器是新加坡服务器,区域并不是在美国,不应该填写 us-east-1, 我猜测,这是因为要和 AWS S3 compatible 的原因, region code 应该和 AWS S3 一致。

endpoint 地址的问题

请注意,endpoint 不是反代9001端口的 oss.wenqixiang.com 域名,而是反代9000端口的 os3.wenqixiang.com, 所以在填写 endpoint 的时候要注意。

发表回复