
在本地用 Hugo 生成静态页面的下一步,就是部署,这样大家才能在网上看到我们的静态网站。
Why Amazon
部署的方式/平台有很多,比如 Github Pages,Vercel,AWS 等等。我最后选择了 Amazon 的 AWS,因为我的本职工作日常使用的环境是 AWS,比较熟悉。我有大量照片需要保存和展示,需要建立自己的图床,不如就把所有的需求都集中在一个地方解决。而且 AWS 的服务价格非常便宜,普通人日常使用的频率流量都不会达到收费的标准,第一年还可以免费使用 。
What(复制来的)
- AWS S3
AWS S3 是一个弹性、高扩展的对象存储服务。它可以存储任何类型的数据,包括图片、音频、视频、文档等等。用户可以在 AWS 控制台中轻松地创建和管理存储桶,上传和下载数据,进行权限管理和数据备份等操作。S3 的可用性和耐久性非常高,可以保证数据的安全和可靠性。
- AWS CloudFront
AWS CloudFront 是一个全球内容分发网络,可以帮助用户加速静态和动态内容的分发。用户可以将静态和动态内容存储在 S3 中,并通过 CloudFront 分发到全球各地的用户。CloudFront 可以自动缓存内容,提高访问速度,同时保证内容的安全性和可靠性。用户可以在 AWS 控制台中轻松创建和管理分发,设置缓存策略、安全性控制和报告等。
How To
简易版本:仅在 S3 上部署网站
- 进到 s3,建立一个 Bucket。Bucket name 填写域名,不过如果愿意使用默认链接的话,随意取一个名字就行。其余设置选择默认选项,先完成创建。
- 创建成功后,进入 Bucket 设置。
- 点击 preperties,找到网页最下方启用静态网站托管 (Static website hosting),设定索引文件 (index.html) 以及错误文件 (404.html)。这两个文件的名称需要和你的 Hugo 文件夹下的 public 文件夹下的两个对应文件名字一致。
- 点击 permission,将封锁公有存取权 (Block public access (bucket settings)) 的这项设定,预设为打勾的选项取消勾选。顾名思义,只有设置公开,大家才能看得到。
- 依旧是 permission 页面,设置 Bucket policy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" -- 将 your-bucket-name 替换你自己的 Bucket 名字,你可以在填写 policy 这个 cell 的左上角找到 resource 信息 } ] } - 设置完毕后,点击 object,上传你的 Hugo 文件夹下的 public 文件夹下的所有文件。
- 点击 preperties,找到网页最下方 Bucket website endpoint,点击链接就能看到你的个人博客啦。
- ref:AWS — S3 架设静态网站
进阶版本:在 CloudFront 上部署网站
- 在 CloudFront,新建部署 create distribution
- Origin domain 选择 S3 上创建的 bucket,页面识别到静态网站 hosting,会自动弹出建议使用 use website endpoint,点它
- 其余选择默认选项
- 点击属性,找到 Distribution domain name,点击链接就能看到你的个人博客啦。
- ref: 如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务 ,將 Hugo 靜態網站部署到 Amazon S3 + Cloudfront + Route 53
完整版本:注册及配置域名
- 还不想付钱,暂时没弄 😼
Q&A
- 我在 S3 更新的博客,但是在 CloudFront 看到的还是旧的页面,怎么办?
- CloudFront 的原理就是读取缓存,所以默认 24 小时才会更新。我们需要人工删除 cache。
- 点击 distribution ➡️ invalidation ➡️ create invalidation,输入需要更新的文件路径。如果所有文件都需要替换,输入
/*。 - ref: AWS cloudfront not updating on update of files in S3