Halo CMS对接对象存储,图片存放云端
很多朋友用 Halo CMS 建站后,会发现图片越来越多,服务器磁盘空间吃紧,访问速度也变慢。
把图片放到对象存储,既能省服务器空间,又能借助 CDN 加速。
本文就带你从零开始,完成 Halo CMS 对接对象存储,实现图片云端存放。
开始前的必要准备
在动手之前,你需要准备好这几样东西:
- 一个可用的对象存储服务,比如阿里云 OSS、腾讯云 COS、七牛云 Kodo 或 MinIO。本文以通用 S3 兼容协议为例,大部分云厂商都支持。
- 记录下对象存储的 Endpoint(访问域名)、AccessKey、SecretKey 和 Bucket 名称。这些在云厂商控制台的“访问密钥”和“存储桶”页面可以找到。
- 确保 Halo CMS 版本在 2.0 以上,因为从 2.x 开始原生支持 S3 协议的对象存储。旧版本可能需要插件,建议先升级。
- 服务器能正常访问外网,否则无法上传文件到对象存储。
在 Halo 后台配置存储策略
登录 Halo 管理后台,按照以下路径操作:
- 点击左侧菜单的 “附件”,然后选择 “存储策略”。
- 点击右上角的 “新建存储策略”。
- 在弹出的窗口中,选择 “S3 对象存储” 作为存储类型。
- 填写配置信息:
- 存储名称:自定义,比如“我的OSS”。
- Endpoint:填对象存储的外网访问地址,例如
oss-cn-hangzhou.aliyuncs.com(阿里云)或cos.ap-guangzhou.myqcloud.com(腾讯云)。注意不要带http://或https://。 - Access Key 和 Secret Key:粘贴你准备好的密钥。
- Bucket 名称:填你创建的存储桶名字。
- 区域:部分服务商需要填,比如
ap-guangzhou,如果不确定可以留空或参考服务商文档。 - 协议:一般选
HTTPS。 - 路径前缀:可选,比如填
halo/,这样所有文件会存放在存储桶的 halo 目录下,方便管理。
- 点击 “保存”。
保存后,系统会提示是否设为默认策略。一定要把它设为默认,否则新上传的图片不会自动走对象存储。
验证配置是否生效
配置完成后,需要实际测试一下:
- 在 Halo 后台写一篇文章,插入一张本地图片并发布。
- 然后到文章前台页面,右键点击图片,选择“在新标签页打开图片”。
- 观察浏览器地址栏,如果图片的 URL 变成了你对象存储的域名(比如
https://your-bucket.oss-cn-hangzhou.aliyuncs.com/...),说明配置成功。 - 同时,你可以登录对象存储控制台,查看对应的 Bucket 里是否出现了刚上传的图片文件。
如果图片地址仍然是你的服务器域名,说明默认存储策略没生效,请回到存储策略列表,确认默认策略是否勾选正确。
几个容易踩坑的地方
- 跨域问题:如果图片能上传但前台不显示,可能是对象存储的跨域设置没配好。需要在对象存储控制台找到跨域设置,添加一条规则,来源填你的网站域名,允许方法勾选 GET、POST、PUT,允许头部填
*。 - 权限问题:Bucket 的读写权限建议设为 “公共读”,否则图片无法被公开访问。如果设为私有,就需要生成签名 URL,Halo 默认不支持,容易导致图片裂开。
- Endpoint 格式:有些服务商要求 Endpoint 带区域前缀,比如
s3.ap-southeast-1.amazonaws.com,填错会导致连接失败。建议直接复制控制台提供的 Endpoint。 - HTTPS 证书:如果对象存储绑定了自定义域名并开启了 HTTPS,要确保域名已备案且证书有效,否则浏览器会拦截图片。
图片云端存放后的效果检查
完成以上步骤后,你可以做一次全面检查:
- 新上传的图片是否自动进入对象存储,并且前台访问正常。
- 之前已经上传到本地服务器的图片不会自动迁移,如果需要迁移,可以手动下载再重新上传,或者使用对象存储提供的迁移工具。
- 观察服务器磁盘空间,如果不再增长,说明图片已经成功转移到云端。
Halo CMS 对接对象存储后,图片存放云端可以显著降低服务器负载,同时提升图片加载速度。 如果遇到上传失败,优先检查密钥权限和 Bucket 权限。
常见疑问
问:配置保存后,上传图片报错“Access Denied”怎么办?
答:通常是 AccessKey 或 SecretKey 错误,或者该密钥没有对应 Bucket 的读写权限。
请到对象存储控制台检查密钥是否启用,并确认授权策略。
问:可以同时使用本地存储和对象存储吗?
答:可以。
在 Halo 的存储策略里,你可以创建多个策略,但默认策略只有一个。
上传附件时可以选择使用哪个策略,但为了管理方便,建议统一使用对象存储。
问:对象存储会产生额外费用吗?
答:大多数对象存储服务按存储容量、请求次数和流量计费,具体价格请以服务商官方定价为准。
对于个人博客,通常费用很低。
问:迁移旧图片到对象存储有什么好办法?
答:如果图片不多,可以在 Halo 后台的附件管理里逐个下载再重新上传。
如果量大,可以考虑使用对象存储提供的命令行工具或第三方迁移工具,但操作前请先备份数据。
按照以上步骤操作,你应该已经成功让 Halo CMS 的图片存放云端了。
如果还有其他问题,欢迎在评论区留言交流。