Octopress是一个基于Jekyll的框架,两者均开源,而且都是Ruby……为什么不推荐直接用Jekyll呢,呃……因为Octopress把Jekyll包装得很好了啊。嗯,为什么不直接在Github Pages上部署?在GP上部署很简单的,但是在OpenShift上部署就不那么容易了(略微tricky一点,整体还是很简单)。
下面就讲述一下我搭建Octopress的方法,目测比网上流传的各个版本简单!
准备工作
首先系统必须安装Ruby 1.9.x,不建议安装ruby的其它RPM包,因为版本不同可能会和Gemfile的要求冲突。
下面以Octopress的2.5分支为例,先克隆它的源码:
git clone https://github.com/imathis/octopress.git -b 2.5
已经克隆了Octopress其它版本的可以git checkout 2.5切换到2.5分支,当然不想用git的也可以直接下载2.5分支的zip包。
然后去OpenShift的控制台创建一个应用,应用类型选择Ruby 1.9,其它默认就好了。附带说一下,我的这个应用名是en,git clone下来的文件夹名称就是en了。
注意:OpenShift的repo可以作为git submodule放在Octopress下,但是请不要把Octopress复制到OpenShift的repo里面去!
安装Octopress
现在进入到「安装」环节。先修改octopress/Gemfile,把rubygem的镜像设为淘宝镜像,可以加快速度,把第一行改成:
source 'http://ruby.taobao.org'
继续,找到值:
gem 'jekyll', '~> 1.1.2'
把1.1.2改成1.2.0(我已经提交了pull request,暂时还未通过)(Pull Merged),保存。然后终端下cd进入octopress目录后执行:
bundle install rake install
打开_config.yml文件,按照你自己的情况修改好。下载我修改过的Rakefile,覆盖octopress下的原始文件。再打开这个Rakefile,把下面这一行按你的实际情况修改:
deploy_dir = "../en"
我的en目录是OpenShift的repo,和octopress放在同一个路径下,所以en相对于octopress的路径是../en,亦即你要把这个值改成你OpenShift的repo的路径。
部署到OpenShift
每次写文章只需要cd进入Octopress目录,执行
rake new_post['Hello World']
‘Hello World’这个是文章标题(两边必须有单引号),这会在octopress/source/_post下生成一个Markdown文件,打开编辑好。在部署到OpenShift前可以本地预览一下,还是在Octopress目录下,执行
rake preview
会有输出告诉你监听的地址,在浏览器中打开(一般应该是127.0.0.1:4000)。2.5分支的preview是由guard负责monitor的,你可以让它一直运行,每次修改了markdown之后它会自动重新生成相应的网页。准备好了就可以部署到OpenShift上了:
rake deploy
因为所用的Rakefile已经被我修改过了,所以deploy指令执行的是先generate,然后复制public下的文件到OpenShift repo的public下,最后用git把更改提交上去。
配置优化
OpenShift的ruby app是Apache-based,我们可以通过.htaccess文件重定向Apache的404错误到一个更加「友好」的页面。先生成一个404页面吧:
rake new_page['404.md']
加上.md后缀生成的是source/404.md,否则是source/404/index.markdown,两者在URL上将有所区别。打开source/404.md,把日期(date:)的值删掉(用一个空格代替,不要整行删去),sharing、comment都改成false,内容就按你的喜好写好即可。
在source下新建一个.htaccess文件,编辑它(vi、vim、nano随便什么文本编辑器),内容如下:
RewriteEngine on ErrorDocument 404 /404.html
当然,主题是少不了的。Octopress的主题只要懂CSS什么的都很快就能做好,网上Google也能得到一大圈。安装主题通过下面这条命令实现:
rake install['THEME_NAME']
如果你修改了主题(octopress/.theme/THEME_NAME/),必须要重新安装主题才能让改动生效。
总结
网上参考的文章里面搞了很多,什么Nginx啊,改action_hooks,甚至还有改环境变量的。我的做法很简单,因为OpenShift的ruby是Apache-based,所以就修改Octopress的Rakefile,让它deploy的时候自动完成就好了。
OpenShift的small gear(免费套餐)有1GB的存储空间,对于用Octopress搭建的博客是绝对够用了!静态博客的维护那也是相当轻松的(不和数据库打交道就是轻松)!
参考:Technical Generalism | shellco.de | Reza Jatnika
演示地址:Librehat’s English Blog (我的英文博客)
2 responses to “在OpenShift上用Octopress搭建静态博客”
各种VPS。。还在用虚拟主机的默默滚开了
OpenShift是PaaS,不是VPS……