【问题标题】:Recommendations on deploying create-react-app with node backend关于使用节点后端部署 create-react-app 的建议
【发布时间】:2019-12-24 12:59:43
【问题描述】:

我正在尝试部署使用 node.js express 后端(在 AWS EC2 实例上运行)的 React 应用程序。我无法决定如何部署我的 React 应用程序以确保它可以从后端获取。

  1. 我可以将我的网站 example.com 设置为定向到具有我的 React 应用程序的 AWS S3 静态托管。在这种情况下,我必须对我的 ec2 公共 IP 进行硬编码,例如fetch("http://12.35.143.34/api/users/1") 在 React 代码中。

  2. 我可以将我的网站 example.com 设置为使用 Nginx 定向到一个 ec2 实例,该实例会将 /api 调用定向到服务器,并将任何其他类型的调用定向到 S3 存储桶。

我阅读了关于这两种方式的不同帖子,所以我很困惑哪种方式是正确的。

编辑:或者是否有第三个选项,例如 api 子域?

【问题讨论】:

    标签: node.js reactjs amazon-web-services nginx


    【解决方案1】:

    有很多方法可以在 AWS 上运行基于 NodeJS 的应用程序。最适合您的方案取决于您的情况以及您的应用的开发方式。

    1. 使用AWS Elastic Beanstalk
    • 这是一项 PaaS 服务,可让您在 AWS 基础设施之上运行应用程序,而无需单独配置这些服务。
    • Documentation
    1. 使用AWS Lambda + AWS API Gateway
    • 如果您的代码库支持它,这是一种非常可扩展、廉价且高性能的方式来运行您的应用程序。
    • 您可能需要重写部分代码。这取决于您的后端是如何编写的。如果您使用的是 express,可以很简单地将其迁移到 AWS Lambda。
    • Migrating an Express Application to Amazon API Gateway and AWS Lambda
    1. EC2 使用 ELBAuto Scaling Groups
    • 无论您的应用程序有多大,您都应该以某种程度的高可用性和负载平衡来运行它。
    • 您不应该只在一个节点上运行您的应用程序;您应该使用 Auto Scaling 组。
    • 您不应该直接在 Internet 上发布您的 EC2 实例;您应该使用 Application Load Balancer。
    • 如果您的应用程序使用数据库,您应该尝试将其移至 RDS,而不是自己运行。

    最后,为了回答您的问题,我建议 3:您应该使用多个 CloudFront 源。我们使用 S3 存储桶源来保存静态数据,使用 ELB 源来保存动态、不可缓存的内容。 Check this post for more information on how to do it.

    如果您拥有域,您还可以创建证书并通过 HTTPS 提供您的内容,由 CloudFront 处理。

    希望对你有帮助。

    【讨论】:

    • 感谢您提供的信息丰富的评论(我正在使用 3。)但是我目前更关心的是我应该使用 1. 还是 2.(我的帖子)
    • 你是对的;我没有回答你的问题。我已经编辑了我的答案来解决这个问题。让我知道你的想法。
    【解决方案2】:

    我的方式:

    1.将您的节点应用程序部署到 EC2 尝试附加 DNS 或仅使用 aws 给定的 DNS -here

    2.使用邮递员测试您的 api。

    3.将api url端点值更改为api DNS

    4.deploy(上传)你的 dist/(构建目录)-here

    5.将存储桶配置为静态网站主机 - here

    6.(可选)尝试将 CloudFront 配置到您的存储桶并获取应用 dns - here

    【讨论】:

    • 对于 3. 和 6. 您指的是哪个 DNS?如何为同一个 DNS 设置两个端点?你的意思是使用 api.example.com 和 example.com 吗?
    • 3 API DNS(与 EC2 实例相关的 DNS)。 6 DNS 要配置是否要访问 React 应用程序(它是可选的)
    猜你喜欢
    • 2019-09-07
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2019-07-11
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多