You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strapi生产环境下如何从Cloudinary切换并迁移至AWS S3

从Cloudinary迁移至AWS S3且无感知的Strapi完整方案

一、前期准备

  • 配置AWS S3存储桶:创建对应存储桶,开启静态网站托管(或搭配CloudFront做CDN保障访问速度),设置匹配业务需求的CORS规则,确保Strapi服务器和前端客户端能正常访问资源。
  • 安装Strapi S3插件:执行命令 npm install @strapi/provider-upload-aws-s3,然后在config/plugins.js中填入S3的accessKeyId、secretAccessKey、region、bucket等配置参数。
  • 全量备份数据:导出Strapi数据库(比如MySQL用mysqldump,PostgreSQL用pg_dump),同时批量备份Cloudinary上的所有媒体文件(可通过Cloudinary Admin API写脚本批量下载,或用rclone工具同步)。

二、批量迁移媒体文件到S3

  • 批量同步文件:推荐用rclone工具直接同步Cloudinary资源到S3,提前配置好rclone的Cloudinary和S3远程连接后,执行命令:
    rclone sync cloudinary:/ s3:your-bucket-name
    
    若用脚本实现,可调用Cloudinary的resources/list API批量获取所有资源URL,循环下载后上传到S3。
  • 保持路径一致性:迁移时严格保留Cloudinary中文件的路径结构,确保S3中的文件路径和原路径完全一致,后续替换数据库URL时更高效。

三、批量替换Strapi数据库中的媒体URL

  • 定位存储表:Strapi的媒体文件信息存在upload_files表,核心字段url存储的是Cloudinary的资源地址,provider_metadata字段里也可能包含Cloudinary相关地址。
  • 执行SQL更新:以MySQL为例,执行批量替换语句:
    UPDATE upload_files 
    SET url = REPLACE(url, 'https://res.cloudinary.com/your-cloud-name/image/upload/', 'https://your-bucket.s3.your-region.amazonaws.com/'),
        provider_metadata = REPLACE(provider_metadata, 'https://res.cloudinary.com/your-cloud-name/image/upload/', 'https://your-bucket.s3.your-region.amazonaws.com/');
    
    请根据实际的Cloudinary域名和S3域名调整替换规则,执行后随机查询几条记录验证URL替换是否正确。

四、切换Strapi上传提供商

  • 修改上传配置:在config/plugins.js中,将上传提供商从cloudinary切换为aws-s3,确保配置参数无误。
  • 重启Strapi:让新的上传配置生效,此时新上传的媒体文件会直接存储到AWS S3。

五、无感知过渡验证

  • 暂留Cloudinary资源:短期内不要删除Cloudinary上的文件,避免有遗漏的旧URL导致访问失败(也可配置Cloudinary的301重定向到S3地址,不过数据库URL替换完成后这一步可选)。
  • 全链路测试:访问前端所有涉及媒体资源的页面,确认图片、视频加载正常;测试新文件上传流程,验证资源是否正确存储到S3并能正常访问。
  • 日志监控:查看Strapi服务器和S3的访问日志,确保没有404错误,所有资源请求都指向S3地址。

六、收尾工作

  • 确认所有资源稳定访问后,删除Cloudinary上的旧文件,关闭Cloudinary服务以终止成本支出。
  • 再次备份更新后的数据库和S3存储桶,确保数据安全。

内容的提问来源于stack exchange,提问作者Karel Křesťan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:45:41