Minio Server 折腾笔记

很久很久以前,有一个已经不存在的 Appinn.Me HOST 项目,托管着一些静态网站,这么多年过去,可能就剩下两个了:

前几天在迁移服务器,之后会立省 72 刀/年。但我小看迁移的魔法了。

这台服务器的构架很简单,就是 Nginx 在前台,后台是 Minio 提供文件传输服务。

Nginx 的迁移很容易,直接拿过去就行了,坑在 Minio…

这货不知道啥时候从 Minio 升级到了 Minio Server。然后,就崩了。

遇到了几个问题:

  1. 后台升级了,支持多用户了,可以把之前运行的多个实例合并为一个
  2. 文件结构变了,需要升级
  3. 升级后不认识文件了…:scream:(还好文件还在
  4. Minio 分为前后台了:前台兼容 S3,后台提供一个 Web UI 界面,挺好(但我不会用
  5. 上传的文件都为 root 用户
  6. 尝试用 Nginx 直接托管文件,发现文件不可识别(巨坑啊

单独拿出来说下,Nginx 和 Minio 在一台服务器里,理所应当我觉得通过 Minio 上传的文件,可以直接给 Nginx 用,但是并不能。

比如用 Minio 上传了一个 index.html 文件,Nginx 看到的是 index.html/xl.meta 文件…:person_shrugging:

然后发现为了实现对象存储,以及版本控制等功能,Minio 实际上改变了文件结构,你不能直接看到文件了。需要从兼容 S3 的前台获取(默认端口 9000)

在这里折腾了很久,感谢这篇文章的帮忙,需要反代的是 minio:9000,这个问题解决。

另外记得将 Bucket 的权限设为 匿名 > 只读

之后又遇到了权限问题,所有上传的文件权限是 Minio 容器所在用户,就很 root…于是将 docker 容器用户修改一下,算是解决了这个问题。

完整的 minio docker-compose.yml

   minio:
        image: minio/minio
        user: "${UID}:${GID}"
        volumes:
            - $PWD/data:/mnt/data
            - $PWD/conf/config.env:/etc/config.env
        environment:
            - MINIO_CONFIG_ENV_FILE=/etc/config.env
        command: server --console-address ":9090"

部分 Nginx 配置:

		location / {
			rewrite ^/$ /mcool/index.html break;
			proxy_set_header Host $http_host;
			proxy_pass http://minio:9000/mcool/;
 		}

Minio 的 Bucket Policy,可指定用户所属 bucket:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::mcool",
                "arn:aws:s3:::mcool/*"
            ]
        }
    ]
}

就算好了吧。

真的是…能用就不!要!动!啊

新时代人想问一下,以前的minio是什么样的。。。