我目前已经在位于AWS上的nginx上部署了React和Node.js。我在部署中没有任何问题,也没有错误。
当前环境是:生产。
但是我怀疑我所采用的方法是对还是错。这是我遵循的方法,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。
那我应该那样做吗?还是我可以使用上面链接中所示的当前方法?
答案 0 :(得分:1)
就像其他所有内容一样,有多种解决方法。根据您结束问题的方式,问题看起来像您愿意探索它们。
这是我的偏爱,具体取决于我这方面的责任越来越大以及AWS为我处理的事情:
鉴于您已经在使用React和Node,这将是一个相对容易的切换。 Amplify不仅是一组非常有用的前端框架,它使添加身份验证,社交登录,旋转API密钥(通过Cognito和API Gateway)等功能变得容易,而且还可以最终部署在{{3} }和AWS ApiGateway。不仅如此,AMplify还提供了CICD管道并与Gothub连接。
您可以在几分钟内获得可伸缩的服务,并且可以选择通过AWS Lambda,全局CDN服务或S3托管来托管前端,通过ApiGateway和Lambda部署API,通过AWS CodeDeploy设置CICD管道和代码构建,还可以通过AWS CloudFront进行用户管理。您可以具有多个环境dev,test,beta等,并将其设置为将对主分支的任何推送自动部署在基础设施上,依此类推,其他分支映射到特定的环境。最重要的是,可以使用同一堆栈在本地进行测试和开发。
如果您想以特定的方式使用特定的服务或功能,则可以构建以上服务的任意组合。用于管理API的API网关,用于用户管理的Cognito,用于计算容量的Lambda等。 Rememebr,这些是托管服务,因此您可以将大量的工程时间转移到AWS上,而成为服务器服务器则意味着您需要为所用的东西付费。
以您共享的示例为例,您不希望节点进程负责提供静态资产-这浪费了计算能力,因为服务JS,CSS或图像没有附加智能,并且还因为在这种情况下,您需要在循环中引入一个新过程。而是让NGINX自己提供静态资产。请参阅AWS Cognito官方指南或此this答案。