从AWS S3构建和服务React/Nextjs



我正在构建一个React/Nextjs应用程序,并计划将其推送到AWS S3,并从AWS CloudFront提供服务(使用S3存储桶作为分发源(。我将使用Route53和DNS配置将我的域(比如https://myapp.example.com(映射到CF分发。但我可以应付。

在文档中,我看到我可以在";生产模式";通过:

npm run build
npm run start

然而,在这里,我想获取npm run build生成的所有内容(可能.next/目录的内容?(,并将输出上传到我的S3存储桶。

很明显,我希望这将是足够的,这样当用户进入我的域,他们被指向CF发行版(以及随后支持该发行版的S3存储桶(时,他们下载完全构建的+transpland的应用程序,它加载&在浏览器中运行。

我怎样才能做到这一点?S3上需要存储什么?是否需要提供任何特殊配置,以便在从S3获取构建/传输的应用程序后立即在浏览器中运行?

首先,您需要运行一个额外的命令,以便在构建之后从next生成静态文件。

next export

此命令将创建一个目录out。这个目录的内容应该上传到S3存储桶中。

然后,您需要启用";静态网站托管";通过AWS控制台在您的S3 bucket上(通过bucket属性启用它(。对于索引和错误文档,请添加index.html(或任何主html文件(。

您还需要允许使用以下权限访问S3文件

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[your-bucket-name]/*"
}
]
}

您将需要一个反向代理服务,将请求url与您的网站url匹配,然后返回响应。阅读Nginx或类似aws相关服务。

如果只运行build并启动npm命令,则需要一个节点服务器。你可以导出,这将是一个完整的静态网站,可以在没有节点的情况下运行。

最新更新