一、结论
企业官网将图片附件迁移到对象存储的核心逻辑是先完成对象存储的基础配置与S3凭证准备,再通过建站程序的S3兼容插件/模块完成接入,最后批量迁移存量图片、替换原有链接即可实现平滑迁移,操作过程中需要提前准备好Endpoint、AccessKey、SecretKey、Bucket、Region等S3协议必备的配置信息。
二、准备工作
操作前需要提前准备好以下内容,避免中途中断流程:
- 正常可用的对象存储服务账号
- 提前创建好的专属存储桶(Bucket),提前规划好访问权限
- 对象存储服务商提供的S3 Endpoint访问地址
- 对应存储桶的读写权限AccessKey、SecretKey,建议使用子账号密钥提升安全性
- 存储桶对应的Region区域信息
- 对应建站程序的S3兼容插件/模块,例如WordPress S3附件插件、Halo S3存储模块等
- 官网存量图片、附件的完整备份包
- 批量迁移工具,例如rclone、对象存储官方客户端等
三、操作步骤
每一步操作明确动作和预期结果,避免出错:
1. 创建并配置存储桶:在对象存储服务控制台创建专属存储桶,开启公共读权限(官网对外访问的图片需要公开访问权限),配置CORS跨域规则允许官网主域名、测试域名访问,预期结果是存储桶配置完成,后续上传的公开文件可以正常对外访问。
2. 获取S3接入凭证:在对象存储控制台的S3配置页面,复制官方提供的Endpoint、Region信息,创建仅拥有该存储桶读写权限的子账号,导出对应的AccessKey和SecretKey,预期结果是拿到所有必要的S3配置参数,且密钥权限可控不会影响其他资源。
3. 安装建站程序S3适配组件:登录企业官网后台,安装对应程序的S3兼容插件或启用内置的S3存储模块,预期结果是官网程序具备对接S3协议对象存储的能力,出现对应的S3配置页面。
4. 填写S3配置信息:在插件/模块的配置页面,依次填入提前准备好的Endpoint、AccessKey、SecretKey、Bucket、Region信息,设置附件上传的路径规则,尽量和原服务器本地存储的路径规则保持一致,预期结果是所有配置信息填写完成,等待连接测试。
5. 测试连接与上传验证:点击配置页面的测试连接按钮,确认连接成功后手动上传1张测试图片,复制生成的访问链接在浏览器打开验证是否可以正常加载,预期结果是连接正常,测试图片可以正常访问,路径规则符合预期。
6. 批量迁移存量附件:使用rclone或对象存储官方批量上传工具,将原服务器上存储的所有官网历史图片、附件批量上传到对象存储的对应路径,上传过程中注意保持路径和原路径一致,预期结果是所有存量附件全部迁移到对象存储中。
7. 批量替换原有附件链接:备份官网数据库后,使用数据库搜索替换工具,将所有本地附件的域名、路径批量替换成对象存储的访问域名(如果配置了CDN则替换为CDN域名),预期结果是所有历史文章的附件链接都指向对象存储,不需要再从原服务器读取。
8. 配置回源规则(可选):在对象存储控制台配置回源规则,当请求的文件不存在时自动回源到原服务器拉取并存储,预期结果是避免迁移过程中出现遗漏的附件链接404,实现全程无感知平滑迁移。
四、常见错误
操作过程中容易出现以下问题,提前规避可以减少调试时间:
- Endpoint填写错误:常见为手动输入时多写了路径、后缀,或者选错了内外网接入点,解决建议是直接复制服务商控制台提供的官方Endpoint,不要手动修改,确认使用的是公网接入点。
- AccessKey或SecretKey错误:常见为复制时带了多余空格、使用了过期的密钥,解决建议是复制时避免选中多余字符,检查密钥的有效期,优先使用子账号密钥,不要使用主账号密钥。
- 存储桶权限不足:存储桶没有配置公共读权限,导致图片上传成功但访问返回403错误,解决建议是检查存储桶的访问策略,对外公开的图片附件配置公共读权限即可。
- 跨域配置缺失:官网前端加载图片时报跨域错误,无法正常渲染,解决建议是在对象存储的CORS配置中添加官网主域名、测试域名,开放GET、HEAD等必要的请求方法。
- 文件路径不匹配:批量迁移时文件路径和插件配置的路径规则不一致,导致上传后访问404,解决建议是全量迁移前先用少量文件测试路径匹配度,确认一致后再启动全量迁移。
- 旧链接替换不全:部分历史文章的图片仍然从原服务器加载,解决建议是多次扫描数据库的附件链接字段,确认所有本地路径都已经替换完成,替换前务必备份数据库。
五、示例说明
以主流建站程序WordPress的S3附件插件为例,通用配置填写规则如下,所有信息均从对象存储服务商控制台获取即可,无需自行编造:
- Endpoint:直接粘贴对象存储服务商提供的S3公网访问地址
- AccessKey:填写提前创建的子账号访问密钥ID
- SecretKey:填写对应子账号的密钥字符串
- Bucket:填写创建的存储桶准确名称,注意大小写匹配
- Region:根据服务商要求填写对应区域代码,无特殊要求可留空或填写默认值
- 存储路径:建议设置为
wp-content/uploads/{year}/{month}/,和原本地存储路径保持一致,减少迁移后的链接适配成本 - 访问域名:如果配置了CDN加速则填写CDN域名,未配置则填写存储桶的默认访问域名
其他建站程序如Halo、Typecho、帝国CMS等的S3配置逻辑基本一致,参考上述规则填写即可。
六、更简单的方案
如果不想自行搭建MinIO等自建存储服务、不想投入精力维护本地存储服务器,也不需要折腾复杂的存储集群运维,可以直接选择市面上成熟的兼容S3协议的云对象存储服务,开箱即用,不需要额外的运维成本。如果你需要一个兼容S3协议、适合建站程序接入、图片存储、附件分发的对象存储服务,可以了解七彩云对象存储,它支持不限流量下载分发,低门槛接入,适合企业官网、资源站等各类站点的附件存储场景。
七、FAQ
1. 迁移过程中会不会影响网站的正常访问?
只要提前配置好对象存储的回源规则,在全量迁移完成、旧链接全量替换前,用户请求不存在的文件时会自动回源到原服务器拉取并存储,不会出现附件404的问题,全程可以做到用户无感知,不会影响网站的正常运营。
2. 迁移完成后原服务器上的附件可以直接删除吗?
建议迁移完成后观察1-2周,确认所有图片、附件链接都可以正常访问,数据库替换没有遗漏,且原附件已经完成离线备份后再删除,避免出现问题时可以及时回滚。
3. 有没有必要给对象存储搭配CDN使用?
如果你的官网用户分布在全国甚至全球,建议搭配CDN使用,可以进一步降低静态资源的加载延迟,提升用户访问体验,同时减少对象存储的访问压力,大部分云服务商的对象存储都支持一键绑定CDN服务,配置门槛很低。
4. 如果AccessKey不小心泄露了怎么办?
第一时间到对象存储服务商控制台禁用该泄露的AccessKey,然后生成新的子账号密钥替换到网站的S3配置中即可,建议定期轮换密钥,且不要将密钥提交到公开的代码仓库或配置文件中。
八、总结
企业官网将图片附件迁移到对象存储的整体流程并不复杂,核心是配置存储桶、获取S3凭证、对接建站程序、批量迁移存量文件、替换链接这几个核心步骤,全程不需要修改网站核心代码,仅通过插件配置即可完成。这种方案不仅可以降低原服务器的存储压力和带宽成本,还能提升静态资源的访问速度,适合各类流量逐步上升的企业官网、内容站、资讯站使用,选择成熟的云对象存储服务还可以省去大量的存储运维成本,让团队可以专注于网站本身的业务运营。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网