如何在Heroku上同时部署Vendure无头电商与Strapi CMS?
核心问题结论
不建议将Strapi和Vendure部署在同一个Heroku应用中,核心原因如下:
- Heroku单应用仅支持配置一个启动命令、对外开放一个网络端口,无法同时对外暴露Strapi和Vendure两个独立服务的访问入口
- 两个服务共享同一个dyno的CPU、内存资源,容易出现资源抢占导致服务崩溃,且混合输出的日志会大幅提升问题排查难度
- 后续两个服务的版本迭代、资源扩容都需要绑定操作,灵活度极低
Vendure部署到Heroku操作步骤
你可以为Vendure单独创建一个Heroku应用完成部署,操作门槛很低,具体步骤如下:
- 先在本地初始化Vendure项目,完成基础功能配置,确保本地运行正常
- 在Heroku控制台新建独立应用,绑定你的Vendure项目代码仓库
- 为该新应用添加Heroku Postgres插件,系统会自动生成数据库连接相关的环境变量,Vendure可直接读取适配,无需额外修改复杂配置
- 在Vendure项目根目录新增
Procfile文件,写入以下内容指定生产环境启动命令:
web: node dist/index.js
- 确保你的Vendure项目
package.json中包含正确的构建命令,Heroku会在部署时自动执行npm run build完成项目编译 - 在Heroku应用的设置页「Config Vars」板块,配置Vendure所需的其他环境变量,比如
APP_SECRET、COOKIE_SECRET等 - 推送代码到绑定的仓库,触发Heroku自动构建部署即可
现有架构协同方案
- 两个后端服务独立部署后,你已经部署在Vercel的Next.js前端可以分别调用两个服务的接口:内容类请求走Strapi接口,电商类的商品、订单、库存相关请求走Vendure接口,适配Vercel/commerce的数据源要求即可
- 数据库层面两个服务可以共用同一个Heroku Postgres实例,只要为两个服务配置不同的数据库表前缀,或者分别创建独立的数据库schema,就不会出现数据冲突,不需要额外购买数据库资源
如果你确实想要节省成本尝试将两个服务部署在同一个应用,可以使用PM2进程管理工具同时启动两个服务,再搭配Nginx做反向代理根据访问路径转发到对应服务端口,但该方案配置复杂度高,且Heroku dyno重启时容易出现服务异常,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

