博客程序已迁移至Ghost

前言

这篇文章写得有点滞后,因为我两周前就已经迁移好了,相信经常有关注本站的访客应该会察觉到些小变化,这两周一直在做一些微调和 BUG 修复,到目前是差不多。

很早以前我就心仪过 Ghost,当时我是看中了它的编辑器支持 Markdown 和实时预览,撰写文章的感觉非常好。而且它是基于 Node.js 实现的,比 PHP 要高效得多。

至于我为何到现在才使用 Ghost,一是因为当时 Ghost 的功能还不够多,很多我想要的功能都要自己打造,而我在编程方面只是个渣渣,没有自己造轮子的能力;二是我之前一直在蹭 里香 的服务器,太麻烦人了。

直到现在,Ghost 仍是那么简洁,很多功能还是没有实现,连起码的文章分类都没有。只是我总算自己租了个 VPS,有充足的自主权的去折腾……

VPS 选择与配置

为什么我会想到租个 VPS 呢,个中历程实在有点九转十八弯。年前某日在群里提起了备案的话题,小雨 说他还有几个阿里云的备案服务号,虽然我使用的是国外服务器,还是要了一个。填写和提交了备案资料后,阿里云的客服很快就打电话来通知我初审的结果——网站内容不符合备案的要求,需要修改之后再申请。这下好了,我并不那么愿意去修改内容,只好 Say Goodbye 了。

本来此事就这么揭过了,但我过了几天又闲着无聊逛了一下阿里云的网站,突然发现阿里 .me 域名续费只要 89 元!比 GoDaddy 还便宜!心动不如行动,我马上就决定将域名转入到阿里云万网。另外还发现可以申请免费的赛门铁克 HTTPS 证书,自从 Let's Encrypt 出来之后,很多公司都推出了免费证书。Let's Encrypt 证书的有效期只有 90 天,需要定期重新生成,赛门铁克的直接就一年,比较省事。

麻烦了里香一段时间后,终于启用了 HTTPS,因为七牛云的 HTTPS 流量没有免费额度,研究了一下,决定转向腾讯云。相比起七牛云,腾讯云的流量不分 HTPP 和 HTTPS,而且可以直接使用全国多节点的 CDN 加速,而七牛云必须绑定备案域名才能多节点 CDN。

总之就是在各种比较云服务的时候,又看了各种产品的资料,最终让我决定自己搞一台 VPS。因为域名没有备案,只能选择海外的服务器。之前里香的是 Linode 的日本线路,访问速度还可以,但延迟还是有 200 ms 左右。所以这次选了香港的 CN2 线路,香港沙田的速度据说不错,广东访问的延迟在 20 ms 以内。虚拟机技术最好是 KVM 架构的,Openvz 的容易超售,一律无视,Xen 已经开始衰落了,很多大公司都从 Xen 转向了 KVM,比如现在阿里云、腾讯云、Linode 都是使用 KVM的。带宽最好是独亨的,现在用 VPS 开 Shadowsocks 的人太多,共享带宽抢不过网速啊……

按照上的要求,没做过多比较,我随便选择了 UFOVPS 这个名不经传的品牌,纯粹是在知乎看到介绍就上了,理由是价格适合,3 Mbps 带宽也足够我的小站使用了,就先买一个月试试。

系统我选择了 64 位的 Ubuntu Server 16.04,反正我不要求什么稳定性,就直接追新了。部署环境选择了 PHP7 + MariaDB 10.1 + nginx 1.10 + Node.js v6.10,再加上 Python 2.7 之类的杂七乱八,都是最新的稳定版。第一次玩服务器,装软件是折腾了半天……

部署 Ghost

Ghost 现在支持的 Node.js 版本是 4 和 6,虽然官方推荐 4,但我还是安装了 6,反正都支持,没啥区别。Ghost 默认使用 SQLite3 数据库,适合小的站点,但后期会顶不住(我这破网站怎么也不会到这个地步…),但我还有其他要使用数据库的服务,所以就换成 MySQL 了,并选择了 MariaDB 这个分支。

具体步骤不再细说,我是参考这篇文章1安装的,使用 PM2 来保持运行。值得一提的是,对 Ghost 的修改和升级都需要重启服务才生效,从这一点来说,比 WordPress 的自动升级是差了不少。这也是 Node.js 和 PHP 的差别吧。

另外,Ghost 的汉化版已经坑了,要新版只能用英文版,好在后台并不复杂,就那几个英文也没什么看不看得懂的。Ghost 好像有计划做国际化,就不知道什么时候能实现了。

制作主题

没什么心情去重新设计一个主题,所以把之前的主题修改一下便移植过来了。Ghost 的主题使用了 Handlebars 模块引擎,简单是挺简单,但你只能在主题里实现 Ghost 本来有提供的功能,如果需要一些 Ghost 没有的功能,是不可以在主题上任意做轮子的,就算做出来了,也是属于前台的。

比如 WordPress,主题和后台的语言都是 PHP,所以我们要实现一些小功能,完全可以直接在主题中编写,出来的效果和修改博客程序本身是差不多的。而 Ghost 是不可以这样的,你要改只能去修改 Ghost 的代码,或者做在前台上,交给浏览器去渲染。这就导致我原主题上的好些功能无法轻松移植到 Ghost。

文章摘要和 More 标签

Ghost 的文章摘要只能按字符数或单词数截断,而且会把 HTML 标签都删掉,只输出纯文本。用过 WordPress 的都知道,它能加一个标签自定义摘要的范围,甚至可以自己另外写一段摘要。第二个功能就不提了,咱先把第一个功能做出来。

一开始我是直接找 excerpt.js 动刀的,结果发现网页头部的描述也是调用这个摘要的 Helper 来生成。改动了就会使网页描述里出现一堆 HTML 标签。所以我最后是找文章内容的 content.js 来开刀。

修改后的代码我直接放在 GitHub2 上了,可以对比一下改了哪里,另外请无视最下面那一段的修改。

改完之后,网上搜了一下,发现有个朋友也英雄所见略同3,就是实现的代码有些区别。他是按字符或单词数摘要的时候,多检测一下 <!--more--> 标签。而我是多加了个 more 参数,可以在不使用 wordcharacters 参数的时候,单独按 <!--more--> 标签摘要。但如此一来,文章里必须插入 <!--more--> 标签才能摘要,否则就直接输出整篇文章。当然,也会有需要在首页输出整篇文章的时候,也可以按需同时使用多个参数进行摘要。

使用方法是在主题里写 {{content more=""}}

文章访问计数器

这部分直接使用了《 为 Ghost 博客添加页面访问计数器 》里的方法和代码,感谢 printempw,抄了他家里不少东西,现在我还在敲碗等他的文章目录脚本……

增强 Markdown

Ghost 只支持基础的 Markdown 语法,就连表格都不支持,但这个功能是可以稍作修改就能使用的。具体可以参考这篇文章《让Ghost的markdown支持表格(table)语法显示》 。

但是,Ghost 使用的 Markdown 语法解析组件,是 showdown 的早期分支。支持的语法也相当有限,这个表格功能不支持定义对齐方式的语法,可以说是简陋之极。

曾经想将 Ghost 的 showdown 换成新版的,结果两大版本之间的代码差距太大,我这渣渣是无从下手的。目前 Ghost 正在开发 1.0 版,不知道会不会在这方面有所改进,于是去看了一下 Github,发现有人在提交兼容最新版 showdown 的 PR4

评论系统

Ghost 没有自带的评论系统,必须使用第三方的。使用第三方的社会化评论也有好处,可以用 QQ、微博、微信等账户登录留言,体验比需要注册或匿名的本地评论系统好多了。国外的 DISQUS 已经被墙了,自不在考虑的范围内。一直在用多说,但多说已经基本不更新,只维持最基本的服务,连接质量相当不稳定,所以我想过换其他的评论系统。

网易云跟贴

因为社会化评论的营利前景渺茫,很多产品已经倒闭了。网易大公司的产品,应该是不怕倒闭,但目前来说功能相当有限,没有 API,能自定义的地方也少。

搜狐畅言

也是大公司的产品,功能和 API 都很全,但功能多得有点多余,比如签到、任务和积分系统,还经常弹窗,非常惹人厌。而且接入该评论系统需要备案,完全不需要考虑了。

友言

和多说的情况差不多,基本已经停止更新维护了。除了评论框之外没多少其他的功能,API 接口也弱。

多说

如此比较转了一圈,最终还是选择继续使用多说。因为多说从功能上来说,是国内同类产品中最好的,就是坑在运营上。多说的定制自由度是最高的,其他评论系统基本都对 javascript 做了混淆加密,可读性非常差,而多说只做了基本的压缩,可以轻易找到我们需要修改的地方。

我不喜欢多说的文章评论数样式,之前想用 API 获取评论数,自己写样式。结果发现 api.duoshuo.com 这个域名不能跨域,无法获取它的 json,让我感觉多说的确是快要倒了。后来无意中用谷歌浏览器的开发者工具看了一下,发现它自己获取 json 的地址居然是 short_name.doushuo.com/api,官方的文档真是没人维护,这都不更新一下……不过最终我都没用 API,因为我发现修改多说的 embed.js 就能实现我想要的效果,所以说多说的定制自由度真是挺高的。

其他

我还在主题里使用了下列的库。

服务器优化

开启了 HTTPS 之后,明显感觉打开网站的速度变慢,经查询,使用 HTTP/2 可以加快访问速度。 我是按照这篇文章5配置的。

以前我一直用七牛云的对象存储,不过因为没有备案域名,用不了融合 CDN,自然就没有全国多个节点加速,但用来存放 css、js 和图片之类的静态资源,也比直接放在国外 VPS 里好多了。前面提到,七牛云的免费额度不包括 HTTPS 流量,所以我搬到腾讯云了,腾讯云即使不自定义域名也可以启用 CDN 分发。不过后来为了让域名好看点,还在借了 小雨 的三个二级域名来用……

我的 VPS 只有一个 RAID10 保障数据安全,什么备份和灾备都没有,所以我用了个定时脚本来上传数据库被网站备份到对象存储里,可以参考一下张戈博客的分享:

后记

之前我在本地搭建过 Windows 版的 Seafile 服务器,这个私有云非常有用,我把一些重要文档和 KeePass 的数据库拿上去同步,以确保数据万无一失。现在我也在 VPS 里搭了一个 Seafile 服务器,用来同步一些重要的小文件,而且它支持服务器端加密存储,可以确保我的 KeePass 之类的数据库不外泄。

这就是我第一次正经地用 Linux 服务器,目前 VPS 还有点闲余,我在想还能用它做些什么。

Shadowsocks 之类的就算了,虽然服务器的上传速度能有 384 KB/S,足够用来翻墙,但我不想跟网站抢网速。而且我上次买了三年的影速套餐,只要它不跑路的话,目前没有这方面的需求。

  1. 从0开始捣鼓ghost blog
  2. https://github.com/SaierMe/Ghost/commit/0f15f881431f01cd1254366f6ca0a99a460abcab
  3. 为 Ghost 博客添加 more 标签支持
  4. https://github.com/TryGhost/Ghost/pull/7922
  5. 或许是 Nginx 上配置 HTTP2 最实在的教程了
本站的资源均无广告和垃圾捆绑,若你觉得我的文章对你有帮助,欢迎点击上方的按钮给我打赏。
本博客文章采用 知识共享(Creative Commons) 署名-非商业性使用-禁止演绎 4.0 进行许可。