(教程) 静态网站部署1: 使用S3+CloudFront

1,699次阅读
没有评论

(教程) 静态网站部署1: 使用S3+CloudFront

本文写于2021-5-11

这篇文章讲什么?

怎么使用 AWS S3 + CloudFront 部署静态网站
(AWS 中国区)

这篇文章对谁有用?

想部署静态网站的程序员

我为什么写这篇文章?

因为我在这个事情上面浪费了不少时间,希望其他人能通过看我的文章节省时间。

这里的静态网站指的是

React.js / Vue.js 等前端项目 yarn build / npm build 之后
得到的 production build,用来部署的 .html .css .js 文件

问题:为什么选 S3 + CloudFront?

静态网站部署选项

  1. 用自己的服务器(AWS EC2/其他云服务器) + nginx/apache 来做
  2. 托管到第三方:
    • 国内服务商:
    • 国外服务商:
      • Gitlab
      • Bitbucket & aerobatic
      • Github Pages
      • Netlify
      • Surge
      • Vercel
      • Gatsby Cloud
      • Google Cloud Storage
      • Render
      • Firebase
      • Cloudflare
      • Heroku
      • Digital Ocean
      • Azure
      • deployhq
    • 不好分类:
      • AWS S3 + CloudFront(AWS 在国内国外都有区域)

由于我们的用户都是国内用户,所以国外服务商类似 Netlify 和 Github Pages 就不予考虑了,除非有办法加速,目前暂时没有找到好的方案。

如果不考虑网络因素,其实我会选 Netlify 因为用户体验很好,用起来很方便,但由于国内访问速度太慢,所以就不用它。

为什么不用阿里云 OSS / 腾讯云 COS / 七牛 / 21云盒子/等国内服务商?

因为之前我司已经有网站是用 S3+CloudFront 部署的。
而且我司目前大部分东西都是用 AWS (中国区)搞定的。
既然如此就继续沿用这个方案,因为之前已经有成功案例了。
不过之前的是其他同事弄的。这次是我来弄。

为什么不用 AWS Amplify?

中国区不支持(截止至2021-5-13)

S3 负责什么?CloudFront 负责什么?

S3 负责存放文件,就是 .html.css.js 这些文件。
CloudFront 负责做 CDN,加速访问。

能不能不用 CloudFront,只用 S3?

HTTPS 必须通过 CloudFront 来实现。所以必须用 CloudFront。
S3 本身只提供 HTTP 访问。

(教程) 静态网站部署1: 使用S3+CloudFront

那用 S3 搭配其他的 CDN?比如 Cloudflare?

这我没试过,不知道,读者可以自己去试试。

步骤概览

在讲具体一步步怎么做之前,先写一个概览:

  1. 把文件传到 AWS S3(.html .css .js 等)
  2. 给 S3 设置权限,变成”可公开访问”
  3. 给 S3 设置”静态网站托管” (S3 就此告一段落,不用再回头来设置了)
  4. 去 CloudFront 设置,指向这个 S3 bucket。同时设定自定义域名(我们的域名是用阿里云管理的,没用 AWS 的 Route 53)域名是 news.(主域名部分隐去).com
  5. 设置 HTTPS 时,证书自己上传一下。

结束了,一共就这几步。

最终成果:

(教程) 静态网站部署1: 使用S3+CloudFront

其实这个事情很简单,就是部署个静态站而已。
如果用 Netlify,哪怕是第一次用 Netlify,摸索一下,10分钟也就搞定了。
但 S3+CloudFront 麻烦多了。第一次弄会摸不着头脑。

具体步骤

第一步:新建一个 bucket

到时候所有的静态文件都会放到这个 bucket 里头。

(教程) 静态网站部署1: 使用S3+CloudFront

这里随便建了一个 bucket 名字叫做 test-static
我在网上资料说, bucket 名字要和域名一致,但我实测结果是可以不一致,不一致也能用。

里面放一个 index.html。反正是测试嘛,内容随便写写就好了。

<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<title>简单网站2021</title>
<meta name=”description” content=””>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<link rel=”stylesheet” href=””>
</head>
<body>
<h1>世界你好</h1>
<h1>本页面用于做一些简单测试</h1>
</body>
</html>

第二步:修改 S3 Bucket 的权限

(教程) 静态网站部署1: 使用S3+CloudFront

弄成可公开访问就行了。

第三步:S3 bucket 的 “存储桶策略”要写一下

(教程) 静态网站部署1: 使用S3+CloudFront{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “PublicReadGetObject”,
“Effect”: “Allow”,
“Principal”: “*”,
“Action”: “s3:GetObject”,
“Resource”: “arn:aws-cn:s3:::test-static/*”
}
]
}

第四步:启用”静态网站托管”

(教程) 静态网站部署1: 使用S3+CloudFront(教程) 静态网站部署1: 使用S3+CloudFront(教程) 静态网站部署1: 使用S3+CloudFront(教程) 静态网站部署1: 使用S3+CloudFront

静态网站托管启用后,会有一个域名。
比如: http://test-static.s3-website.cn-north-1.amazonaws.com.cn/

复制下来,待会我们还用得上这个域名,要填写在其他地方。

第五步:去设置 CloudFront

进入 CloudFront 首页长这样:

(教程) 静态网站部署1: 使用S3+CloudFront

这里用黑色方块隐藏掉了一些内容,和本文章无关,是公司的现有设置。

点击左上角蓝色按钮”创建分配”

(教程) 静态网站部署1: 使用S3+CloudFront

然后点击”入门”

(教程) 静态网站部署1: 使用S3+CloudFront

注意:”源域名”这里,不要用下拉菜单里弹出来的提示,不要在里面选。
填我们刚刚在 S3 开启静态网站托管之后得到的 HTTP 域名:
http://test-static.s3-website.cn-north-1.amazonaws.com.cn/

为什么 AWS 要做这么迷惑的行为,下拉菜单里的不能直接用,这个我也不懂。
反正我只知道下拉菜单里选的不能用,不要管它,这是 AWS 的锅,我们接着做下一步。

选择”将 HTTP 重定向到 HTTPS”

(教程) 静态网站部署1: 使用S3+CloudFront

下一步:填这里

备用域名(CNAMEs) 填你想要的自定义域名,
比如我的是 news.[隐去主域名].com 是一个二级域名。
这里也可以填一级域名。

(教程) 静态网站部署1: 使用S3+CloudFront

重点来了,HTTPS 这里

点击”传证书至 IAM”按钮,会打开如下窗口:

(教程) 静态网站部署1: 使用S3+CloudFront

问题:为什么不用 ACM?

(ACM 指的是 AWS Certificate Manager)

因为用这玩意我怎么设置都不对,搞了很久。
和 CloudFront 搭配的证书用 ACM 怎么搞都不成功。
所以我们不用 ACM。
网上我查信息还看到说,必须去 us-east-1 在 ACM 里导入/新建证书,这样 CloudFront 里才能看到(真是奇葩)
我这里可是 AWS 中国区,哪儿来的 us-ease-1 给我用。我登录国际区的 ACM,整个页面空白,加载失败,所以也不知道是怎么回事。
反正用不了,不用它。

我们去阿里云搞一个免费证书

(教程) 静态网站部署1: 使用S3+CloudFront

可以看到红框的 news.xxx.com 就是我们申请好的证书。

(教程) 静态网站部署1: 使用S3+CloudFront

那一行的右侧有一个”下载”,点击之后会弹出一个窗口,这里选择”其他”那一行。
点击下载。
会得到一个压缩包
5621740_news.xxx.com_other.zip

解压之后有2个文件。

  • 5621740_news.xxx.com.key
  • 5621740_news.xxx.com.pem

一个 .key 一个.pem

.key 里的内容是

—–BEGIN RSA PRIVATE KEY—–
一大堆
—–END RSA PRIVATE KEY—–

.pem 里的内容是

—–BEGIN CERTIFICATE—–
第一段
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
第二段
—–END CERTIFICATE—–

复制粘贴,填到框里:

(教程) 静态网站部署1: 使用S3+CloudFront

注意开头结尾的部分也要复制,比如:

—–BEGIN CERTIFICATE—–

的部分

最后

填写完成后,等待 CloudFront 完成即可。

(教程) 静态网站部署1: 使用S3+CloudFront

“分配状态”从 inProgress 变成 Deployed 就是完成了。

这时候访问 news.xxx.com 应该是可以看到成果的。

正文结束

至此,已经有一个可以访问的 HTTPS 网站了。

下一篇文章:(教程) 静态网站部署2:如何更新

(教程) 静态网站部署1: 使用S3+CloudFront

本文写于2021-5-11

这篇文章讲什么?

怎么使用 AWS S3 + CloudFront 部署静态网站
(AWS 中国区)

这篇文章对谁有用?

想部署静态网站的程序员

我为什么写这篇文章?

因为我在这个事情上面浪费了不少时间,希望其他人能通过看我的文章节省时间。

这里的静态网站指的是

React.js / Vue.js 等前端项目 yarn build / npm build 之后
得到的 production build,用来部署的 .html .css .js 文件

问题:为什么选 S3 + CloudFront?

静态网站部署选项

  1. 用自己的服务器(AWS EC2/其他云服务器) + nginx/apache 来做
  2. 托管到第三方:
    • 国内服务商:
    • 国外服务商:
      • Gitlab
      • Bitbucket & aerobatic
      • Github Pages
      • Netlify
      • Surge
      • Vercel
      • Gatsby Cloud
      • Google Cloud Storage
      • Render
      • Firebase
      • Cloudflare
      • Heroku
      • Digital Ocean
      • Azure
      • deployhq
    • 不好分类:
      • AWS S3 + CloudFront(AWS 在国内国外都有区域)

由于我们的用户都是国内用户,所以国外服务商类似 Netlify 和 Github Pages 就不予考虑了,除非有办法加速,目前暂时没有找到好的方案。

如果不考虑网络因素,其实我会选 Netlify 因为用户体验很好,用起来很方便,但由于国内访问速度太慢,所以就不用它。

为什么不用阿里云 OSS / 腾讯云 COS / 七牛 / 21云盒子/等国内服务商?

因为之前我司已经有网站是用 S3+CloudFront 部署的。
而且我司目前大部分东西都是用 AWS (中国区)搞定的。
既然如此就继续沿用这个方案,因为之前已经有成功案例了。
不过之前的是其他同事弄的。这次是我来弄。

为什么不用 AWS Amplify?

中国区不支持(截止至2021-5-13)

S3 负责什么?CloudFront 负责什么?

S3 负责存放文件,就是 .html.css.js 这些文件。
CloudFront 负责做 CDN,加速访问。

能不能不用 CloudFront,只用 S3?

HTTPS 必须通过 CloudFront 来实现。所以必须用 CloudFront。
S3 本身只提供 HTTP 访问。

(教程) 静态网站部署1: 使用S3+CloudFront

那用 S3 搭配其他的 CDN?比如 Cloudflare?

这我没试过,不知道,读者可以自己去试试。

步骤概览

在讲具体一步步怎么做之前,先写一个概览:

  1. 把文件传到 AWS S3(.html .css .js 等)
  2. 给 S3 设置权限,变成”可公开访问”
  3. 给 S3 设置”静态网站托管” (S3 就此告一段落,不用再回头来设置了)
  4. 去 CloudFront 设置,指向这个 S3 bucket。同时设定自定义域名(我们的域名是用阿里云管理的,没用 AWS 的 Route 53)域名是 news.(主域名部分隐去).com
  5. 设置 HTTPS 时,证书自己上传一下。

结束了,一共就这几步。

最终成果:

(教程) 静态网站部署1: 使用S3+CloudFront

其实这个事情很简单,就是部署个静态站而已。
如果用 Netlify,哪怕是第一次用 Netlify,摸索一下,10分钟也就搞定了。
但 S3+CloudFront 麻烦多了。第一次弄会摸不着头脑。

具体步骤

第一步:新建一个 bucket

到时候所有的静态文件都会放到这个 bucket 里头。

(教程) 静态网站部署1: 使用S3+CloudFront

这里随便建了一个 bucket 名字叫做 test-static
我在网上资料说, bucket 名字要和域名一致,但我实测结果是可以不一致,不一致也能用。

里面放一个 index.html。反正是测试嘛,内容随便写写就好了。

<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<title>简单网站2021</title>
<meta name=”description” content=””>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<link rel=”stylesheet” href=””>
</head>
<body>
<h1>世界你好</h1>
<h1>本页面用于做一些简单测试</h1>
</body>
</html>

第二步:修改 S3 Bucket 的权限

(教程) 静态网站部署1: 使用S3+CloudFront

弄成可公开访问就行了。

第三步:S3 bucket 的 “存储桶策略”要写一下

(教程) 静态网站部署1: 使用S3+CloudFront{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “PublicReadGetObject”,
“Effect”: “Allow”,
“Principal”: “*”,
“Action”: “s3:GetObject”,
“Resource”: “arn:aws-cn:s3:::test-static/*”
}
]
}

第四步:启用”静态网站托管”

(教程) 静态网站部署1: 使用S3+CloudFront(教程) 静态网站部署1: 使用S3+CloudFront(教程) 静态网站部署1: 使用S3+CloudFront(教程) 静态网站部署1: 使用S3+CloudFront

静态网站托管启用后,会有一个域名。
比如: http://test-static.s3-website.cn-north-1.amazonaws.com.cn/

复制下来,待会我们还用得上这个域名,要填写在其他地方。

第五步:去设置 CloudFront

进入 CloudFront 首页长这样:

(教程) 静态网站部署1: 使用S3+CloudFront

这里用黑色方块隐藏掉了一些内容,和本文章无关,是公司的现有设置。

点击左上角蓝色按钮”创建分配”

(教程) 静态网站部署1: 使用S3+CloudFront

然后点击”入门”

(教程) 静态网站部署1: 使用S3+CloudFront

注意:”源域名”这里,不要用下拉菜单里弹出来的提示,不要在里面选。
填我们刚刚在 S3 开启静态网站托管之后得到的 HTTP 域名:
http://test-static.s3-website.cn-north-1.amazonaws.com.cn/

为什么 AWS 要做这么迷惑的行为,下拉菜单里的不能直接用,这个我也不懂。
反正我只知道下拉菜单里选的不能用,不要管它,这是 AWS 的锅,我们接着做下一步。

选择”将 HTTP 重定向到 HTTPS”

(教程) 静态网站部署1: 使用S3+CloudFront

下一步:填这里

备用域名(CNAMEs) 填你想要的自定义域名,
比如我的是 news.[隐去主域名].com 是一个二级域名。
这里也可以填一级域名。

(教程) 静态网站部署1: 使用S3+CloudFront

重点来了,HTTPS 这里

点击”传证书至 IAM”按钮,会打开如下窗口:

(教程) 静态网站部署1: 使用S3+CloudFront

问题:为什么不用 ACM?

(ACM 指的是 AWS Certificate Manager)

因为用这玩意我怎么设置都不对,搞了很久。
和 CloudFront 搭配的证书用 ACM 怎么搞都不成功。
所以我们不用 ACM。
网上我查信息还看到说,必须去 us-east-1 在 ACM 里导入/新建证书,这样 CloudFront 里才能看到(真是奇葩)
我这里可是 AWS 中国区,哪儿来的 us-ease-1 给我用。我登录国际区的 ACM,整个页面空白,加载失败,所以也不知道是怎么回事。
反正用不了,不用它。

我们去阿里云搞一个免费证书

(教程) 静态网站部署1: 使用S3+CloudFront

可以看到红框的 news.xxx.com 就是我们申请好的证书。

(教程) 静态网站部署1: 使用S3+CloudFront

那一行的右侧有一个”下载”,点击之后会弹出一个窗口,这里选择”其他”那一行。
点击下载。
会得到一个压缩包
5621740_news.xxx.com_other.zip

解压之后有2个文件。

  • 5621740_news.xxx.com.key
  • 5621740_news.xxx.com.pem

一个 .key 一个.pem

.key 里的内容是

—–BEGIN RSA PRIVATE KEY—–
一大堆
—–END RSA PRIVATE KEY—–

.pem 里的内容是

—–BEGIN CERTIFICATE—–
第一段
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
第二段
—–END CERTIFICATE—–

复制粘贴,填到框里:

(教程) 静态网站部署1: 使用S3+CloudFront

注意开头结尾的部分也要复制,比如:

—–BEGIN CERTIFICATE—–

的部分

最后

填写完成后,等待 CloudFront 完成即可。

(教程) 静态网站部署1: 使用S3+CloudFront

“分配状态”从 inProgress 变成 Deployed 就是完成了。

这时候访问 news.xxx.com 应该是可以看到成果的。

正文结束

至此,已经有一个可以访问的 HTTPS 网站了。

下一篇文章:(教程) 静态网站部署2:如何更新

 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2023 年 3 月
 12345
6789101112
13141516171819
20212223242526
2728293031  
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25 鹭羽 2025-12-13 22:37...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...
商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1 十三 2025-12-15 14:13:14 ...
跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026 一水 2025-1...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地

预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地

预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地 henry 2025-12-11 10:27:...
Meta公开抄阿里Qwen作业,还闭源了…

Meta公开抄阿里Qwen作业,还闭源了…

Meta公开抄阿里Qwen作业,还闭源了… Jay 2025-12-11 11:48:25 来源:量子位 Ja...
MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这

MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这

MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这 西风 2025-12-11 15:...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...