如何在 AWS 上部署带有 express 后端的 nuxt 前端?
How to deploy nuxt frontend with express backend on AWS?
- 我有一个 Nuxt v2 SSR 应用程序作为前端 运行ning 在端口 3000
- 我有一个 express API 作为后端 运行ning 在端口 8000
- 我有一个 python 脚本,它从外部 API 加载数据并且需要 运行 连续
- 目前所有这些都是单独的项目,有自己的 package.json 而不是
- 如何将其部署到 AWS?
- 到目前为止我唯一想到的是我可能必须将 express API 部署为 Elastic Beanstalk 应用程序。
- 我是否应该为每个文件创建一个单独的 docker-compose 文件,因为它们目前是单独的项目,或者我应该将它们合并到一个项目中,使用一个 docker-compose 文件
- 我看到了关于 React 的类似问题,非常感谢 Nuxt 中的一些指导
None 这些类似的问题是基于 Nuxt
How to deploy a React + NodeJS Express application to AWS?
How to deploy backend and frontend projects if they are separate?
您可以通过多种方式在 AWS 中部署堆栈。我可以给你一些选择,但如果你想节省一些成本,最好的办法是使用 Lambda 函数作为你的后端,S3 作为你的 front-end 和批处理 Lambda 作业作为你的 python 脚本.
- 对于您的后端 - https://github.com/vendia/serverless-express
- 对于您的 nuxt 前端 - https://nuxtjs.org/deployments/amazon-web-services
- 为了你的 python 工作 - https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html
执行所有这些并不太简单,但通过以下链接,您可能会了解如何实施您的解决方案。
根据您的工作量和预算,有几种方法。让我们介绍一下选项是什么以及哪些选项适用于手头的工作。
具有 Server-side 渲染的无服务器方法 (SSR)
通过创建在 Lambda 中调用 NuxtRenderer 的 API 网关路由。结果生成的 HTML/JS/CSS 将被推送到 S3 存储桶。 S3 存储桶充当 Cloudfront 来源。使用 CDN 缓存最少更新的项目,并在需要时使用 API 调用来更新缓存。这是最便宜的部署方式,但如果您没有流量,一些客户可能会在缓存更新命中时遇到短暂的延迟。 Calculator
通过静态生成的无服务器方法
这是开始的最简单方法。所有没有动态模板生成的路由都可以简单地存在于 S3 存储桶中。最简单的方法是 运行 nuxt generate
然后将 dist
的结果内容上传到桶中。这里没有节点后端,这不是问题的要求,但值得一提。
很好 documented NuxtJS.org 和免费套餐。
带有 Elastic Beanstalk 的无服务器
IMO 这种方法是不必要的,而且对于 AWS 在 2022 年提供的产品来说有点过时了。它当然仍然有效,但收益成本并不吸引人。
为此,您需要使用 eb
命令行工具并设置 NPM_CONFIG_UNSAFE_PERM=true
。 AFAIK 没有什么特别的事情需要发生才能让 eb 知道从那里做什么。 Calculator
Server-ish 方法
另一种选择是使用 Lightsail 和 NodeJS 服务器。 Lightsail 为全职 NodeJS 服务器提供低(但不低于无服务器)成本。在这种情况下,您可能希望将项目克隆到服务器,然后 setup systemd 脚本以保持 nodejs 运行ning.
另一种实现此目的并具有一定可扩展性的方法是使用 ECS 和 Docker。在这种情况下,您将创建一个 Docker 文件来构建容器,执行 npm start
,并将端口 Nuxt 运行s 暴露给主机。这个example shows how to run it using Fargate, which is essentially a serverless version of EC2 machine. Calculator
- 我有一个 Nuxt v2 SSR 应用程序作为前端 运行ning 在端口 3000
- 我有一个 express API 作为后端 运行ning 在端口 8000
- 我有一个 python 脚本,它从外部 API 加载数据并且需要 运行 连续
- 目前所有这些都是单独的项目,有自己的 package.json 而不是
- 如何将其部署到 AWS?
- 到目前为止我唯一想到的是我可能必须将 express API 部署为 Elastic Beanstalk 应用程序。
- 我是否应该为每个文件创建一个单独的 docker-compose 文件,因为它们目前是单独的项目,或者我应该将它们合并到一个项目中,使用一个 docker-compose 文件
- 我看到了关于 React 的类似问题,非常感谢 Nuxt 中的一些指导
None 这些类似的问题是基于 Nuxt
How to deploy a React + NodeJS Express application to AWS?
How to deploy backend and frontend projects if they are separate?
您可以通过多种方式在 AWS 中部署堆栈。我可以给你一些选择,但如果你想节省一些成本,最好的办法是使用 Lambda 函数作为你的后端,S3 作为你的 front-end 和批处理 Lambda 作业作为你的 python 脚本.
- 对于您的后端 - https://github.com/vendia/serverless-express
- 对于您的 nuxt 前端 - https://nuxtjs.org/deployments/amazon-web-services
- 为了你的 python 工作 - https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html
执行所有这些并不太简单,但通过以下链接,您可能会了解如何实施您的解决方案。
根据您的工作量和预算,有几种方法。让我们介绍一下选项是什么以及哪些选项适用于手头的工作。
具有 Server-side 渲染的无服务器方法 (SSR)
通过创建在 Lambda 中调用 NuxtRenderer 的 API 网关路由。结果生成的 HTML/JS/CSS 将被推送到 S3 存储桶。 S3 存储桶充当 Cloudfront 来源。使用 CDN 缓存最少更新的项目,并在需要时使用 API 调用来更新缓存。这是最便宜的部署方式,但如果您没有流量,一些客户可能会在缓存更新命中时遇到短暂的延迟。 Calculator
通过静态生成的无服务器方法
这是开始的最简单方法。所有没有动态模板生成的路由都可以简单地存在于 S3 存储桶中。最简单的方法是 运行 nuxt generate
然后将 dist
的结果内容上传到桶中。这里没有节点后端,这不是问题的要求,但值得一提。
很好 documented NuxtJS.org 和免费套餐。
带有 Elastic Beanstalk 的无服务器
IMO 这种方法是不必要的,而且对于 AWS 在 2022 年提供的产品来说有点过时了。它当然仍然有效,但收益成本并不吸引人。
为此,您需要使用 eb
命令行工具并设置 NPM_CONFIG_UNSAFE_PERM=true
。 AFAIK 没有什么特别的事情需要发生才能让 eb 知道从那里做什么。 Calculator
Server-ish 方法
另一种选择是使用 Lightsail 和 NodeJS 服务器。 Lightsail 为全职 NodeJS 服务器提供低(但不低于无服务器)成本。在这种情况下,您可能希望将项目克隆到服务器,然后 setup systemd 脚本以保持 nodejs 运行ning.
另一种实现此目的并具有一定可扩展性的方法是使用 ECS 和 Docker。在这种情况下,您将创建一个 Docker 文件来构建容器,执行 npm start
,并将端口 Nuxt 运行s 暴露给主机。这个example shows how to run it using Fargate, which is essentially a serverless version of EC2 machine. Calculator