
在本地用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
Next Steps
- 进一步修改
hugo.toml配置文件, 更新about/me.md个人介绍页面。 - 用
hugo deploy指令上传到Amazon S3,备份原始代码至Github