发布前准备
创建S3存储桶并配置
自定义域名的DNS配置
添加https与使用CDN
发布前准备
编辑pelicanconf.py:
SITEURL = 'hendiary.top' #你的域名
RELATIVE_URLS = True
THEME = 'bricks' #切换主题,可选,主题需要先安装,我的主题是bricks
主题可在pelican-themes获取
创建S3存储桶并配置
如果你还没有AWS账号,请先注册一个,然后了解下Amazon S3价格
创建存储桶
存储桶名字就是域名,比如我的是: hendiary.top
创建的时候,取消勾选“阻止所有公开访问”
配置属性
点击创建好的存储桶,点击属性,滑到最下面的静态网站托管,启用,索引文档填写index.html
配置好后,在静态网站托管那块能看到访问网址,把它记下来。根据区域不同,网址可能有下面两种格式(参考S3 developer guide):
-
s3-website dash (-) Region ‐ http://bucket-name.s3-website-Region.amazonaws.com
-
s3-website dot (.) Region ‐ http://bucket-name.s3-website.Region.amazonaws.com
配置权限:Bucket Policy
去权限选项卡,编辑Bucket Policy,添加:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::hendiary.top/*"
}
]
}
配置权限:ACL
还是权限选项卡,编辑ACL,配置为:
最后把博客下的outputs文件夹下的内容全部上传到存储桶,然后打开之前记下的网址就能看到首页了。
也可以用AWS CLI实现自动同步,就不用手动上传了。
自定义域名的DNS配置
配置DNS
域名需要去注册购买,也有免费的,注册购买过程不详述。我是在NameSilo购买的。
然后需要去DNS服务商添加DNS记录,对于S3静态网站来说,只提供了一个域名,没有ip地址,所以只能添加CNAME记录。
一开始我想用亚麻的Route 53,但提示一级域名(Zone Apex)不可以添加CNAME记录,各种查阅最后发现无解,只能添加二级域名比如www.hendiary.top这样。
后来我用了CloudFlare,就算不在它这买域名也能用它做DNS,还有免费套餐,很香。
一级域名添加CNAME记录它会有一条提示,会使用CNAME Flatterning,可以忽略。
2021-8-24更新:查到AWS官方文档说对于S3托管域名为Zone Apex的网站, Route 53可以添加特殊的别名记录。
注册、选择套餐、添加要加速和保护的域名过程就不详述了,网上很多。这里记一下DNS记录的添加:
Type | Name | Value |
---|---|---|
CNAME | @ | bucket-name.s3-website-Region.amazonaws.com |
CNAME | www | domain name |
其中@代表根域,我的就是hendiary.top; 第二条的www指向hendiary.top
更改nameservers
DNS修改后,会提示需要到域名注册商那儿修改nameservers,即把默认的nameservers换成CloudFlare的。
我是在namesilo注册的域名,就到namesilo后台修改,删掉所有默认的,把CloudFlare提供的2个粘过去就可以了。
至此就全部完成了。需要注意的是DNS修改后,需要等一段时间才能生效。我的www这条记录就是第二天才生效的。
添加https与使用CDN
如果想要通过https访问网站,即在AWS中为S3托管站点添加SSL/TSL证书,就需要用到ACM (AWS Certificate Manager)和CF (AWS CloudFront Manager)。
在AWS Certificate Manager(ACM)申请证书
为自己的域名申请证书:Request a public certificate
比如我的:
hendiary.top, *.hendiary.top
注意:必须在“美国东部(弗吉尼亚北部)”区域申请,否则在CloudFront中无法使用。
选择验证方法:有DNS验证和邮件验证。邮件验证应该是需要DNS有MX记录,所以我选DNS验证;把AWS随机生成的Name和Value加入DNS服务商的DNS记录修改处,具体可以参考AWS页面上的指引。
在AWS CloudFront Manager(CF)建立分发(Distributions)
详细的请参考AWS CloudFront
Origin Domain Name填入托管成静态网站的S3存储桶的网站地址(endpoint url),即类似http://bucket-name.s3-website-Region.amazonaws.com
如果选择了S3存储桶的地址,网站打开会直接是一个xml文件,还有一个报错。
在Distribution Settings节中:
-
Alternate Domain Names(CNAMEs)里面填写要进行关联的域名,比如hendiary.top 以及 www.hendiary.top
-
SSL Certificate选择Custom SSL Certificate,然后在下拉框中选择之前在ACM申请的证书。
其他设置项默认即可,或根据需要设置。
CDN的设置:我用了默认的Use all edge locations (best performance),确实打开速度快了不少。
点击Create Distribution。需要一段时间才能完成配置,等待Status变成Deployed。
这时可以看到Domain Name列下面有一个"xxxxx.cloudfront.net",即Distribution domain name,这个地址下一步会用到。
修改DNS记录
去自己的DNS服务商的管理页面,进行DNS设定。
修改CNAME,将自己的域名比如hendiary.top的值设置成刚才记下来的"xxxxx.cloudfront.net"(之前应该是"bucket-name.s3-website-Region.amazonaws.com")
需要一点时间让所有设置生效。
之后就可以通过https访问网站了。