使用 Cloudflare 和 AWS S3 实现 99.9% 正常运行时间的静态网站部署
欢迎阅读我们的简易指南,本指南旨在帮助您实现静态网站 99.9% 的正常运行时间和近乎免费的部署方案,而无需维护和配置自己的服务器。本文将使用 Cloudflare 作为 CDN 服务,并使用 AWS S3 作为文件存储。
Cloudflare在全球拥有150多个数据中心,其基础套餐(免费)对于大多数网站来说绰绰有余。虽然功能较为基础,但您仍然可以获得99.9%的正常运行时间、免费SSL证书、DDoS防护、Brotli压缩、自动JS/CSS压缩、隐藏目标服务器IP以及完善的缓存设置。
我们决定撰写这篇文章,是因为互联网上大多数其他指南都充斥着毫无意义的冗余设置,这些设置似乎都是从其他网站复制粘贴过来的,反而让读者感到不知所措。
起始要求
- AWS账户
- 已将您现有的 NS 迁移到的 Cloudflare 帐户
迁移到 Cloudflare 的过程非常简单,因为他们的用户界面/用户体验很好。他们会扫描您的 DNS 记录,并建议您添加现有的记录。
优点和缺点
✅ 免费提供高性能 CDN;
✅ 正常运行时间 99.9%;
✅ 免费 SSL 证书;
✅ 配置和使用简单;
❌ 如果您发现当前站点名称已被用作存储桶名称,则无法将 S3 与 Cloudflare 一起使用(解释如下);
❌ 免费套餐仅支持 https 网站的第一级子域名。
1. 创建 S3 存储桶
您需要通过 AWS 控制台导航到 S3,然后单击“创建存储桶”。
在下一个屏幕上,选择存储桶名称并定义区域。存储桶名称必须与您的网站名称相同。这是 AWS 的一项要求,否则您将无法通过 Cloudflare 访问您的网站。区域无关紧要,因为网站无论如何都会被 Cloudflare 缓存。
在该屏幕之后,单击“下一步”直至创建存储桶。您无需更改这些设置中的任何内容。注意:如果在此步骤中收到“存储桶名称已存在”的消息,请参阅文章末尾的“故障排除”部分了解详细信息。
2. 创建 IAM 用户。
首先,我们需要按照此链接安装 AWS 命令行工具。安装完成后,转到 AWS 的 IAM 选项卡,然后选择“用户”,再添加用户。请务必勾选“程序化访问权限”,因为即使该用户发布网站内容,我们也不需要为其授予额外的权限。
默认情况下,创建的用户没有额外权限。只需点击“下一步”,直到出现包含用户凭据的“成功”页面。
请下载您的 .csv 文件并安全保存。AWS CLI 需要这些信息。
3. 为您的用户设置正确的权限
创建用户后,点击该用户,然后在权限选项卡中点击“添加内联策略”。
您应该会看到策略生成器页面,其中会显示以下设置:
操作 — 写入部分包含 PutObject 和 DeleteObject;权限部分包含 PutObjectAcl
资源– 您的 ARN 存储桶名称,格式如下:arn:aws:s3:::medium-widget.pixelpoint.io/*
在 JSON 视图中,它应该看起来像这样
查看策略并输入名称。权限配置已完成,现在我们可以设置 aws-cli 来推送您的网站。
4. 使用 AWS CLI 进行部署
打开终端并运行 `aws configure` 命令。系统会提示您填写在 IAM 用户创建过程中下载的 .csv 文件中的凭证。请输入您的访问密钥 ID 和秘密访问密钥。其他字段为选填项,您可以直接按“回车”键。
之后,您就可以使用 AWS CLI 部署您的网站了。进入您的网站文件夹;其中应该包含 index.html 和其他文件。然后执行:
aws s3 cp {folder name} s3://{bucket name} --recursive --acl public-read
真实案例:
aws s3 cp dist/ s3://test.pixelpoint.io --recursive --exclude '.DS_Store' --acl public-read
该命令将文件夹复制到 S3 上的远程存储桶。
--recursive复制所有嵌套文件夹;
使用 — exclude,您可以定义不需要复制的文件列表,例如一些临时文件、IDE 文件或操作系统相关文件;--aclpublic-read 是使您的网站可访问所必需的。
我们使用复制而不是同步文件夹,因为同步功能无法按预期工作,即使修改后某些文件也不会复制到存储桶中。
5. 发布网站
要最终发布您的网站,请转到您的 S3 存储桶列表,点击相应的存储桶,然后选择“属性”选项卡。启用静态网站托管,并将 index.html 输入为您的索引文件。复制网站的 URL,然后点击“保存”。
最后一步是前往 Cloudflare DNS 设置并添加一条新的 CNAME 记录。如上所述,您的存储桶名称应与 CNAME 记录名称一致。在 Cloudflare 的域名字段中,您应该输入指向您在 S3 上的网站的链接,但不要包含“http”和“/”,例如:test.pixelpoint.io.s3-website-us-east-1.amazonaws.com。在名称字段中,您应该输入您的网站名称,无需包含域名。例如,对于“test.pixelpoint.io”,我们只需输入“test”作为名称。
好了。现在你应该可以通过你选择的域名访问你的网站了。
故障排除
- 请确保在 Cloudflare 的 SSL 设置中启用“灵活”设置,否则您可能会遇到 SSL 证书问题。
- 要将 www 域名重定向到非 www 域名,请务必将其设置为一级子域名(受 Cloudflare 限制)。您可以通过 Cloudflare 的“页面规则”部分进行设置,也可以在 S3 中创建一个带有重定向规则的新存储桶。
- 如果在创建存储桶的过程中收到“存储桶名称已存在”的错误,则此解决方案对您无效,因为在这种情况下您将无法使用 Cloudflare。












