MinIO 单机部署

MinIO 单机部署

安装

安装请参照官方地址

部署

安装完成后,使用以下命令进行启动

1
2
3
4
export MINIO_ROOT_USER='MINIO_ROOT_USER'
export MINIO_ROOT_PASSWORD='MINIO_ROOT_PASSWORD'
export MINIO_BROWSER_REDIRECT_URL=公网域名
nohup minio server --console-address :9001 --config-dir /etc/minio /data/minio > /root/components/minio/minio.log 2>&1 &

MINIO_ROOT_USER 是最高管理员权限账号,若不填默认为 minioadmin
MINIO_ROOT_PASSWORD 是最高管理员权限密码,若不填默认为 minioadmin
MINIO_BROWSER_REDIRECT_URL 是浏览器重定向域名,若希望通过反向代理将服务暴露到公网,通过域名访问,请设置对应域名

配置及安全

访问域名或 ip:port,进入 minio 的控制台,进行 Bucket 的创建,创建完成后即可通过超级管理员的账号进行 minio 的访问

以上已经完成了 minio 开发所需的基本要求,但考虑未来的 MinIO 复用的可能性,建议 MinIO 管理员账号密码不能外泄。而应该到 Policy 菜单新建一种访问策略

图中配置如下所示:

1
2
3
4
5
6
7
8
9
10
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::template-*/*"]
}
]
}

配置描述了即将被创建的策略拥有以 template 开头的所有 bucket 的所有操作权限。要是不嫌麻烦可以针对每个 bucket 写一个项填充到 Resource 的值里面

Policy 编写完成后,可以新建用户,将 Policy 分配给他,然后在用户下新建 Service Accounts,后者比用户更贴近开发常见的 accessKey 与 accessSecret 的概念。若有需要还可以建立用户组。

最后检查 Service Accounts,确保他拥有刚刚创建的 Policy。此时一个具备应用所需的最低访问权限的开发密钥对就配置好了。

反向代理

服务部署后若有需要代理到域名上时,可以参考官方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
listen 80;
server_name example.com;

# 允许报文头出现特殊字符
ignore_invalid_headers off;
# 允许超大文件
client_max_body_size 0;
# 禁用代理缓冲区
proxy_buffering off;

location / {
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;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# 启用HTTP1.1,使用Keeplive
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

proxy_pass http://localhost:9000;
}
}

实际业务开发中存在将所有业务放到一个域名下的情况,如确保同源等,此时官方也给出了配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Proxy requests to the bucket "photos" to MinIO server running on port 9000
location /photos/ {
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;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

proxy_pass http://localhost:9000;
}

# Proxy any other request to the application server running on port 9001
location / {
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;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

proxy_pass http://localhost:9001;
}

但该配置存在一点问题,若用户需要访问 photos 这一 bucket 的相关信息,因为代理过程中多了/,nginx 会将请求指向代理的其他应用,所以推荐以下写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
location /bucket {
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;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

proxy_pass http://localhost:9000;
}

location /minio-console/ {
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;
proxy_set_header Host $http_host;

proxy_pass http://localhost:9001/;
}

以上写法可以确保 bucket 本身的信息查询是可用的。配置中的第二个 location 则是将 MinIO 的控制台代理出来,但目前 subpath 支持并不好,会被重定向到/。但能正常使用,只是不能刷新,一旦刷新将会被指向其他的 location 中(console v0.19.3已修复该问题)