X.d 笔记

小Web,大世界

0%

使用 Git 与 DaoCloud 搭建 Hexo

最近用 Hexo 换掉 WordPress 后,简直不要太爽,但是本地还要装一个 nodejs + hexo 环境,感觉还是稍有麻烦。

不过最好,但求更好!现在,我本地写好 markdown 后 要使用 hexo g 生成静态文件,由于我的最终放博客的服务器也不是 github page 之类的,所以,我还要手动把 public 文件夹传到我自己的服务器。

条件

最近看到 DaoCloud 有免费的 Docker 资源提供,于是产生了用免费的 docker 做线上持续环境,然后我本地只用管 markdown 写作就行了。

所以现在想利用Docker做持续集成,完工后的预期就是:

  1. 修改 source/_post 文件夹下的 MarkDown 文件
  2. 提交到 Git
  3. 没有 3 了,写作已经完成。 webhook 自动发起通知,然后在 docker 镜像自动拿取最新代码,自动启动 hexo g 进行静态文件构建,自动发布。

是不是很爽? 我使用目前 coding.net, 有自带的 webhook, Github和其它的 git 一般都支持。

搭建

开始着手,我使用 daocloud.io,免费提供一个256M内存的容器(苦逼,发现256M内存不够,所以没有成功,如果真的需要的话,可以买aliyun的主机,但感觉好浪费的说。),而且完美支持Coding.net,关键是页面看起来也很舒服。

由于需要Nodejs支持,可以直接选用一个node镜像。 在Docker hub上就有很多现成的,在daocloud上也有镜像源,所以可以支持用daocloud的分支,在国内会快很多。然后开放80端口就行了,就是这么简单,这里就选一个固定版本0.12.7,也可以使用 latest,总是最新。

开始首手编写 Dockerfile 文件:

FROM daocloud.io/node:0.12.7-onbuild

当然要看一下原始镜像(daocloud.io/node:0.12.7-onbuild)的Dockerfile:

FROM node:0.12.7
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ONBUILD COPY package.json /usr/src/app/
ONBUILD RUN npm install
ONBUILD COPY . /usr/src/app
CMD [ "npm", "start" ]

可以看出,先复制了package.json,然后安装依赖模块,最后再复制资源文件。完成后执行了npm start命令。

所以,只要在package.json里面配置好依赖包和启动命令就完全OK了,剩下的就可以交给容器了~
这里提供一个简单的package.json,配置启动命令,先使用 hexo g 编译,再用 hexo deploy插件启动,并监听80端口。即可完成。

{
  "name": "hexo-site",
  "version": "0.0.0",
  "private": true,
  "hexo": {
    "version": "3.1.1"
  },
  "dependencies": {
    "hexo": "^3.0.0",
    "hexo-clean-css": "0.0.2",
    "hexo-generator-archive": "^0.1.0",
    "hexo-generator-category": "^0.1.0",
    "hexo-generator-feed": "^1.0.1",
    "hexo-generator-index": "^0.1.0",
    "hexo-generator-sitemap": "^1.0.1",
    "hexo-generator-tag": "^0.1.0",
    "hexo-html-minifier": "0.0.1",
    "hexo-renderer-ejs": "^0.1.0",
    "hexo-renderer-marked": "^0.2.5",
    "hexo-renderer-stylus": "^0.2.2",
    "hexo-server": "^0.1.2",
    "hexo-uglify": "0.0.3"
  },
  "scripts": {
    "prestart":"hexo g",
    "start": "hexo deploy"
  }
}

由于上面启动时,会把当前分支里面的文件Copy到容器里面,所以,写文章只用按hexo的目录结构就行了,会在npm包安装后,自动覆盖过去(所以最好是不要把 node_modules 提交到Git服务器里面,以免环境不同引发的问题。)

然后,按Hexo的目录结构,创建source/_posts目录。并把本文的md文档放入到目录下,即可,提交到Git服务器。

最后,到daocloud.io里面,创建一个2x(目前免费2X,绑定微信送1X,但不能创建3X的,所以创建一个2X的)即256M内存的容器,然后持续集成,将coding的git地址导进去即可以了。