发布于 

腾讯云 Serverless 托管 Hexo 静态博客

  使用腾讯云 serverless 托管静态博客,让静态博客托管更简单。

1 写在前面

  1. 域名需要备案
    和 coding 可以不备案使用香港的资源部署不同,使用该服务域名必须进行备案。不过,腾讯云提供的三种备案云服务资源 包含了 Serverless 服务, 可以购买 云函数 (SCF) 备案资源包 100rmb (新用户有卷 55rmb),直接进行备案,和购买服务器进行备案的方式差不多。但是,如果只是用 serverless 来部署博客,这个资源包就基本用不上。

  2. 无需服务器
    无需服务器可以降低学习成本和经济成本。但是需要使用额外的 severless 插件。

  3. 额外的部署命令
    使用该服务不能如同 coding 那样直接放在 _config.yml.deploy 中,需要额外的命令 sls deploy -debug 进行部署。

  4. 可自由选择部署应用所在地
    这是对比 coding 只能默认选择上海,该服务可自由选择所在地,我选择离所在地近的。

  5. 可自由选择使用腾讯云的 CDN 服务
    新用户可以白嫖六个月 120G 的 CDN。不过小站访问量不高,开了与源站一致每月也就是几百兆。

题外话:可以看到我基本都在与 coding 进行对比。我开始建站的时候看了很多白嫖 coding 部署博客的文章,但是 coding 被腾讯云收购了,白嫖是不可能白嫖了。在部署到 coding 上后,我发现静态文件都在腾讯云的 cos 存储桶里,在 severless 应用服务中创建了 app ,所以实际上部署到 coding 就是在使用腾讯云的 serverless 应用服务,而且自由度还不高。

2 Serverless 应用中心

关于 Serverless 的概念可以参考:Serverless 多函数开发示例Serverless
简单讲就是指构建和运行不需要服务器管理的应用程序的概念。

腾讯云的介绍:腾讯云中的 Serverless 应用中心 是腾讯云与 Serverless.com 战略合作,基于无服务器应用框架 Serverless Framework, 为用户提供的 Serverless 应用开发管理平台。开发者无需关心底层资源,即可快速部署完整可用的 Serverless 应用架构,具有资源编排、自动伸缩、事件驱动等能力,覆盖编码-调试-测试-部署等全生命周期,帮助开发者通过联动云资源,迅速构建 Serverless 应用。

该服务提供了部署 Hexo 博客的接口 :部署 Hexo 博客 ,如果有经验的话可以直接根据这份文档进行部署,我一开始就是这么做的。

3 部署博客

按文档的要求:

  • 已安装 Node.js(2020年9月1日起,Serverless 组件不再支持 Node.js10.0 以下版本,请注意升级)
  • 已安装 Git
    这个一般不用管,毕竟博客搭建好之后这些都是已经安装好的。

部署流程:

  1. 安装 Serverless Framework。
  2. 创建 serverless.yml 文件。
  3. 使用 sls deploy 进行部署。
  4. 自定义域名。

3.1 安装 Serverless Framework

通过 npm 安装 Serverless Framework:

3.2 创建 serverless.yml 文件

在站点根目录创建 serverless.yml 文件:

serverless.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
component: 'website' # (必填) 引用 component 的名称,当前用到的是 tencent-website 组件
name: hermitlsr-blog # (必填) 该 website 组件创建的实例名称
app: hermitlsr-blog-app # (可选) 该 website 应用名称
stage: dev # (可选) 用于区分环境信息,默认值是 dev
inputs:
src:
src: ./public # Upload static files generated by HEXO
index: index.html
# dist: ./dist
# hook: npm run build
# websitePath: ./
region: ap-chengdu # 部署的位置
bucketName: hermitlsr-blog-bucket
protocol: https

这是我的配置,可根据需要自行配置。

3.3 使用 sls deploy 进行部署

直接使用 sls deploy 是看不到部署细节的,需使用 sls deploy -debug。另外,每次部署时需同过登录链接登录腾讯云验证,或者配置全局用户授权。
由于我还需要部署到 github 上,我的部署命令一般如下:

部署完成后,进入腾讯云的控制台可以发现在 Serverless 应用中创建了名为 hermitlsr-blog-app 的应用,点击访问应用即可访问到你部署的博客。

博客的所有静态资源都在 腾讯云的 cos 存储桶中,它创建了一个名为 hermitlsr-blog-bucket-appID 的存储桶:

到目前为止博客已经部署到通过 serverless 应用 部署到腾讯云上了,但是还没有 CNAM 到自己的域名。

3.4 自定义域名

自定义域名都是通过在域名解析上使用 CNAME 重定向实现。
首先需要在站点的 source 文件夹中新建 CNAME 文件,该文件没有后缀名,在其中填入的你的自定义域名。
其次在域名解析中设置 CNAME
我自定义域名是分两条线路国外访问走 github page ,国内访问走腾讯云。无论是哪一种都需要设置两种主机记录值 @www,这两种对应的访问域名分别为 hermitlsr.topwww.hermitlsr.top
而对于两种记录值的设置,除了记录值不同外其他 CNAM 等选项都是一样的。

以我的 github page 为例,其设置为:

主机记录 记录类型 线路类型 记录值 MX优先级 TTL(秒)
@ CNAME 境外 hermitlsr.github.io. - 600
www CNAME 境外 hermitlsr.github.io. - 600

而对于腾讯云,使用 CDN 和不使用 CDN 记录值是不一样的。

不使用 CDN :

进入存储桶,打开域名与传输管理部分,其中在自定义源站域名中添加自己的自定义域名,注意源站类型选择 静态网址源站,其中 CNAME 为解析里要设置的记录值。

设置如下:

主机记录 记录类型 线路类型 记录值 MX优先级 TTL(秒)
@ CNAME 境内 https://hermitlsr-blog-bucket-appID.cos-website.ap-chengdu.myqcloud.com - 600
www CNAME 境内 https://hermitlsr-blog-bucket-appID.cos-website.ap-chengdu.myqcloud.com - 600

使用 CDN 要麻烦一些,首先要设置 CDN (这不废话么):

还是刚才的页面,在上面的自定义中添加自己的自定义域名,其中 CNAME 为解析里要设置的记录值。

设置如下:

主机记录 记录类型 线路类型 记录值 MX优先级 TTL(秒)
@ CNAME 境内 表中的 CNAME 值 - 600
www CNAME 境内 表中的 CNAME 值 - 600

这里看起来好像和源站区别不大,为什么说还要麻烦些呢,因为还涉及证书的管理和 CDN 的具体设置。

进入到控制台的内容分发部分,在证书管理中确认配置的证书和你前面存储桶中绑定的证书是一致的,否则会导致证书不通过而无法访问,我一开始被这个坑惨了。
再进入到域名管理,在基础配置中可以看到具体信息,可以随时修改。在访问控制中可以进行防盗链配置,在缓存配置中可以进行节点缓存过期配置,建站初期经常修改可以选择遵循源站,后期可以选择高级缓存过期设置,先设置全部文件,缓存时间为15天,在设置按文件后缀 js;css;ejs;styl 为 0 秒。

4 最后

如果没有其他需求,仅需要部署静态博客,使用 serverless 应用是一个省时省力省钱的操作。