Gitbook 用于写大型文档尤其是有层次关系的书籍类电子书还是挺合适的,但其默认的 CSS 对中文并不太友好首先匹配英文字体族,fallback 至sans-serif 字体族,这在中英文和简繁并用时会有一些小小的问题。好在 Gitbook 提供了自定义 website/ebook 等 CSS 的方法 ==> How can I include custom CSS? · GitBook

这里我们主要关注网页版的阅读体验,所以在 styles 目录下新建 website.css 即可,默认的主题 GitbookIO/theme-default 关于 font-family 的设置为

1
2
3
font-family: @font-family-base;
@font-family-sans: "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-family-base: @font-family-sans;

为了能在 website.css 中覆盖默认样式,我们需要使用更高的权重,这里我使用了 .book.book-summary .book-body 三个类提升权重。具体可参考:

以简体中文的样式为例,使用了简体字型在前,繁体在后的方式适配。

1
2
3
.book .book-summary, .book .book-body {
font-family: "Microsoft YaHei UI", "Microsoft Yahei", "PingFang SC", "Lantinghei SC", "Hiragino Sans GB", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei", "Noto Sans CJK SC", "Microsoft JhengHei UI", "Microsoft JhengHei", "PingFang TC", "Lantinghei TC", "Noto Sans CJK TC", "Helvetica Neue", Helvetica, Arial, sans-serif;
}

Comment and share

博客托管在 GitHub 的话,默认的 *.github.io 是启用 HTTPS 的,但如果是自定义域名的话就没这么方便了。如今虽然有 Letsencrypt 这种工具,但 GitHub Pages 这种高度依赖 CDN 服务的产品要想给自定义域名支持 HTTPS 估计还得一些时日。

第三方能支持 HTTPS 的有 CloudFlare 和 Kloudsec, 如果不是 CloudFlare 的合作厂商,得将 NS 记录转接,想了想 DNSPod 还是不错的,遂转向了 Kloudsec. Kloudsec 足够方便,只需要改下 DNS 记录基本就好了,谁知没用多久七月九日就收到一封『Kloudsec is shutting down』的邮件,不得不感慨这年头免费好用的午餐确实不长久。

由于自己有 VPS,一直在想办法将 blog 托管在自己网站上,结合 Letsencrypt 支持 HTTPS 还是不难的。最开始的思路是用 travis 推送静态文件到 VPS,现在想想这种思路还是有点复杂的。其实结合 hexo 的 deploy 插件,除了 git 之外还可以通过 rsync, heroku 等方式发布。

dokku

之前一直听说过 dokku 作为 PaaS 的方便之处,基于 docker 使得 dokku 几乎可以作为 heroku 的开源替代。周五和茄子/大鹏回学校时聊到了用 dokku 部署博客,由于 dokku 兼容 heroku 的那一套应用发布机制,所以可以直接使用 hexo 的 heroku deploy 插件发布到 dokku! 我使用的 DigitalOcean 有 dokku 的 instance 可以选择,因此安装过程就免去了。这里需要注意的是5刀一个月的内存只有 512 MB, 比 dokku 推荐的 1G 还是要小不少的,解决办法就是利用 swapfile, 详细过程见 How To Add Swap on Ubuntu 14.04

安装

dokku 的安装可参考 官方指引

安装好 dokku 之后一般还需要添加发布用的用户,按照 User Management 中的步骤操作即可,0.7 起可以使用

1
cat ~/.ssh/id_rsa.pub | ssh dokku@dokku.me ssh-keys:add KEY_NAME

方式添加,不再需要 sshcommand. 其中 KEY_NAME 只是用于标记用的名字,可以不是用户名。如果远程服务器的 ssh 端口不是 21,建议在 ~/.ssh/config 中添加如下行

1
2
3
Host your_domain.com
HostName your_domain.com
Port your_port

部署

和 heroku 不一样的是,由于 dokku 往往是部署在自己 VPS 中,所以需要先在自己 VPS 上进行 dokku apps:create blog 添加好之后进入自己的 hexo blog 目录,在 _config.yml 的 Deployment 段添加

1
2
3
4
5
6
7
# Deployment
## Docs: http://hexo.io/docs/deployment.html
deploy:
- type: git
repo: git@github.com:billryan/blog.git,gh-pages
- type: heroku
repo: dokku@your_domain.com:blog

完全不用 GitHub Pages 的可以将 git 的那一段去掉,安装 heroku deploy 插件

1
npm install hexo-deployer-heroku --save

发布时 hexo deploy --generate 遇到 Another gzip: stdin: not in gzip format 错误的需要手动更新 gliderlabs/herokuish 镜像。

启用 HTTPS

Step1: 安装插件 dokku/dokku-letsencrypt

1
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

Step2: 为 blog 应用配置证书需要用到的邮箱

1
dokku config:set --no-restart myapp DOKKU_LETSENCRYPT_EMAIL=your@email.tld

Step3: 生成证书

1
dokku letsencrypt blog

生成证书前记得将 blog DNS 解析到你的 VPS。

Step4: 自动更新证书

1
dokku letsencrypt:cron-job --add

由于使用 Letsencrypt 生成的证书是有有效期的,所以还需要配置自动更新证书。

Comment and share

之前在学校用的 cow, cow 向外提供 HTTP, 虽然有认证,但多少还是有些不安全。受博文 使用 nghttpx 搭建 HTTP/2 代理 影响,最近开始尝试使用 HTTP/2 作为前端接入,配合证书使用安全性得到了极大地提升。证书可以使用 Let’s Encrypt, 方便好使,生成方法可参考 Let’s Encrypt for Archlinux.

nghttp2 已经进入 extra 仓库,使用 packer -S nghttp2 即可安装。我的 nghttpx 配置文件如下:
Continue reading

Yuan Bin

Quality Matters
http://www.yuanbin.me


Software Developer


China, Shanghai