如何在 AWS S3 上部署前端应用程序
您现在可以使用 S3 静态网络托管功能在 AWS 上部署前端应用程序。
这是“如何部署前端应用程序”系列的第二篇文章- 我将在其中解释如何将任何前端应用程序(react、vue、angular、svelte、静态站点)部署到各种静态站点网络托管。
在我之前的文章中,我解释了如何在 Surge 上部署你的前端应用程序。
因此在本教程中,我将向您展示如何在 AWS S3 上安装前端应用程序。
AWS S3 是一款简单的在线存储解决方案,被称为存储桶 (Bucket),提供稳定、高性能、安全且高度可扩展的服务。AWS S3 旨在帮助开发人员更轻松地进行 Web 规模的计算。
借助 AWS S3 静态网络托管功能,您只需从 S3 存储桶单击两次或多次即可轻松部署前端应用程序。
您无需担心成本,因为 AWS 的免费套餐对 S3 的限制非常高,而且价格非常便宜。S3 的另一个优点是速度很快,您可以从受支持的全球范围内选择您喜欢的数据中心。您还可以轻松添加自定义域。
设置AWS S3
让我们看看如何设置我们的 AWS 账户以进行部署。
步骤 1 - 帐户
第一步是设置您的 AWS 账户,以便我们部署您的前端应用程序。如果您还没有账户,请点击此处创建:https://portal.aws.amazon.com/billing/signup。如果您刚刚登录 AWS 管理控制台,请点击此处:https://signin.aws.amazon.com/signin。
第 2 步 - 设置 S3
成功创建账户或者成功登录AWS管理控制台后,接下来我们需要做的就是设置S3。
在 AWS 控制台上,单击“服务”。应该有一个下拉菜单,查找S3并单击它。
这会将您带到一个显示所有可用存储桶的页面。在 S3 中,存储桶是对象的集合。存储桶是一个虚拟容器,而对象是属于该容器的文件。
点击“创建存储桶”按钮,创建一个新的存储桶,用于部署前端应用程序。您将看到一个弹出窗口,提示您输入存储桶名称以及要部署到的区域。
存储桶名称通常在您的 AWS 账户中全局唯一。您还应该使用域名来命名存储桶名称。在本教程中,我将使用react-infinitescrollhook
(我将要部署的前端应用程序的名称)。
完成后,点击“下一步”进入“配置”选项卡。此选项卡中无需设置任何内容,只需点击“下一步”即可。
在“设置权限”中,您将能够设置存储桶及其对象的权限。您需要取消选中Block all public access
,因为我们将在此存储桶上进行部署,因此我们需要公众能够访问构建的文件。
完成后,单击“下一步”检查您的设置,然后单击“创建存储桶”继续。
太棒了!您已成功创建一个新存储桶。您应该会在存储桶列表中看到它。
接下来是启用静态 Web 托管并添加一些设置。现在点击刚刚创建的 bucket,你应该会看到类似下面的内容:
点击“属性”选项卡,然后选择Static website hosting
“框”。此时会弹出一个窗口。点击后Use this bucket to host a website
,系统会提示输入 index.html 文件。您还可以添加错误文件,我习惯使用 200.html 文件。完成后,点击“保存”即可启用该功能。
请务必记下“静态网站托管”框中显示的 URL ,因为这将是访问您应用程序的链接。如果您尝试导航到给定的 URL(例如,我的 URL),则会由于我们尚未设置 S3 策略而收到 403 错误。
在 S3 中,存储桶可以拥有不同的策略。这些策略定义了谁可以对指定存储桶中的哪些对象执行哪些操作。
在部署应用程序时,您可能需要设置存储桶,以便只有您可以写入它,但其他人可以查看它。
为此,请单击“权限”选项卡,然后单击“存储桶策略”。您应该在此页面看到一个文本编辑器,策略将保存在其中。
策略采用 JSON 文档格式。请将以下策略复制并粘贴到文本框中,并将占位符更改为您的存储桶名称:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::react-infinitescrollhook/*"
}
]
}
这就是我们的 S3 设置,您可以尝试打开链接,您会得到 404,这意味着我们只需要部署我们的应用程序。
步骤 3 - 设置 AWS CLI
如果您的系统上已经设置了 AWS CLI 或者您不想设置它,则可以跳过此步骤并转到下一步。
要安装并使用 AWS CLI,您需要安装 Python 和 Pip。您可以使用以下命令安装 AWS CLI:
$ pip3 install awscli --upgrade --user
您可以在此处阅读有关在您的平台上安装 AWS CLI 的更多信息:https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
完成后,下一步是使用以下命令进行配置:
$ aws configure
上述命令将提示您输入一些详细信息,例如 AWS 访问密钥 ID、AWS 秘密访问密钥、区域和格式。前两个是必需的,它们是您的账户凭证。如果您还没有凭证,可以在 AWS Identity and Access Management (IAM) 中生成。
AWS Access Key ID [None]: <aws_access_key_id>
AWS Secret Access Key [None]: <aws_secret_access_key>
Default region name [None]: us-west-1
Default output format [None]: json
您可以在此处阅读有关设置 AWS CLI 的更多信息:https://docs.aws.amazon.com/comprehend/latest/dg/setup-awscli.html
部署前端应用程序
下一步也是最后一步是部署前端应用程序。有两种方法可以执行此操作:第一种方法是使用S3 Uploader,第二种方法是使用AWS CLI。
但在此之前,如果您使用的是 React、Vue、Svelte 或 Angular 等前端库,则需要构建前端应用程序。您可以运行以下命令来执行此操作:
$ npm run build
或者
$ yarn build
使用 S3 上传器
完成后,您现在就可以上传build
或dist
文件夹。
现在转到 AWS S3 控制台,单击您正在处理的 Bucket,然后单击Upload
。
您应该会看到一个弹出窗口,您可以在其中上传您的build
、dist
或静态文件内容。这里有一个小技巧,您需要拖动文件夹的内容,而不是文件夹本身。S3 期望您将 index.html 文件放在存储桶的顶层。因此,请拖动文件夹中的所有内容,然后点击“上传”:
文件上传成功后,您应该能够看到存储桶中的文件。
太棒了!您的前端应用程序已上线,您现在可以使用存储桶的 URL 预览您的应用程序。
如果找不到,不要担心,您仍然可以通过双击来获取它,单击index.html
,Properties
然后在下方Object Url
您应该会看到您的存储桶 URL。
使用 AWS CLI
每次添加更改时都上传文件是多余的,而且很耗时。
但是,使用 AWS CLI 工具,您可以减少步骤并直接从命令行进行部署。您需要按照我上面的说明进行设置才能使用它。
要使用 AWS CLI 进行部署,您只需要以下命令:
$ aws s3 sync <folder_path> s3://<bucket_name>
现在转到命令行中的应用程序目录并运行上面的命令。
所以就我的情况来说,情况是这样的:
$ aws s3 sync /build s3://react-infinitescrollhook
您的应用程序现在应该已部署!
如果您正在使用前端库或构建系统,则可以使用 NPM 脚本命令使部署过程更快。
打开你的package.json
,转到该scripts
部分并添加deploy
命令:
"deploy": "aws s3 sync build s3://react-infinitescrollhook"
这样,您现在可以运行以下命令来部署您的应用程序:
$ npm run deploy
您可以做的另一件事是减少运行构建命令和部署应用程序的步骤:
"s3-deploy":"aws s3 sync build s3://react-infinitescrollhook",
"deploy":"npm run build && npm run s3-deploy",
然后使用上述命令,您只需一个命令行即可构建和部署您的应用程序。
文章来源:https://dev.to/oyetoket/how-to-deploy-your-frontend-application-on-aws-s3-31m9