最近用 Hexo 换掉 WordPress 后,简直不要太爽,但是本地还要装一个 nodejs + hexo 环境,感觉还是稍有麻烦。
不过最好,但求更好!现在,我本地写好 markdown
后 要使用 hexo g
生成静态文件,由于我的最终放博客的服务器也不是 github page 之类的,所以,我还要手动把 public
文件夹传到我自己的服务器。
条件
最近看到 DaoCloud 有免费的 Docker 资源提供,于是产生了用免费的 docker 做线上持续环境,然后我本地只用管 markdown 写作就行了。
所以现在想利用Docker做持续集成,完工后的预期就是:
- 修改
source/_post
文件夹下的MarkDown
文件 - 提交到
Git
。 - 没有 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地址导进去即可以了。