我知道Nextjs是一个需要服务器功能的Node框架,因此,将其用于服务器端渲染不能仅在S3上托管。 但是,这是否意味着唯一的选择是将整个应用程序托管在EC2上-这要贵得多-还是存在另一种中途解决方案?
答案 0 :(得分:21)
我们为此用例创建了一个开源 Terraform 模块,作为无服务器框架的低成本替代方案。我们不是仅依赖 Lambda@Edge 进行所有 SSR 操作,而是将 Lambda@Edge 仅用于路由(作为某种反向代理),然后通过 API 网关在内部将请求重定向到区域性 Lambda。
由于我们使用 CloudFront 作为反向代理,我们还可以将大部分静态文件请求拆分为 _next/static/*
用于 css、js 等,并通过 S3 直接为它们提供服务,而根本不涉及 Lambda@Edge 代理.
因此每个路由的每个请求的成本是不同的:
静态资源请求:css、js、图片
仅适用于 CloudFront 和 S3(对于 CloudFront 未命中)
HTML 请求:预渲染的 HTML 路由或需要服务器端渲染 (SSR) 的路由
适用于 Cloudfront、Lambda@Edge(代理,以 1 毫秒步长计量)的成本。
重写提供预渲染 HTML 的路由
S3 的费用适用。
使用服务器端渲染 (SSR) 的路由
HTTP API-Gateway 和 regional Lambda 的成本(SSR,以 1 毫秒为单位计量)适用。
使用此模型的几千个请求的总成本通常远低于 0.50 美元/月,同时拥有一个由 CloudFront 边缘缓存提供支持的快速服务站点。
在 GitHub 存储库中查找更多信息:https://github.com/dealmore/terraform-aws-next-js
答案 1 :(得分:19)
用于部署Next.js SSR App,而不是遵循传统的管理和运行始终保持24x7运行的AWS EC2实例的方法。实际上,还有一种使用AWS lambda和Serverless框架的更具成本效益的现代方法。
问。什么是AWS lambda?
AWS Lambda允许您运行代码而无需置备或管理服务器。您只需为您消耗的计算时间付费。
问。什么是Serverless framework?
Serverless Framework Open Source使您可以使用无服务器架构开发应用程序,并使用AWS Lambda,Azure Functions,Google CloudFunctions等进行部署。
问。什么是Serverless-Next.js?
这是一个无服务器组件,仅用于部署Next.js应用程序。此外,您在静态或公用文件夹中的任何资产都会自动上传到S3并从CloudFront提供服务,因此我认为这正是您所需要的。下面的架构说明了它如何向用户提供应用程序。
如果您是无服务器框架的新手,我建议您参加名为Serverless for Frontend Developers的无服务器社区的免费课程
如果您想快速尝试部署next.js应用程序,请观看本教程Next.js & Lambda @ Edge with Serverless Components,这是上述课程的一部分。
答案 2 :(得分:3)
NextJS + Serverless当前已部署在非免费的Lambda Edge上。您不享受Lambda的免费套餐(不是Lambda @ Edge)。
如果您的网站访问量少,我建议您使用在后端使用Lambda(AWS网络)的Vercel.com进行部署。
他们的业余版本是免费的,并且为AWS Lambda Free层提供了可比的大量免费流量和调用。
NextJS应用程序的部署就像通过GitHub集成上传到Github + Vercel的自动部署一样容易。您无需担心S3或托管或静态文件,一切都将在您推送到Github时托管在Vercel上。您只需要专注于开发即可。
当您的需求上升时(通过Hobby软件包,然后通过Pro软件包),则在Serverless @ Edge上部署将变得更具成本效益。
那时,您所需要做的就是切换域。
答案 3 :(得分:2)
不确定是否需要托管在Amazon上,但是您可以以每月5美元的价格在DigitalOcean上托管,也可以在Heroku的免费版上托管,直到您确定要迁移到Amazon之后才可以转向价格更高的解决方案并托管EC2:
我相信这对您来说是一个好的开始,然后再支付更昂贵的解决方案
这个问题的答案,是的,如果您希望在Amazon内使用更完善的解决方案,那么EC2对于Amazon和Elastic beantalk来说是最便宜的
答案 4 :(得分:0)
您可以使用AWS Lightsail:https://aws.amazon.com/lightsail/
根据我对nextjs
的经验,云功能并不是部署大型应用程序的好地方,因此,这是您的选择:
答案 5 :(得分:0)
要部署我们的nextJs网站,我们一直在使用AWS lambda:https://github.com/serverless-nextjs/serverless-next.js 使用它非常简单。 不幸的是,有时页面的加载非常慢。从2秒到7秒。 谷歌搜索控制台也证实了这一点。
我们找不到真正深入探讨此问题以及如何解决此问题的方法,但我怀疑这是一个冷门。经过一些研究,AWS在理论上可以并发解决它:
但是我无法使其正常工作,因为它是Lambda @ Edge,而且价格也非常昂贵!
在http://nachonacho.com,我们专注于SEO,因此加载页面的时间是我们最大的担忧。
我们最终决定使用简单的AWS EC2。
在这里您可以进行比较: