Heroku部署WordPress项目图片丢失问题求助
解决Heroku上WordPress图片重启后失效的问题
这个问题我之前帮好几个开发者踩过坑,核心原因其实是Heroku的临时文件系统(Ephemeral Filesystem)——Heroku的每个dyno(运行容器)重启后,本地存储的所有文件都会被重置回初始部署状态,你上传到WordPress本地wp-content/uploads的图片自然就没了,导致图库占位、前端图片消失。
下面是具体的解决方案,按步骤来就能彻底解决:
1. 改用外部持久化存储(核心方案)
Heroku不适合存储用户上传的内容,必须把媒体文件放到外部对象存储服务,比如AWS S3、Cloudflare R2这类,这里以AWS S3为例:
- 先在AWS控制台创建一个S3存储桶,记得配置公开读取权限(因为前端要加载图片),同时设置好CORS规则允许你的Heroku域名访问。
- 在WordPress后台安装
WP Offload Media插件(或者类似的存储同步插件),进入插件设置页面,关联你的S3存储桶,配置上传路径、文件访问权限等。 - 开启“自动上传到存储桶”选项,之后所有新上传的图片都会直接存到S3,不再占用Heroku本地空间。
2. 迁移已有的本地图片到外部存储
如果之前已经上传过图片,需要把它们同步到存储桶并更新数据库链接:
- 把Heroku上
wp-content/uploads文件夹里的所有文件,通过AWS CLI或者S3控制台上传到你的存储桶对应路径。 - 用插件的“媒体库迁移”工具,批量更新WordPress数据库里的图片URL,把本地路径替换成S3的地址。
3. 验证配置是否生效
- 上传一张新图片到媒体库,检查图片的URL是不是S3的地址(比如
https://your-bucket.s3.amazonaws.com/2024/05/test.jpg),而不是Heroku域名下的本地路径。 - 手动重启Heroku dyno:在终端执行
heroku restart,之后刷新WordPress前端和后台图库,确认所有图片都能正常显示,不会再出现空白占位。
额外注意事项
- 永远不要依赖Heroku的本地文件系统存储用户生成内容,除了重启丢失,dyno扩容时多个实例之间也无法共享本地文件。
- 如果不用AWS S3,也可以选择其他兼容S3协议的存储服务,比如DigitalOcean Spaces,配置步骤基本一致。
- 确保存储桶的权限配置正确,避免出现图片无法加载的403错误。
内容的提问来源于stack exchange,提问作者ann karsksya
相关产品推荐
相关产品推荐

