menu search

Firebase Hosting: 用过最好的静态站点托管

Jul 19, 2017

与很多人一样,我一开始也是在GitHub Page上搭建我的第一个静态博客。即使到了今天,依然有很多教程推荐在那里存放博客。其中有一部分原因大概是因为第三方程序对它的良好支持,例如 Hexo。

但有些地方的确不太喜欢:

  • 不支持自定义域名SSL(但可以通过 CloudFlare 解决)
  • 不支持URL重定向
  • 不能自定义请求头部

基于Git的静态博客托管其实并没有那么方便。这点主要体现在手机上,使用Git简直是噩梦。而且我认为生成好的静态文件的版本控制并没有必要:重要的是站点的源文件。这么做其实带来的麻烦更多,例如多余的Commits,或者需要使用–force来强行覆盖…

GitLab Page (或者GitHub + Travis CI) 的解决方案是将站点源文件加入Git,每次修改会触动CI,并自动完成编译和部署的任务。看起来很好,但仔细想想,每次修改都需要重新通过Git提交,而且他们的服务器还时不时抽风。我曾遇到过卡了十分钟都没开始编译的情况。

而Firebase是每次直接把本地生成好了的文件提交到他们的服务器上,并不在乎本地的版本是不是比服务器上的新。服务器上其实是有版本管理的,但并不会检查是否有冲突

目前我认为最好的解决方案是将静态博客的源文件存放在Dropbox上。它的版本管理系统足够一个博客使用,只需点击保存即可,根本不需要接触Git。同时还有大量的第三方应用接入了它的API,例如 iA Writer。

回到主题,Firebase Hosting 只是 Firebase 提供的众多好功能的其中一个。自从认识了它,我再也没浪费时间去寻找好用的空间,因为它已经足够了。

优点/缺点

  • 自定义域名SSL (Let’s Encrypt)
  • URL重写,重定向,自定义Header…
  • 充裕的免费套餐: 1G 空间/10G 流量
  • 还算好用的后台
  • Fastly CDN
  • 可以绑定多个域名

Firebase Hosting 可以通过后台随便删除任何一个提交,也可以回滚。但不支持批量删除,所以得一个一个点🙄

有个我并不是很喜欢的地方:它的命令行工具需要安装Node.js,如果是像Hugo一样基于Go安装起来会更加方便。

使用

Firebase Hosting 后台

要使用 Firebase,首先你需要一个 Google 账号。科学上网工具自然也是必备。其次,你需要在设备上安装 Node.js 来安装它的CLI。

完成之后去Firebase Console创建一个新的项目。切换到Hosting一项,并按照提示执行相应的命令:

  • firebase login:登陆Google账号
  • firebase init:初始化项目文件夹
  • firebase deploy:部署项目

Firebase 的这些命令我个人看来还算简单,总比Git的添加,暂存,提交好记点。

CI 部署

Deployment History

在使用firebase login命令时会弹出一个浏览器窗口来登陆,但如果需要使用全自动脚本来部署呢?

答案是生成一个Token:

firebase login:ci

执行后会打开一个新的浏览器页面,授权过后在命令行中会出现刚刚申请的Token,请保存好。

接着就可以使用以下命令直接部署了:

firebase deploy --token=YOUR_TOKEN_HERE

自定义

上面提到过Firebase Hosting支持重定向等等功能。这类设定可以在项目的根目录的firebase.json中配置。

参考:Customize Hosting Behavior

例如把/foo重定向到/bar

"hosting": {
    // Add the "redirects" section within "hosting"
    "redirects": [ {
      "source" : "/foo",
      "destination" : "/bar",
      "type" : 301
  	}]
}

再或者把所有的请求都重写index.html

"hosting": {
  // Add the "rewrites" section within "hosting"
  "rewrites": [ {
    "source": "**",
    "destination": "/index.html"
  } ]
}

文档没有写出Hosting其实也支持通配符的例子。例如,我想把/post/:post_id重定向到/p/:post_id,那可以这样子写:

"hosting": {
	"redirects": [{
		"source": "/post/:post_id",
		"destination": "/p/:post_id",
		"type": 301
	}]
}

同时,官方文档中还提到可以自定义Header,但这部分我还没研究过。

最后

我认为Firebase Hosting比Git主要好在它简单的命令行操作,和它直观的后台。

Firebase Hosting 目前在内地的访问似乎没有什么问题,而且据说速度还挺快(HK节点),除了有的时候Fastly CDN抽风。但不能保证以后不遭黑手,或者遭到滥用。

不过后面这点可能是我多虑了,毕竟GitHub Page开了那么多年,不还活的好好的。

Cover photo by Mari Helin-Tuominen on Unsplash

Comments

edit x send markdown image
paragraph comment heart