使用 React 迁移 Heroku 到 AWS

Posted

技术标签:

【中文标题】使用 React 迁移 Heroku 到 AWS【英文标题】:Heroku to AWS migration using React 【发布时间】:2019-09-04 18:00:00 【问题描述】:

我有一个功能正常的 React Web 应用程序,它部署在 Heroku 上。我正在尝试将整个应用程序迁移到 AWS,但遇到了一些麻烦。我首先尝试创建一个 EC2 实例并在那里克隆我的 github 存储库。我无法让它工作。我认为这是因为只有服务器端代码应该添加到 EC2 实例而不是客户端。

我现在正在尝试使用 Elastic Beanstalk 上传我的代码(服务器和客户端)。这个过程看起来很简单,但是当我上传我的 .zip 文件并进行部署时,我在事件日志中收到以下错误:

未能找到 package.json。 Node.js 启动时可能会出现问题。验证 package.json 是否有效或将代码放在名为 server.js 或 app.js 的文件中。

我的 zip 文件夹中有一个 package.json 文件,所以我真的不确定这里发生了什么。对此的任何建议都会有所帮助。

这是我package.json的内容:


  "name": "beer",
  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:5000",
  "dependencies": 
    "@fortawesome/fontawesome-svg-core": "^1.2.12",
    "@fortawesome/free-solid-svg-icons": "^5.6.3",
    "@fortawesome/react-fontawesome": "^0.1.3",
    "@material-ui/core": "^3.8.1",
    "@material-ui/icons": "^3.0.1",
    "aws-sdk": "^2.422.0",
    "axios": "^0.18.0",
    "bcrypt": "^3.0.4",
    "body-parser": "^1.18.3",
    "cookie-session": "^2.0.0-beta.3",
    "dotenv": "^4.0.0",
    "express": "^4.16.4",
    "material-ui-rating": "^2.0.0",
    "passport": "^0.4.0",
    "passport-local": "^1.0.0",
    "pg": "^7.8.0",
    "react": "^16.7.0",
    "react-dom": "^16.7.0",
    "react-redux": "^6.0.0",
    "react-router-dom": "^4.3.1",
    "react-scripts": "2.1.2",
    "redux": "^4.0.1",
    "redux-logger": "^3.0.6",
    "redux-saga": "^0.16.2",
    "session-middleware": "^1.0.2",
    "sweetalert": "^2.1.2"
  ,
  "scripts": 
    "start": "node server/server.js",
    "client": "react-scripts start",
    "server": "nodemon --watch server server/server.js",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  ,
  "eslintConfig": 
    "extends": "react-app"
  ,
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]

还有我的 zip 里面的文件结构:

--beer
  -build
  -nodemodules
  -package.json
  -public
    -index.html
    -manifest.json
  -server
    -server.js
    -modules
    -routes
  -src
    -index.js
    -components
      -App
        -App.js
      -redux
        -reducers
          -index.js
        -sagas
          index.js

【问题讨论】:

package.json 在您的 zip 文件夹的根目录中吗? @Chris 我不确定。我没有根文件夹,但我确实尝试模仿 Elastic Beanstalk Demo 文件夹的格式。 package.json 位于主文件夹中。 根文件夹是您项目的“***文件夹”。如果这就是“主文件夹”的意思,我想我们说的是同一件事。请edit您的问题并添加您的package.json的内容。 @Chris 我已经编辑了我的帖子以包含我的 package.json 的内容 Hrm,这看起来有效。部署输出中是否还有其他有趣的消息? 【参考方案1】:

使用 zip 文件部署到 Elastic Beanstalk 时,您必须确保您的 zip doesn't contain a top-level container directory.在您的情况下,您的 beer/ 目录不能包含在内。

在 macOS 或 Windows 上,您可以select the contents of your beer/ directory and compress them。如果您上传没有***目录的新 zip,Elastic Beanstalk 应该能够找到您的 package.json 文件并正确部署您的应用程序。

【讨论】:

以上是关于使用 React 迁移 Heroku 到 AWS的主要内容,如果未能解决你的问题,请参考以下文章

如何将现有的 Web 应用程序从 Heroku 迁移到 AWS

从 Heroku 迁移到 AWS 时的清单

解析迁移到关于图像的 heroku/aws

Parse Image + Parse httpRequest 替换——从 Parse Cloud Code 迁移到 Parse Server on Node (Heroku / AWS / DO)

实战应用:借助Kubernetes不停机从Heroku迁移至AWS

Heroku 使用 AWS Route 53 重定向子域