发布于 2026-01-06 3 阅读
0

如何使用 Amazon S3 和 CloudFront 在 AWS 上托管 React 应用 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

如何使用 Amazon S3 和 CloudFront 在 AWS 上托管 React 应用

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

这里有一个教程,教你如何部署速度快、全球通用且托管成本低的 React 应用程序。

最终成果是一个包含 React 应用、自定义域名和 SSL 证书的网站——基本上,所有投入生产所需的一切都已具备。

而这一切都将通过 Serverless Framework 及其新的 Serverless Components 功能变得简单。

这篇文章图片很少,因为完整的教程视频可以在这里找到:

概述

您的 React 应用将通过全球内容分发网络进行分发。这使其在全球范围内都能拥有极快的性能。

我们将使用最便宜的基础设施来实现这一目标,即亚马逊网络服务的 S3 和 Cloudfront。

价格有多便宜?

一年内,您可以免费传输 50 GB 的数据,每月可处理 200 万次请求。

之后,费用将根据您的数据传输量而定,每 GB 收费 0.8 至 0.2 美元,外加每 10,000 次 HTTPS 请求 0.1 美元。更多详情,请访问 AWS CloudFront 定价页面。

您需要为自定义域名付费。不过,您可以从 AWS Certificate Manager 免费获得一个公共 SSL 证书。

首先声明一下——我之前并没有分析市面上所有的静态网站托管方案,所以并不了解是否存在更便宜的选择。但是,S3 和 CloudFront 已经存在很多年了,它们可靠且速度快。事实上,很多静态网站托管产品都是基于 S3 和 CloudFront 构建的,只是价格更高一些。

开发人员不经常使用普通的 AWS S3 和 AWS Cloudfront 的原因是,与其他产品相比,它们的使用体验实在太复杂了。

然而,Serverless Framework 正是在这种情况下发挥作用的。它为所有基础设施提供商带来了卓越的开发者体验,尤其是那些具备自动扩展、按需付费,也就是所谓的“无服务器”特性的基础设施。

设置

在进行任何操作之前,您需要拥有一个 AWS 账户。注册时必须使用信用卡,但只有在超出免费套餐限额后才会收取费用。

接下来,登录 AWS,导航到 IAM 控制面板,创建 Serverless Framework 将用于配置 React 网站所需基础设施的访问密钥。

转到“用户”,然后单击“添加用户”。给用户命名时包含 serverless-framework,然后单击“启用程序化访问”,再单击“下一步”。

选择“直接附加现有策略”。勾选“AdministratorAccess”旁边的复选框。点击“下一步”,再点击“下一步”跳过标签屏幕,然后点击“创建”。

注意:之后,您可能需要缩小这些权限范围,以便 Serverless Framework 只需访问必要的最少资源。不过,这可能比较复杂,因为 Serverless Framework 使用了许多 AWS 服务。为了帮助您,我们举例说明:网站组件目前使用 S3、证书管理器、CloudFront 和 Route 53,因此需要专门的访问权限。

复制“访问密钥 ID”和“秘密访问密钥”。稍后您将需要它们……

现在,到了最有趣的无服务器框架部分。

请确保您已安装Node.js。然后,通过NPM安装Serverless Framework并添加全局标志-g

$ npm i -g serverless
Enter fullscreen mode Exit fullscreen mode

请确保您已安装 Serverless Framework 1.49 或更高版本。提示:如果您现在正在安装,那么您就已经安装了。

我们将使用一个网站模板,它包含了快速入门所需的所有基础框架。这是一个完整的样板网站。使用以下命令安装网站模板。

$ serverless create --template-url https://github.com/serverless/components/tree/master/templates/website
Enter fullscreen mode Exit fullscreen mode

这将为website您创建一个文件夹。

进入该文件夹,然后通过运行以下命令使用 npm 安装 React 依赖项npm i

$ npm i
Enter fullscreen mode Exit fullscreen mode

此外website,在该文件夹中创建一个名为 `AWS Keys` 的文件.env,并将您的 AWS Keys 粘贴到该文件中,格式如下:

AWS_ACCESS_KEY_ID=A92JA098J10FAJ10JAAFASF
AWS_SECRET_ACCESS_KEY=fJajajaf0919jIJFJA7813hAAFJHL
Enter fullscreen mode Exit fullscreen mode

设置已完成,现在可以开始开发了!

发展

本项目使用 React 和 Parcel 来构建和打包应用程序。

您也可以使用以下命令通过 Parcel 在本地运行应用程序:

$ npm run start
Enter fullscreen mode Exit fullscreen mode

现在,你可以快速发展。

部署

网站模板开箱即用,可以直接部署。

查看您的serverless.yml文件,您会看到一个名为“网站”的无服务器组件。无服务器组件其实就是一段代码,它知道如何部署创建特定结果或用例所需的云基础设施。

Serverless Components 是开源的,您可以利用它们轻松地在无服务器云基础设施上部署各种用例。点击此处查看

每个 Serverless 组件都有一个inputs属性,允许您配置组件将要部署的用例。例如,您可以在这里看到src指向包含网站资源目录的输入,以及一个hook用于在部署前构建网站的调用。这样,您无需在部署前运行构建脚本,它会自动完成。

好了,接下来我们进入部署环节!

要部署您的 React 应用,只需在您的网站文件夹中运行该serverless命令即可。

$ serverless
Enter fullscreen mode Exit fullscreen mode

您的网站应该会在一分钟内部署完成,并且您应该会获得指向您正式网站的URL!

首次部署总是耗时最长,因为创建云基础设施资源比更新它们更耗时。

设置自定义域名、CloudFront 和 SSL 证书

要设置您的自定义域名、CloudFront CDN 和 SSL 证书,您需要手动完成一个步骤:登录您的 AWS 账户并购买域名。目前,网站组件仅支持在 AWS Route 53 上购买的域名。未来几周内,我们将启用对在其他注册商处注册的现有域名的支持。

前往 AWS Route 53 控制面板,注册您的域名,并等待注册完成。这可能需要长达一个小时。完成后,只需将自定义域名添加到网站组件的输入项中即可。

再次运行serverless,它将识别input并设置您的自定义域名、Cloudfront 和 SSL 证书。

您需要等待新域名在全球各地的 DNS 服务器上生效。这可能需要长达一个小时的时间。生效后,您就可以看到新域名及其所做的任何更改。

每次您运行serverless部署网站更改的命令时,网站组件都会使您在 AWS CloudFront 中缓存的资源失效。这样,您几乎可以立即看到更改。

国家管理

目前,Serverless Components 尚不支持远程状态管理。该功能将在一个月内推出。在此之前,请务必将目录推.serverless送到 GitHub,因为它包含有关已部署到您网站的云基础设施资源的状态信息。

添加无服务器 API 后端、数据库等

如果您想更进一步,像搭建这个网站一样轻松地构建一个全栈应用程序,请查看全栈应用程序模板。它将为您提供快速、经济高效且面向全球的完整无服务器应用程序所需的一切。

享受!

文章来源:https://dev.to/dschep/how-to-host-a-react-app-on-aws-using-amazon-s3-and-cloudfront-bgo