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

AWS CodePipeline部署React项目至EC2的Deploy阶段报错求助

核心故障原因
  • 最直接的超时原因:app_start.sh 中第一行执行的 npm start 是阻塞命令,会在前台持续运行 React 开发服务器,永远不会执行后续的 pm2 相关指令,导致脚本执行超过300秒阈值被强制终止
  • 部署逻辑存在多处配置错误:
    • buildspec 已执行 npm run build 生成生产环境静态产物,但 artifacts 配置未包含编译后的 build 目录,EC2 实例无法获取到可直接运行的生产代码
    • before_install.sh 中提前切换到 /home/ec2-user/server 目录,该阶段部署包尚未解压到服务器,目录不存在会导致脚本执行异常
    • 重复安装依赖,构建阶段已完成依赖安装,部署阶段无需重复执行 npm install 以及 React 相关包的安装
    • 生产环境启动开发服务器不符合部署规范,开发服务器性能低且不稳定,不适用于线上部署
修复步骤

1. 修改 buildspec.yml 产物配置

移除不需要的源码目录,新增编译后的 build 目录:

# 请勿修改版本号,此处为AWS buildspec的版本,不是您的构建配置文件的版本
version: 0.2
phases:
  pre_build:
    commands:
      # 将依赖安装到node_modules/目录下
      - npm install
  build:
    commands:
      - echo Build started on `date`
      - echo 编译中
      - npm run build
  post_build:
    commands:
      - echo Build completed on `date`
# 仅包含应用运行所需的文件
artifacts:
  files:
    - build/**/*
    - package.json
    - appspec.yml
    - scripts/**/*

2. 修改 before_install.sh

移除不存在的目录切换操作:

#!/bin/bash
curl -sL https://rpm.nodesource.com/setup_14.x | sudo -E bash -
yum -y install nodejs npm

3. 修改 after_install.sh

移除重复依赖安装,仅安装生产环境需要的进程管理和静态服务工具:

#!/bin/bash
npm install -g serve pm2

4. 修改 app_start.sh

移除阻塞的开发服务器启动指令,改为用 pm2 托管生产静态资源:

#!/bin/bash
cd /home/ec2-user/server
# 清理旧进程,避免端口占用
pm2 delete econote-dashboard 2>/dev/null || true
# 启动静态资源服务,默认监听3000端口,可修改-l参数指定端口
pm2 start serve --name "econote-dashboard" -- -s build -l 3000
pm2 startup
pm2 save
补充说明

日志中输出的所有 Hooks、未使用变量、JSX 规范类提示均为 ESLint 代码规范警告,不属于运行错误,不会影响服务正常启动,如需消除警告可根据提示内容修改对应代码即可。

内容的提问来源于stack exchange,提问作者user15884878

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:15:04