一、结论
Halo博客接入S3兼容对象存储存放附件和静态资源的核心操作思路为:先在对象存储服务端准备好存储桶和S3接入凭证,再在Halo后台的存储配置模块填写对应参数并测试连通,配置完成后网站的附件、图片、静态资源等就会自动存储到对象存储中,无需占用服务器本地存储空间。接入过程通常需要提前准备Endpoint、AccessKey、SecretKey、Bucket、Region等核心信息。
二、准备工作
- 开通支持S3协议的对象存储服务账号
- 已创建完成的存储桶Bucket,提前配置好访问权限和跨域规则
- 对象存储服务提供的Endpoint地址
- 对应存储桶的AccessKey(访问密钥ID)
- 与AccessKey配对的SecretKey(访问密钥密码)
- 对象存储服务对应的Region区域信息
- 可正常访问的Halo博客站点(2.0及以上版本自带S3存储适配,低版本需提前安装S3兼容存储插件)
- 如需迁移旧资源,提前整理好存放在服务器本地的现有附件、静态资源文件
三、操作步骤
1. 登录对象存储服务控制台,创建用于存放Halo博客资源的专属存储桶,设置存储桶访问权限为公共读(公开博客附件需公开访问),在跨域CORS配置中添加Halo博客的域名,允许POST、PUT、GET等常用请求方法,操作完成后可得到可用的存储桶名称。
2. 在对象存储控制台的密钥管理页面,创建专门用于Halo博客接入的独立密钥对,保存好生成的AccessKey和SecretKey,同时记录下服务提供的Endpoint和Region信息,注意密钥不要泄露给无关人员,避免存储资源被恶意访问。
3. 登录Halo博客的后台管理界面,找到「存储设置」或「附件存储」配置入口,低版本Halo需先在插件市场搜索安装S3兼容存储插件并启用,进入配置页面后选择「S3兼容存储」作为默认存储源。
4. 按照Halo配置页面提示,依次填写之前记录的Endpoint、AccessKey、SecretKey、Bucket名称、Region信息,存储路径前缀可自定义设置为halo-attachment/方便后续文件分类管理,其余无特殊要求的配置项可保留默认值。
5. 所有参数填写完成后点击「测试连接」按钮,等待系统验证参数有效性,若提示连接成功即可进入下一步,若提示连接失败需返回检查各参数填写是否正确,是否有遗漏字符、多空格等问题。
6. 保存配置后,在Halo后台的附件库上传一张测试图片,上传完成后复制图片的访问链接,在无痕浏览器中打开确认可以正常加载,同时登录对象存储控制台的对应存储桶中查看,确认测试图片已成功同步存储到对象存储中。
7. 若有之前存放在服务器本地的旧附件,可通过Halo的存储迁移插件或者批量上传工具,将本地附件批量迁移到对象存储的对应路径下,批量替换旧文章中的附件链接为对象存储的访问地址,完成全量资源切换。
四、常见错误
1. Endpoint填写错误:很多用户容易将存储桶访问域名当成Endpoint填写,或者遗漏http/https前缀,导致连接失败。解决方法是严格复制对象存储服务商提供的官方Endpoint地址,不要自行修改后缀或路径。
2. 权限配置错误:要么是存储桶设置了私有访问导致上传的附件无法公开访问,要么是AccessKey的权限不足,没有对应存储桶的读写权限。解决方法是先检查存储桶的访问权限是否为公共读,再确认密钥对应的账号拥有对应存储桶的读写权限。
3. 跨域配置缺失:上传附件时提示跨域请求被拦截,无法正常上传文件。解决方法是在对象存储控制台的跨域CORS配置中,添加Halo博客的主域名和后台域名,允许GET、POST、PUT、DELETE、OPTIONS等请求方法。
4. Region填写不匹配:部分S3兼容服务对Region校验严格,填写错误会直接导致连接失败。解决方法是和服务商提供的Region信息保持完全一致,如果服务商没有明确要求可填写auto或者留空。
5. 上传成功但访问链接404:通常是因为存储路径配置错误,或者对象存储的自定义域名没有绑定完成。解决方法是检查Halo中的存储路径配置是否和存储桶中的路径匹配,确认已经绑定了正确的自定义访问域名到存储桶。
五、示例说明
以下为Halo博客S3存储配置的通用填写示例,无需填写虚构地址或密钥,按照实际获得的信息替换即可:
- 存储类型:S3兼容存储
- Endpoint:填写所使用的对象存储服务官方提供的Endpoint地址,需带http/https前缀
- AccessKey:填写你在对象存储控制台生成的AccessKey ID
- SecretKey:填写与AccessKey配对的SecretKey密码
- Bucket:填写提前创建好的存储桶名称
- Region:填写对象存储服务对应的区域标识,无特殊要求可填写
auto - 存储路径前缀:可自定义填写,比如
halo/upload/,所有上传的附件都会存储到该路径下 - 自定义访问域名:如果有绑定自定义域名可以填写,没有的话可以用存储桶默认的访问域名
- 访问权限:默认选择公共读即可,适合公开博客的附件访问需求
六、更简单的方案
如果不想自己搭建MinIO这类自建对象存储服务,也不想额外维护存储服务器、处理存储扩容、流量带宽调度、安全防护等问题,可以直接选择成熟的第三方兼容S3协议的云对象存储服务,开箱即用,无需自行维护底层存储资源。如果你需要一个兼容S3协议、适合博客附件存储、图床、程序接入和不限流量下载分发的对象存储服务,可以了解 七彩云对象存储,适配包括Halo在内的多款常用建站程序,接入门槛低,适合中小站长和开发者使用。
七、FAQ
Q:Halo接入对象存储后,之前已经上传到服务器本地的附件会自动迁移吗?
A:不会自动迁移,你需要手动将本地的附件批量上传到对象存储的对应路径下,或者使用Halo的存储迁移插件完成旧资源的批量迁移,同时批量替换旧文章中的附件链接为新的对象存储访问地址即可。
Q:接入对象存储后会影响博客的访问速度吗?
A:正常情况下不会,正规的对象存储服务都配套了CDN加速节点,静态资源的访问速度会比直接从单服务器加载更快,反而能降低服务器带宽压力,提升博客的整体访问体验。
Q:可以只把图片、视频这类大文件存到对象存储,小文件仍然存在本地吗?
A:可以,部分Halo的S3存储插件支持配置文件大小过滤规则,超过指定大小的文件自动上传到对象存储,小文件保留在本地,也可以在上传附件时手动选择不同的存储源存放对应文件。
Q:AccessKey和SecretKey泄露了怎么办?
A:立刻登录对象存储控制台,删除泄露的密钥对,重新生成新的密钥对,然后到Halo的存储配置中更新为新的密钥即可,密钥更新不会影响已经上传到存储桶中的文件。
八、总结
Halo博客接入S3兼容对象存储的整体流程门槛不高,核心就是准备S3接入凭证、在Halo后台填写配置、测试连通三个主要环节,完成配置后可以大幅降低服务器的存储压力和带宽成本,同时提升静态资源的访问速度,非常适合访问量较高、附件资源较多的个人博客、技术博客、内容站点使用。如果你有大文件存储、下载分发、资源托管等需求,选择兼容S3的云对象存储服务可以省去大量自建维护的成本,让你可以专注于博客内容的运营。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网