使用 Firebase 托管 Hexo

由于 Coding 改变了 pages 服务的收费方案,对于免费用户而言,提供的 pages 服务会带有广告跳转。而 Coding 的私有库服务也由于我在近期申请到了 github 教育优惠,提供了两年免费的私有仓库,也随之没有再用的必要。因而将 Coding 的仓库全部迁出,pages 服务也转移到了 Firebase.

Firebase 在国内的访问速度一般,只比 github pages 快那么一点。但是优势在于提供 ssl,也可以规避 github pages 服务逐渐收紧的限制,比如每小时部署次数等。

Firebase 免费版本提供每月 10GB 流量,并发连接数为 100,如果把静态资源用 cdn 进行分流,对于一个小博客而言还是够用的。存储容量为 1 GB,同 github 相一致。提供的免费 ssl 证书毫无疑问,也是 Let’s Encrypt 的免费证书。下面简单说一下部署 hexo 到 Firebase 的过程。

部署

首先注册 Firebase,即用 google 账号登录,登录完成后在 Firebase 的控制面板添加项目,输入项目名称等信息。项目 ID 会根据你的项目名生成,提供了唯一的项目标识。接着参考下面的文档来熟悉 Hosting 部分,部署 Hexo 我们只会使用到这里的 Hosting 托管功能。

Firebase 的 Hosting 文档:https://firebase.google.com/docs/hosting/?hl=zh-cn

根据文档说明,全局安装好 Firebase CLI 工具后,在 hexo 根目录下进行初始化,在这里有个坑:

Firebase 进行初始化过程中,会要求配置项目相关信息。并进行身份验证,在验证的时候会跳转到浏览器进行 google 账号的授权,授权过程会和本地进行通讯,如果不配置代理的话会像这样子。

所以需要对终端配置代理。例如使用 ss 的话在终端配置 8123 端口的 http 代理。

1
export http_proxy=http://127.0.0.1:8123

之后就可以顺利通过验证,而配置项目的过程根据终端提示操作即可。

(2017.07.25 更新,在 win 下使用如果用 git shell 终端无法进行 firebase login 的验证,需要开启全局代理使用 powershell 执行就可以成功验证)

随后就可以对 hexo 进行部署,默认情况下部署的是 public 目录,hexo 在执行 hexo g 之后会自动生成。如果要更改部署的目录,需要修改 firebase.json 文件。

1
2
3
4
5
6
7
8
9
{
"hosting": {
"public": "public",
"ignore": [
"CNAME",
"README.MD"
]
}
}

更改 public 字段的值即更改部署目录,更改 ignore 值则配置相应的忽略文件,由于是部署到 Firebase 不需要通过 CNAME 文件来绑定自定义域名,所以在这里忽略了这个文件,忽略了在 github 中项目默认显示的 README.md 文件。

部署成功后会在终端产生输出日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
firebase deploy
=== Deploying to 'project-id'...
i deploying hosting
i hosting: preparing public directory for upload...
✔ hosting: 479 files uploaded successfully
i starting release process (may take several minutes)...
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/project-id/overview
Hosting URL: https://project-id.firebaseapp.com

在 Firebase console 中也可以看到我们的部署,如果有历史部署可以点击进行会退,非常方便。

绑定域名

绑定域名的步骤也在上述的 Hosting 文档中有详细说明,说一下坑:

  1. 在关联域名时需要添加一条 txt 记录来验证域名,要注意 Firebase 的控制面板中的主机名是全名,添加记录时要注意只需要添加主域名前的主机名。要等待 txt 记录解析生效后验证,在这里验证可能需要耐心等待记录生效。

  2. 验证域名时添加的 txt 记录完成验证后不能删除,删除后会导致验证失效。如果删除会受到这样的邮件,需要重新验证233。

    Please re-verify ownership of www.rainylog.com on project-id. The previous verification for this domain has been invalidated. You have 7 days to re-verify ownership of www.rainylog.com before it is removed from Firebase Hosting, which will stop all content from being served from the domain. Please visit the Firebase Hosting Panel to start the re-verification process.

  3. 添加 example.com 等裸域时会提示是否添加 www.example.com 的跳转,添加后两个域名都会进行证书生成的过程。在文档里域名重定向部分提到了另一种进行跳转的方式,暂时不清楚这两种方式的区别。

Hexo 的便捷部署

Hexo 并没有针对 Firebase 进行部署的插件,可以看到在 Firebase 的 AIP 中并没有提供对 hosting 部署操作的接口,也就不奇怪了。可能会觉得每次敲命令比较麻烦,所以 alias 大法好。

编辑 .zshrc 添加如下 alias 别名:

1
alias rainylogd="cd ~/Blog && hexo g && qshell qupload qiniu.json && hexo d && firebase deploy"

以后执行 rainylogd 命令就会执行:

  1. 切换到 Hexo 的目录。在这里是 ~/Blog,需要进行修改;
  2. 执行 hexo g 渲染站点;
  3. 进行七牛图床图片上传操作,可以查看 Hexo 文章图片管理 这篇文章;
  4. 执行 hexo d 部署站点到 github,如果只部署到 Firebase 可以忽略;
  5. 执行 Firebase 的部署。

-EOF-