AWS CodePipeline无法加载PHP+React Git仓库中的React前端问题
问题
我是AWS新手,给包含React前端和PHP后端的Git仓库搭建了CodePipeline:先创建了用于PHP后端的Elastic Beanstalk环境,再通过CodeBuild构建代码,最后创建CodePipeline。但访问时仅能看到PHP内容,React前端无法加载。修改React代码后,能在CodeBuild中看到对应更新,推测构建环节无问题。我的YAML构建文件如下:
version: 0.2 phases: install: # runtime-versions: # nodejs: 14.11.0 commands: # - echo installing node 16 # - curl -sL https://deb.nodesource.com/setup_16.x | bash # - apt install -y nodejs # - echo installing Yarn... # - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - # - echo "curl -sS https://dl.yarnpkg.com/debian/ stable main" # - apt install --no-install-recommends yarn pre_build: commands: - echo Installing source NPM dependencies... - npm install build: commands: - echo Testing ... # yarn test - echo Building ... - npm run build post_build: commands: - echo Build completed on `date` # Include only the files required for your application to run. artifacts: files: - "**/*" base-directory : 'build' # - config.js # - index.js # - reset.js # - package.json # - node_modules/**/*
分析与解决步骤
- 核心问题:你的CodeBuild当前只输出了React构建后的
build目录内容,完全没包含PHP后端代码;同时Elastic Beanstalk作为PHP环境,需要把前端静态文件放到PHP的Web根目录下才能被正确托管。 - 调整buildspec.yml:
- 取消install阶段的Node.js配置注释,确保构建环境有合适的Node版本(比如你注释的Node 16),默认环境可能没有对应版本导致构建异常。
- 如果React项目在仓库子目录中,先进入对应目录执行依赖安装和构建操作。
- 将React构建好的
build目录内容复制到PHP后端的Web根目录(通常是public或htdocs),然后把所有代码(PHP+前端静态文件)作为构建产物输出。
参考调整后的buildspec:
version: 0.2 phases: install: runtime-versions: nodejs: 16 php: 8.0 # 根据你的PHP后端实际版本调整 commands: - echo Installing required runtime environments... pre_build: commands: - echo Installing React dependencies... - cd react-app # 替换成你仓库中React项目的实际子目录路径 - npm install build: commands: - echo Building React app... - npm run build - echo Copying build files to PHP public directory... - cp -r build/* ../public/ # 假设PHP后端的Web根目录是项目根下的public文件夹 post_build: commands: - echo Build completed on `date` artifacts: files: - "**/*" # 输出所有文件,包括PHP代码和已放置好的前端静态文件
- 配置Elastic Beanstalk文档根目录:进入环境配置→软件设置,把文档根目录设为
/public(或者你放置前端静态文件的目录),这样访问时会优先加载React的index.html,同时PHP接口可以正常访问。 - 验证CodePipeline部署:确认CodeBuild输出的完整代码包被部署到Elastic Beanstalk,避免只部署了前端或后端的一部分。
内容的提问来源于stack exchange,提问作者jatin
相关产品推荐
相关产品推荐

