/ 学习

博客竞品分析与使用Docker搭建Ghost博客

0x01 我的博客辗转之路

作为一个资深爱折腾博客用户,我觉得我在搭建博客上有很多发言权,因为我的博客经历了从最早的Hexo到jekyll,再到Typecho/Wordpress,最后落地于现在的Ghost的过程,深谙纯静态和动态博客使用的各种特点,也掌握了较多的博客使用技巧。其中用户体验最佳的我觉得是Typecho和目前的Ghost的。这里主要讨论自建博客,不讨论各大博客平台,也不谈技术细节,因为我说使用的技术也都是来自于网上,其中顺带我也会提一些附加组件如VPS、域名、CDN、图床的一些经验。至于为啥子要搭个博客呢,当初年轻的时候是为了装逼,写个文章没人看还要转发到空间、票圈。现在呢觉得写文章是一种沉淀,就像记笔记一样,促进你对某方面知识的了解,如果写的好还能因此结识很多朋友,而搭建博客的过程也会让你学到能多技能。其实我想说的是就是一个优雅的博客不是你想搭建就能搭建起来的,你懂的吧!
从我的角度看,很多目前的博主起家是从Hexo或者Wordpress或者各大博客平台开始,中间可能经历一次博客的迁移,进而稳定。对于自己写博客而且写的很好的大牛,你们为啥子这么优秀!

0x02 Hexo & Jekyll

把Hexo和Jekyll放在一起讲是因为两者都是静态博客,Hexo基于Nodejs,Jekyll基于Ruby,操作手法基本差不多。但是Jekyll要比Hexo小众很多,博客主题也没有Hexo多。虽然Hexo可以通过插件有一个后端控制台,但是任然不足够方便。而且各种功能都需要安装插件也不是非常方便,比如生成RSS/搜索等等。这里就提到一个问题,两个静态博客均不方便维护。
缺点:
静态博客,操作不够便捷,不能适应变更需求,功能少,需要通过插件或者配置文件进行优化,学习成本高,采用的语言都不够大众化,对于模板引擎,大家都这样就不说啥了。图片不方便操作,现在我不知道有没有插件啥的,当时最优解是配置本地Markdown编辑器,粘贴图片后直接上传到图床。
适用:
简洁主义,命令行酷爱狂魔,享受每次编译博文给你带来的快感。主题多并且开源不收费。
优化:
不建议直接将图片直接本地引用后Push到Github上,会验证影响访问速度,体验极差。图床推荐qiniu,当年搞得学生账户现在都还在免费用。

为了体现我的爱折腾,这里装个逼,很多人采用Hexo使用的架构为Hexo+Github,而我,比较优秀,采用过Hexo+Coding, Hexo+VPS。使用后两者的原因是Github国内访问会比较慢。其中Hexo+VPS使用的是Git的Hook技术。爱折腾的可以选在通过Hexo+VPS的方式进行部署,这样可以提高博客访问速度,不会以为不可抵扣因素导致博客无法访问。最后如果说在Hexo和Jekyll之间进行取舍的话那必须Hexo。放一张当年我的Hexo博客。
曾经的Hexo博客被百度收录情况

0x03 Typecho & Wordpress

这两个动态博客,均使用php开发,typecho是国内的,Wordpress有很多年历史了,一直在不断更新,而Typecho目前已经不更新了,Typecho经历过乌云众测,但是去年出现了一次反序列化漏洞,详情可以见Typecho反序列化漏洞分析。Typecho博客非常优雅,在国内也形成了一个比较好的生态环境,插件、主题也比较丰富。而Wordpress,国际产品,用户量非常大,很多大型站点都是用Wordpress改的,插件、主题要比Typecho多很多,毕竟是跨国博客,国际驰名商标,但是也面临一个问题,博客不断更新,你不更新吧,又可能存在安全问题,Wordpress的安全问题非常多,也出现过很多漏洞,甚至出现了wpscan这种东西,专门用来扫wordpress漏洞的。
就Typecho和Wordpress进行比较,我比较偏向于Typecho,毕竟国内的东西,找文档也很方便,功能而言,我觉得Typecho满足了博客需要具有的一系列功能,前台后台,反而不断迭代更新的Wordpress显得有些臃肿,但是wordpress针对搜索引擎的优化做的可能更好一些。两者的搭建过程基本步骤查不多,需要一个服务器/VPS,需要数据库。
Typecho后台界面

0x04 Ghost

可能很多人都没听说过这个博客,我也是一个非常偶然的机会遇到,在国内用户很少,主要用户活跃在国外,采用Node开发,代码开源,安装过程对于我这种不熟悉Node的人来说,有点复杂,在2017年底经历了一次大版本迭代,最早我使用的0.11版本,目前使用的是1.23版本。功能较为完善,我觉得从体量上来说和Typecho差不多,具备轻型博客的各种功能,维护便捷,后台功能不多,但是常见功能非常完善。一个优势是针对搜索引擎优化做的非常好,meta/sitemap/amp,支持后台配置head和footer代码。博客迁移非常便捷,支持博文导出,具备API。收费主题占主流,目前我采用的仍是默认主题,支持多用户,角色管理。编辑器支持分栏预览,支持多种快捷键,粘贴图片(1.23.1新功能,暂时我还没体验)。唯一的不确定性是,有没有漏洞。我觉得是有的。
Ghost博客后台界面

0x05 基于Docker搭建Ghost博客

为什么采用Docker搭建呢,这是我的几个考量:
1. 安全性未知,在容器里可以降低出现漏洞对我的影响
2. 博客本身搭建过程不易操作
3. 方便迁移和升级

Composefile

version: "2"

services:

  ghost:
    depends_on:
      - blog_db
    links:
      - blog_db
    build: ./ghost
    image: ghost:myblog
    restart: always
    ports:
      - 127.0.0.1:2368:2368
    volumes:
      - /home/ubuntu/blog-data:/var/lib/ghost/content
    environment:
      database__client: mysql
      database__connection__host: blog_db
      database__connection__user: blog
      database__connection__password: xxxxx
      database__connection__database: blog
    
  blog_db:
    image: mariadb:10.1
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxxxxx
      MYSQL_USER: blog
      MYSQL_PASSWORD: xxxxxx
      MYSQL_DATABASE: blog
    volumes:
      - /home/ubuntu/blog-db-data:/var/lib/mysql

Dockerfile

FROM ghost:1.23-alpine

MAINTAINER Donot

ADD config.production.json config.production.json
ADD post.hbs /var/lib/ghost/current/content/themes/casper/post.hbs
ADD package.json /var/lib/ghost/current/content/themes/casper/package.json

其中几个配置文件我的修改
config.production.json修改url,这个是要解决在博客前端一些业内url跳转问题,修改为你的博客主域名即可。
post.hbs 添加disqus评论框
package.json 最后posts_per_page,表示页面展示多少篇博文,默认25太多了。

然后docker-compose -f blog.yml up -d即可启动,通过nginx反向代理,方便配置https和查看日志,ghost本身日志是json格式不方便看。升级的话直接修改Dockerfile的镜像,重新编译,因为数据库、博客数据都挂载在主机,所以直接启动即可。如果域名不想备案,国内主机可配置走https即可绕过备案校验或者使用cloudflare CDN。

https://ghost.org/
http://typecho.org/
https://hexo.io/
https://jekyllrb.com/
https://cn.wordpress.org/