我有一个 React + Webpack/Babel + Node/Express 应用程序,我想将它部署在 AWS 上。
我是否必须分别部署 React 和 Node/Express?或者它们可以同时部署在一起吗?
我有一个 React + Webpack/Babel + Node/Express 应用程序,我想将它部署在 AWS 上。
我是否必须分别部署 React 和 Node/Express?或者它们可以同时部署在一起吗?
例如一个 React单页应用程序和一个 Node/Express API。
S3和CloudFront上的前端(React 应用程序)(教程)
Elastic Beanstalk(推荐)或EC2上的后端(节点 API)
另一种选择是在Elastic Beanstalk或EC2上同时部署这两个部分。但是,您将错过在 S3 和 CloudFront 上托管的好处,即为您的用户提供更快的交付和更便宜的成本。在我看来,单独更新和部署 Web 应用程序的客户端和服务器端也更方便,更不容易出现意外错误。
单独部署的另一个好处是:对于前端和后端具有不同团队的组织,每个团队能够更轻松地独立部署他们自己的应用程序,而无需依赖其他团队。
4xx
错误重定向(如果您的应用程序使用HTML5 History
基于路由器的路由器,则需要)http2
和http to https
重定向您可以使用不同的子域,例如
api.domain.com
用于 Node/Express APIapp.domain.com
对于 React 应用程序然后在 API 中启用 CORS:
app.get('/api', cors({ origin: 'https://app.domain.com' }), ...)
例如一个包含一些 React 视图的 Node 应用程序。
您必须在Elastic Beanstalk或EC2上部署整个应用程序。
注意:如果你有一个包含两个子项目的单个项目(即一个文件夹用于 React 应用程序,另一个用于 Node API),并且如果两个子项目分开后仍然可以工作,那么你可以部署子项目项目分开(见答案的第一部分)。
在部署 React 部分之前运行您的Webpack 构建。您可以手动(在 AWS 上部署之前)或自动(在您的CI / CD系统中)执行此操作。如果您使用create-react-app (CRA)引导您的应用程序,只需在项目的根目录运行yarn build
或npm run build
并将“build”文件夹的内容上传到您的 S3 存储桶。
aws s3
命令管理 S3 存储桶和对象。eb
命令管理和部署您的后端。要轻松部署您的应用程序,您需要了解三个概念:微服务、容器和流程管理器。我将用更多细节和几个链接来讨论它们,以帮助您入门:
微服务是一种架构,可让您将应用程序划分为更小的服务。这有多种好处: 1- 服务易于测试。2- 服务是可更换的。3- 服务可以单独扩展。
几乎每个有用的应用程序都至少有几十个依赖项。您可以在目标机器上安装依赖项,但您肯定会面临一些挑战。Docker 等程序允许您为应用程序创建容器并将该容器部署到云上。(无论云提供商如何)了解更多...
流程管理器可确保您的应用程序运行顺畅且所有部件均正常运行。如果您的应用程序崩溃,它可以轻松地重新启动应用程序。
注意:如果您使用 ReactJS 进行服务器渲染,则此方法不起作用。转到下一个选项。
您可以简单地构建您的应用程序并将其部署到静态 S3 网站。如果您使用微服务架构将 API 与 React 应用程序分开,则此选项有效。
在 S3 中创建静态网站非常简单:
有关更多信息,请查看 AWS 便捷文档。
您可以为每个微服务启动不同的 EC2 实例。(API、React app 等)你需要使用PM2等进程管理器来确保你的 app 运行顺畅。
为了创建自动部署,我更喜欢将Terraform与Ansible结合使用。Terraform 非常具有声明性。您描述了云基础架构应该是什么样子,然后 Terraform 会为您构建它。
另一方面,Ansible 非常程序化,非常适合配置新服务器。
理想情况下,您应该进行单元测试以防止将错误代码传送到生产环境中。(将Jest与supertest一起使用,Enzyme用于浅层渲染)。但是世界是不完美的,接收客户端发生的任何潜在错误是件好事。进入哨兵