使用coding、DaoCloud、和Docker打造markdown纯静态博客

[编者的话] 当文字偶遇代码,当程序插上了翅膀,让分享成为我们彼此沟通的语言。我们期待可以构建这样一个平台让开发者们看到你们的智慧,挖掘你们的才华,让彼此在开源的路上不再孤独。“DaoCloud分享写作计划”已全面启动,欢迎踊跃投稿。


作者:sinkcup


说起独立博客的技术演变,从数据库到纯文本放git是一大进步,从HTML到markdown又是一大进步。

解析技术有没有进步呢?既然markdown是纯文本了,再用PHP/Python/Ruby去实时解析,多么多此一举啊(比如github用的Jekyll),还需要配置服务器环境。如果用shell把markdown转换成HTML,生成纯静态博客多么愉快,无需服务器,直接放到云存储CDN上,飞快!

先看疗效!openwrt.io就是这么一个纯静态网站,网址:http://openwrt.io/,代码在coding上:https://coding.net/u/openwrtio/p/portal/git

openwrt.io

打造这么一个酷炫的博客需要几步?

只需要两步,比把大象放进冰箱里还要简单^_^

第一步:把代码提交coding

注册登录 coding.net,fork或创建一个项目,比如blog,代码:https://coding.net/u/openwrtio/p/portal/git/tree/1.0.0/,修改其中的docs/index.md即为博客首页,然后提交,打tag(比如0.1.0),push。指令如下:

git clone xxx  
cd xxx  
wget -O blog.zip https://coding.net/u/openwrtio/p/portal/git/archive/1.0.0  
unzip blog.zip  
rm blog.zip  
echo "Hello! 树先生" > docs/index.md  
git add .  
git commit -m 'first commit'  
git push origin master  
git tag -a 0.1.0 -m 'first commit'  
git push --tags  

第二步:使用DaoCloud自动构建和部署

打开www.daocloud.io,创建一个项目,“设置代码源”为刚才提交coding的项目即可,将触发自动构建。等待构建完成,即生成了一个debian系统镜像,点“查看镜像”——》“部署”——》“基础设置”——》“立即部署”,即可。DaoCloud会赠送一个子域名,访问即可看到博客已经跑起来了。建议购买一个自己的域名,CNAME绑定即可,比如dnspod域名注册服务

daocloud build-flows new daocloud build-flows success openwrtio-portal daocloud runtimes-app

构建的过程为什么这么漫长?

请看这个文件: https://coding.net/u/openwrtio/p/portal/git/blob/1.0.0/Dockerfile

FROM nginx  
MAINTAINER sinkcup <sinkcup@163.com>

RUN apt-get update -qq  
RUN apt-get upgrade -y  
RUN apt-get install -y python-pip  
RUN pip install mkdocs  
RUN mkdir -p /usr/share/nginx/html/portal  
ADD . /usr/share/nginx/html/portal/  
RUN cd /usr/share/nginx/html/portal/ && \  
  mkdocs build
  RUN rm -f /etc/nginx/conf.d/*
  ADD nginx/conf.d /etc/nginx/conf.d/

可以看到每次构建都需要apt-get升级、安装环境、安装mkdocs,最后用mkdocs生成HTML。前面几个步骤每次都一样,那就想办法重用即可。

Dockerfile改成两个,一个是每次都不变的服务器环境:

FROM nginx  
MAINTAINER sinkcup <sinkcup@163.com>

RUN apt-get update -qq  
RUN apt-get upgrade -y  
RUN apt-get install -y python-pip  
RUN pip install mkdocs  
RUN cd /usr/share/nginx/html/ && \  
  mkdocs new demo
RUN cd /usr/share/nginx/html/demo && \  
  mkdocs build
RUN rm -f /etc/nginx/conf.d/*  
ADD nginx/conf.d /etc/nginx/conf.d/  

我把它提交到了Github(https://github.com/sinkcup/docker-library-nginx-mkdocs),然后注册登录Docker Hub,创建一个项目,选择来自Github的代码(https://registry.hub.docker.com/u/sinkcup/nginx-mkdocs/),构建成功,生成的镜像是 sinkcup/nginx-mkdocs:0.1.0

DaoCloud的Dockerfile里直接使用这个Docker镜像即可,从此构建飞快!代码如下:

FROM sinkcup/nginx-mkdocs:0.1.0  
MAINTAINER sinkcup <sinkcup@163.com>

ADD . /usr/share/nginx/html/portal  
RUN cd /usr/share/nginx/html/portal/ && \  
  mkdocs build
  RUN rm -f /etc/nginx/conf.d/*
  ADD nginx/conf.d /etc/nginx/conf.d/

完整代码在 https://coding.net/u/openwrtio/p/portal/git/tree/1.1.0/,欢迎fork。

mkdocs文档在:http://www.mkdocs.org/


本文来自“DaoCloud分享写作计划”,这项计划旨在为开发者提供一个平台,分享使用Docker的心得体会和技术经验。DaoCloud将为文章作者提供一定的物质奖励,具体方式请访问:DaoCloud写作分享计划 ,欢迎Docker爱好者和DaoCloud用户踊跃投稿!