【发布时间】:2021-01-06 22:53:33
【问题描述】:
下面我会详细介绍:
目标
一个 React 前端游戏,使用 socket.io 在 Express 服务器上的玩家之间传输游戏状态数据。
设置
在发现在 Amplify 实例上同时使用 React/Express 是不可能的/真正的解决方法后,我决定迁移到 CodePipeline + CodeDeploy 到 Beanstalk。
我有来自 GitHub 的源,一个 CodeBuild 步骤,然后是 CodeDeploy。 CodeBuild 基本上应该只根据我下面的buildspec.yml 进行编译:
version: 0.2
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
虽然这是调用 npm run build,但我不确定 A) CodeBuild/CodeDeploy 将尝试使用 node start 或 B) 如果这将启动我在 package.json 中构建的 react-scripts:
"scripts": {
"webpack": "webpack --production",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
我假设我希望它在 CodeBuild 中构建 webpack 包,然后 CodeDeploy 将调用正确的运行命令,但它似乎是黑盒?还有其他配置文件吗?
运行时错误
虽然我的 server.js 文件默认为 localhost 和 8080,但我收到 Connection Refused:
var hostname = process.env.IP || 'localhost';
var port = process.env.PORT || 8080;
Web.std.out.log:
Sep 20 18:10:10 ip-172-31-41-5 web: > MyApp@0.1.0 start /var/app/current
Sep 20 18:10:10 ip-172-31-41-5 web: > react-scripts start
Sep 20 18:10:12 ip-172-31-41-5 web: #033[34mℹ#033[39m #033[90m「wds」#033[39m: Project is running at http://172.31.41.5/
Sep 20 18:10:12 ip-172-31-41-5 web: #033[34mℹ#033[39m #033[90m「wds」#033[39m: webpack output is served from
Sep 20 18:10:12 ip-172-31-41-5 web: #033[34mℹ#033[39m #033[90m「wds」#033[39m: Content not from webpack is served from /var/app/current/public
Sep 20 18:10:12 ip-172-31-41-5 web: #033[34mℹ#033[39m #033[90m「wds」#033[39m: 404s will fallback to /
Sep 20 18:10:12 ip-172-31-41-5 web: Starting the development server...
Ngnix 错误日志:2020/09/18 03:07:30 [error] 4436#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.40.133, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "172.31.41.5"
很多活动部件,所以我确定这里有几个失误,不确定哪个是哪个。
【问题讨论】:
-
排查问题的第一步,检查是否可以在没有 CodePipeline 的情况下成功部署应用。只是普通的 Elastic Beanstalk。
-
我可以在本地运行
npm build和serve -s build但 Beanstalk 失败。 -
这可能是它,来自独立的 Beanstalk 日志:
[ERROR] An error occurred during execution of command [app-deploy] - [check Procfile]. Stop running the command. Error: node.js may have issues starting. Please provide a package.json file or add server.js/app.js file in source bundle -
EB 将查找 package.json 文件。如果您想使用其他命令来启动您的应用程序,您可以在
Procfile中提供您自己的命令。由于 cmets 的空间有限,我必须提供一个答案才能写更多细节。
标签: reactjs express socket.io amazon-elastic-beanstalk