【问题标题】:Deploying react js and node js full stack on AWS production?在 AWS 生产环境中部署 react js 和 node js 全栈?
【发布时间】:2020-10-29 00:35:09
【问题描述】:

我目前已经在 AWS 上的 nginx 上部署了 React 和 Node.js。我的部署没有问题,也没有错误。

当前环境是:PRODUCTION。

但我怀疑我遵循的方法是对还是错。这是我遵循的方法,https://jasonwatmore.com/post/2019/11/18/react-nodejs-on-aws-how-to-deploy-a-mern-stack-app-to-amazon-ec2

以下是我的nginx配置

 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;


        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                root /var/apps/front_end/build;
                try_files $uri /index.html;
        }
        location /api/ {
         proxy_pass http://0.0.0.0:3005/;
         }

如上所示,我已将 npm run build 后的 build 文件夹复制到 AWS 实例,并将位置提供给 nginx,后端原样复制到 AWS 实例,我将 npm start 它在 3005 端口上运行,我将该 IP 提供给 /api 位置以代理传递

我看到其他几个使用 server.js 作为前端并将构建文件夹文件放在那里并将 nginx 设置为该 server.js。

那我应该那样做吗?或者我对上面链接中的当前方法是否满意?

【问题讨论】:

  • 在知道您是否做对之前,您能否提供有关您的应用程序的更多信息:1. 规模是多少 2. SLA 要求是什么 3. 是否需要后端(是它在服务器端呈现)根据您的答案,您可能能够在 AWS 上提供更便宜/更有效的解决方案。例如:CloudFront 上的静态站点
  • 应用规模可能在 3000 到 5000 之间,以后可能会增加
  • 这些数字是每秒请求数吗?
  • 我们网站的活跃用户
  • 好吧,如果您不需要服务器,我建议您不要使用 NGINX,而只是从 CloudFront 提供您的资产。您可以使用基于地理的路由来确保您的内容快速交付。像这样,medium.com/@wolovim/… prod 部署当然可能会有所不同,但这会给你一个想法

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


【解决方案1】:

就像其他所有事情一样,有多种方法可以解决这个问题。根据您结束问题的方式,您似乎愿意探索它们。

以下是我的偏好,具体取决于我这边职责的递增顺序与 AWS 为我处理的内容:

AWS Amplify

鉴于您已经在使用 React 和 Node,这将是一个相对容易的切换。 Amplify 不仅是一组非常有用的前端框架,可以轻松添加身份验证、社交登录、轮换 API 密钥(通过 Cognito 和 API 网关)等功能,而且后端逻辑最终可以部署在 AWS ApiGatewayAWS Lambda。不仅如此,Amplify 还提供 CICD 管道并与 Gothub 连接。

您可以在几分钟内获得可扩展的服务,可选择通过AWS CloudFront、全球 CDN 服务或通过 S3 托管来托管前端,通过 ApiGateway 和 Lambda 部署 API,通过 AWS CodeDeploy 和 Code 设置 CICD 管道通过AWS Cognito 构建并进行用户管理。您可以拥有多个环境 dev、test、beta 等,并对其进行设置,以便对主分支的任何推送都会自动部署在基础设施上,依此类推,其他分支将映射到特定环境。最重要的是,可以使用相同的堆栈在本地进行测试和开发。

如果您很想以特定方式使用特定服务或功能,则可以构建上述服务的任何组合。 API Gateway 用于管理 API,Cognito 用于用户管理,Lambda 用于计算容量等。 请记住,这些是托管服务,因此您可以将大量工程时间转移到 AWS,而作为服务器意味着您需要为所用的东西付费。

谈到您分享的示例,您不希望您的节点进程负责为静态资产提供服务 - 这是一种计算能力的浪费,因为服务 JS、CSS 或图像没有附加智能,而且还因为在这种情况下,您会在循环中引入一个新进程。而是让 NGINX 自己提供静态资产。请参阅this 官方指南或此StackOverflow 答案。

【讨论】:

  • 这是我的实习工作,我花了将近 55 多天的日夜开发,我们即将在本周推出,所以你的解决方案听起来不错,但实施起来需要更多时间时间不是吗?那么请在有限的时间内提出一种有效的方法?
  • 嘿 Ritesh,如果您只需要部署应用程序并且没有真正绑定到 AWS,请查看 Heroku,更具体地说是本教程 - blog.heroku.com/deploying-react-with-zero-configuration 如果您被绑定到AWS,并不真正关心扩展、使用负载等,直接通过 NGINX 为静态资产提供服务。我已在答案末尾添加了链接。
  • 给我项目的实习人员让我使用AWS EC2实例,Nginx进行负载均衡。所以我现在不能转移到Heroku,所以请给我一个更好的建议,谢谢你立即回复
  • 那么在这种情况下,您可以继续提供 express 应用程序并使用 NGINX 作为反向代理,并直接通过 NGINX 从 dist/build 文件夹提供静态资产。请注意,如果您在服务器上有 NGINX 并且运行 NGINX 将请求路由到的单个 NodeJS 进程,则此配置中的 NGINX 充当反向代理而不是负载均衡器。这里没有什么可以平衡负载。
  • 很高兴我能帮上忙@RitteshP.V.负载平衡是当您有多个处理单元时,在这种情况下是 NodeJS 线程/进程,并且希望在它们之间分配传入的负载。由于您只有一个在 :3005 上运行,因此您不需要负载平衡。坦率地说,给你项目的人很可能只是误用了这个词,而是将其设置为反向代理。你会惊讶于它的使用频率
猜你喜欢
  • 2017-06-25
  • 2021-12-08
  • 1970-01-01
  • 2020-03-06
  • 2019-11-22
  • 1970-01-01
  • 2022-07-13
  • 2014-11-09
  • 1970-01-01
相关资源
最近更新 更多