hexo搭建个人博客

前几日得空用hexo搭建了自己的个人博客, 在此做个记录,写下自己的思考与实践过程。

为什么要写博客

到目前位置,我的个人博客历史大概可以划分为五个阶段:

  1. 大学自学了点web开发的知识急切的想去实践,例如利用当时网易的免费二级域名建站。
  2. 在CSDN、cppblog这类程序员技术社区发文。
  3. 使用开源博客WordPress在VPS上搭建个人博客。
  4. 在简书上写作。
  5. 利用静态博客引擎hexo在VPS上搭建个人博客。

第1个阶段绝大多数精力都在折腾酷炫然并卵的js效果;第2个阶段发现技术社区里面有一些牛人,开始模仿榜样;第3个阶段开始用更有逼格的方式模仿牛人;第4个阶段开始意识到内容才是核心,开始实实在在的创作内容;目前的阶段理解到写博客这事的核心是“好记性不如烂笔头”的个人积累,与“另一个自己”的对话,是自己的“历史书”。这个阶段选用哪种方式都是很容易的事情,技术审美上更能接受静态博客,方便版本控制。GitHub Pages绑定个人域名后不能支持https,而自己正好有一台海外的VPS当梯子用,自然而然的想到把博客部署在上面就解决了https和备案的问题。

通过云风阮一峰等知名*“技术网红”*的博客,可以看到牛人的成长,看到牛人的勤奋和坚持。就跟投资复利一样,坚持下去,时间会产生巨大的效应。

为什么选择hexo

在语言层面,我更倾向于使用Go开发的博客框架hugo(宣称渲染速度世界第一)。但是在了解后发现它的整个生态(*GitHub Star、使用率、插件、主题等*)上和hexo相比差距很大。我的核心诉求只是找一个好用的框架,而不想把大量时间耗在造轮子上。而诸如WordPress之类的博客搭建还要依赖数据库安装,有一点杀鸡用牛刀的感觉,而且也不便于版本控制。基本上没有多大的纠结就选择了hexo。

部署经验

官方的文档很详细,Google也有很多资料,所以在此不再一步步赘述。代码我是托管到GitHub的私有仓,通过rsync方式发布到VPS。 通过Caddy做http服务器,可以方便的自动化申请和续签Let’s Encrypt免费证书。简单一点可以通过GitHub Pages托管,但是它不支持自定义域名的https服务,而我觉得目前这个是刚需。为什么没有做CI自动部署呢?TravisCI可以免费对GitHub上的公有仓提供CI服务,如果要对私有仓进行CI需要购买。也想了以下利用一些开源的CI工具,例如JenkinsDrone,但我的博客写作主要都是在业余时间进行,还不一定能保证大块时间一气呵成写完一篇,所以我得阶段性的提交到GitHub。当我写完之后发布时,这里如果是先发布到GitHub的某个发布分支,再通过CI部署到VPS,就显得有些蛋疼了,还不如直接配置为rsync发布到VPS。

用docker来运行Caddy肯定是最为方便的,写好Caddyfile和docker-compose文件,运行_docker-compose up -d_搞定!

以下是参考配置文件:

docker-compose.yml


version: '2'

services:
  blog:
    container_name: "blog"
    image: "abiosoft/caddy"
    network_mode: "host"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/root/caojun.xyz/blog/Caddyfile:/etc/Caddyfile"
      - "/root/caojun.xyz/blog/certs:/etc/caddycerts"
      - "/root/caojun.xyz/blog:/srv"
    restart: always
    environment:
      CADDYPATH: "/etc/caddycerts"
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
caojun.xyz www.caojun.xyz {
  tls caojun.xyz@gmail.com
  root /srv/www
  index index.html index.htm
  gzip
  log /srv/log
}

Contents