我正在构建一个React/Nextjs应用程序,并计划将其推送到AWS S3,并从AWS CloudFront (使用S3桶作为分发源)提供服务。我将使用Route53和DNS配置将我的域(例如,https://myapp.example.com)映射到CF发行版。但我能搞定。
在文档中,我看到可以通过以下方式构建和运行Nextjs应用程序:
npm run build
npm run start但是,在这里,我想获取npm run build生成的所有内容(可能是.next/目录的内容吗?)并将输出上传到我的S3桶中。
显然,我希望这样就足够了,这样当用户进入我的域时,当他们被指向CF发行版(以及随后支持该发行版的S3桶)时,他们会下载构建完整的+转换应用程序,然后在他们的浏览器中加载和运行。
我怎样才能做到这一点?需要在S3上存储什么?是否有任何特殊的配置需要提供,以使其在浏览器中运行,一旦他们从S3获取构建的/转移的应用程序?
发布于 2022-10-01 08:33:52
首先,在构建之后,您需要从下一步运行一个额外的命令到生成静态文件。
next export此命令将创建一个目录out。这个目录的内容应该上传到您的S3桶中。
然后,您需要通过AWS控制台(通过S3属性启用它)在您的AWS桶上启用“静态网站托管”。对于索引和错误文档,添加index.html (或您的主html文件)。
您还需要允许使用以下权限访问S3文件
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[your-bucket-name]/*"
}
]
}发布于 2022-10-01 04:59:15
您将需要一个反向代理服务,该服务将请求url与您的网站url匹配,然后返回响应。了解Nginx或类似的aws相关服务。
如果只运行build并启动npm命令,则需要有一个节点服务器。您可以导出和这将是一个完整的静态网站,可以运行没有节点。
https://stackoverflow.com/questions/73913516
复制相似问题