使用 MinIO 搭建自己的 S3 服务
使用 MinIO 搭建自己的 S3 服务
目标 & 背景
之前一直听说过 MinIO 的大名,一直懒得研究,正好今天有时间给环境装一下,我当前的博客使用 Halo 建站,在官方插件中有一个名为 增强备份 的工具,刚好也支持 S3 存储
在前段时间,Halo 的团队发布了 obsidian-halo 的插件,但是上传图片的功能,一直没有下文,所以正好可以将 MinIO 同时作为博客的图床来用,还能利用家里闲置的带宽~
MinIO 在本篇文章中,会搭建在我自己的群晖上,如果跟你的环境不同,还请自行解决
MinIO 搭建
第一次看 MinIO 的文档时,一头雾水,咋那么多变量,看的头疼,但是就我上面的这些需求,实际配置非常简单,这里我使用 docker-compose 进行配置
version: "3.3"
services:
minio:
ports:
- 9000:9000
- 9090:9090
container_name: minio
volumes:
- /volume1/docker/minio:/data
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=xxxxx
image: minio/minio
command: server /data --console-address ":9090"
networks: {}
这里开放了两个端口,9000 和 9090,其中 9090 是管理后台,这个端口不需要暴露在外网下
在我的环境中,家里的内网使用 Surge Ponte 访问
进入后台,输入 docker compose 中设置的账号和密码,接着来到 Buckets 中,点击 CreateBucket,在 Bucket Name 输入名字即可
我这里创建了两个 Bucket,一个是 blog 作为图床用,另一个是 blog-backup 作为 Halo 的备份服务
接着来到创建好的 Buckets 中,修改 Access Policy 为 public
接着在 Access Keys 中 点击 Create access key 创建一个访问密钥
注意保存好创建的内容
最后在 Configuration 中 Region 菜单,将 cn 填入 Server Location 即可完成所有配置
Halo 配置
除了 增强备份 我们还需要 对象存储 这个插件,在后台自行安装即可,安装完成后,需要现在附件中创建存储策略
接着依次填入之前在 MinIO 中设置的内容
最后来到 备份插件 中的 定时任务 中,开启 启用远程同步,并将 附件存储策略 设置为上图的 blog-backup 就完成了备份同步到 NAS 的所有过程
Obsidian 配置
在 OB 的插件中,需要安装 s3-image-uploader,接着来到这个插件的设置页面,同样填入之前的基础信息
需要注意,这里我自己为了区分两种行为,Bucket 使用的是 blog
接着需要开启 Use custom endpoint 和 Use custom image URL,填入当前服务器的域名和端口,要注意这里两个值不一样,我们上传时使用的是 http 协议的 9000 端口,但是下载时使用的是 https 协议的 9001 端口,文章后面会介绍为什么
# Custom S3 Endpoint 格式参考
http://你的域名:9000/
# Custom image URL 格式参考
https://blog.你的域名:9001/blog/
这个插件在我测试过程中,发现并不支持热修改,因此测试时,如果发生改动,记得重启 OB
反向代理
在我测试时,发现上传到 halo 的文章图片地址,虽然原始值都是 http://xxx 但是在实际请求时会默认修改为 https://xxx 这样会导致无法正确获取图片,因此需要对 9000 这个端口做一个反向代理
在群晖 控制面板 -> 登录门户 -> 高级 -> 反向代理服务器 中增加一个 https 的 9001 端口转发规则
# 来源主机名 格式参考
https://blog.你的域名
# 目的地主机名 格式参考
192.168.31.111
最后
终于可以愉快的用本地编辑器写 Halo 的博客了~ 之前一直使用 MWeb 导出到 VSCode 中,再上传到站点上,非常烦
把 S3 部署在家庭服务器中,同时也减少了建站的流量成本,舒服~
- 感谢你赐予我前进的力量