在 Ubuntu 上搭建 MinIO

Table of Contents

MinIO 是一个比较常用的对象存储服务(OSS),本文主要简单的介绍下在 Ubuntu 上搭建 MinIO 服务,并提供公网访问。

运行

MinIO 支持多种运行方式,这里选择通过 Docker 运行

mkdir -p ~/minio/data

docker run -d -p 9000:9000 -p 9001:9001 --restart=always --name minio -v ~/minio/data:/data -e "MINIO_ROOT_USER=xxx" -e "MINIO_ROOT_PASSWORD=123456" quay.io/minio/minio server /data --console-address ":9001"

~/minio/data 是 MinIO 实际存放文件的位置,9001 是 Console 的端口,9000 是 API Server 的端口。 Console 如果不指定端口,每次运行会随机使用一个端口,不方便我们用 Nginx 代理。

代理

在机器上,使用 Nginx 代理 MinIO,增加如下配置

# MinIO Subdomain Configuration (minio.wu.run)
server {
    listen 443 ssl;
    server_name minio.wu.run;

    ssl_certificate /etc/letsencrypt/live/wu.run/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wu.run/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:9000;
	proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# MinIO Console Subdomain Configuration (minio-console.wu.run)
server {
    listen 443 ssl;
    server_name minio-console.wu.run;

    ssl_certificate /etc/letsencrypt/live/wu.run/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wu.run/privkey.pem;

    client_max_body_size 2048M;

    location / {
        proxy_pass http://127.0.0.1:9001;
	proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

	# 以下是用于支持 WebSocket 的配置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Console 服务会使用 WebSocket,故添加支持 WebSocket 的配置。

域名解析

在云厂商配置域名解析。

这样就可以通过 https://minio-console.wu.run/ 域名访问 MinIO 控制台了。

注意事项

  • 以上例子是单机模式,不保证高可用。在生产环境中,建议采用多节点集群部署 MinIO,以便实现数据冗余和容灾备份
  • 如果将 MinIO Bucket 的访问策略设为 Public,一定要删除 "s3:ListBucket",否则别人可以看到 Bucket 下所有文件名,并拿到所有文件。一般情况下,把 Bucket 设为 Private 即可