将 create-react-app 部署到 AWS Elastic Beanstalk

Posted

技术标签:

【中文标题】将 create-react-app 部署到 AWS Elastic Beanstalk【英文标题】:deploying create-react-app to AWS Elastic Beanstalk 【发布时间】:2018-09-06 03:54:35 【问题描述】:

我正在尝试将 create-react-app 部署到弹性 beantalk。我的部署不断超时

ERROR: TimeoutError - The EB CLI timed out after 10 minute(s). The operation might still be running. To keep viewing events, run 'eb events -f'. To set timeout duration, use '--timeout MINUTES'.

我已经尝试了很多不同的方法来让它工作。这是我的config.yml 文件

 branch-defaults:
  dev:
    environment: uu-pilot
    group_suffix: null
environment-defaults:
  uu-pilot:
    branch: null
    repository: null
global:
  application_name: uu-pilot
  branch: null
  default_ec2_keyname: null
  default_platform: Node.js
  default_region: ca-central-1
  include_git_submodules: true
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: eb-cli
  repository: null
  sc: git
  workspace_type: Application

我的nodecommand.config.ebextensions 文件夹中:

option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: "npm start"

^^ 我也试过把node命令改成react-scripts buildreact-scripts start

所有依赖项都在 dependencies 下,而不是 package.json 中的 devDependencies,这是我的脚本

  "scripts": 
    "prestart": "react-scripts build",
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "start:prod": "react-scripts start"
  

我没有收到任何特定的错误消息,并且由于该操作也超时,因此无法查看确切的日志。我还添加了这个,以防它只是一个超时的事情:

option_settings:
- namespace: aws:elasticbeanstalk:command
  option_name: Timeout
  value: 1800

最后,我部署了一个基本的节点应用程序,看看它是否可以工作并且确实有效,所以问题在于 create-react-app 节点服务器为构建文件夹提供服务的方式。

赞赏任何方向。

【问题讨论】:

请问您为什么要尝试这个?为什么不轻易 build 你的 react 应用并将其“部署”到 S3 并将其作为静态网站提供服务? 我被告知要这样做,有什么我可以做的吗? 对不起,但这根本没有意义...请按照前面描述的方式:“构建您的反应应用程序并将其“部署”到 S3 并将其作为静态网站提供服务” 是的,这样做可以...通过 s3 存储桶 服务器只能在开发时使用...... GitHub README 中的一小段引述:“当你准备好部署到生产环境时,使用 npm run build 创建一个缩小的包”跨度> 【参考方案1】:

您要查找的是eb deploy ... --timeout <minutes>,其中<minutes> 需要是您认为您的应用程序合法地部署可能占用的时间量。

也可以将其视为 EBCLI 必须等待 AWS 响应成功/失败消息的分钟数,以便它可以停止轮询并退出。在此之前,EBCLI 将定期轮询 AWS。当 EBCLI 超时时,就像您的情况一样,它不会转化为 AWS 中的故障;您的操作可能仍在处理中,如错误消息所示,eb events -f 将显示其进度。

.ebextensions 配置文件中的超时实际上是指 AWS(而不是 EBCLI)可能花费在执行部署上的最长时间,因此更改此设置不会影响 EBCLI 在您的情况下的行为。

我还建议您查看CloudWatch log streaming,Beanstalk 可以使用它将您的所有日志发送到 CloudWatch。即使在环境消失后,您也应该能够访问它们,从而可以对可能出现的问题有一定的了解。请注意,CloudWatch 日志流是一项付费服务

【讨论】:

试试这个eb deploy --timeout 30 它仍然失败,表示命令执行不成功。我开始认为没有办法通过弹性 beantalk 部署它 好的,你能在你原来的帖子中分享确切的错误信息吗?流式传输到 CloudWatch 的建议怎么样?你觉得可行吗?

以上是关于将 create-react-app 部署到 AWS Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

获取 404 以获取将 create-react-app 部署到 github 页面的链接

使用 create-react-app 部署 github 页面时出现 React-router 问题 [关闭]

部署 create-react-app 时无法加载资源错误 404

使用 express 后端将 create-react-app 部署到 heroku 在浏览器中返回无效的主机标头

如何在开发模式而不是生产模式下部署 create-react-app 网站

create-react-app脚手架项目打包CDN部署