很久很久以前,有一个已经不存在的 Appinn.Me HOST
项目,托管着一些静态网站,这么多年过去,可能就剩下两个了:
前几天在迁移服务器,之后会立省 72 刀/年。但我小看迁移的魔法了。
这台服务器的构架很简单,就是 Nginx 在前台,后台是 Minio 提供文件传输服务。
Nginx 的迁移很容易,直接拿过去就行了,坑在 Minio…
这货不知道啥时候从 Minio 升级到了 Minio Server。然后,就崩了。
遇到了几个问题:
- 后台升级了,支持多用户了,可以把之前运行的多个实例合并为一个
- 文件结构变了,需要升级
- 升级后不认识文件了…(还好文件还在
- Minio 分为前后台了:前台兼容 S3,后台提供一个 Web UI 界面,挺好(但我不会用
- 上传的文件都为 root 用户
- 尝试用 Nginx 直接托管文件,发现文件不可识别(巨坑啊
单独拿出来说下,Nginx 和 Minio 在一台服务器里,理所应当我觉得通过 Minio 上传的文件,可以直接给 Nginx 用,但是并不能。
比如用 Minio 上传了一个 index.html
文件,Nginx 看到的是 index.html/xl.meta
文件…
然后发现为了实现对象存储,以及版本控制等功能,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/*"
]
}
]
}
就算好了吧。
真的是…能用就不!要!动!啊