前言
Pi入手后就想在上面搭建一个博客,之前首先想到的是一些现成的解决方案如Wordpress,rubyonrails等等,但是随着入手后的一些折腾,发现Pi的CPU
的性能真的不咋地,如果让本来就弱的CPU再负责渲染动态页面的话,结果可想而知。
所以思路就需要转变一下,如果是HTML的静态页面的话,一些耗费资源的功能,如图床,评论等,都以云服务的方式放到公网上,那么以Pi的硬件配置应该问题不大。
为什么选择GOR
经过上面的分析,Pi上搭建博客首选是静态页面方案,但是纯HTML搭建起来的话将是个费时费力的活。有没有更好的方案呢,参考了一粟的GO+GOR
方案,我觉得这个是我想要的东东。
安装GOR
gor 是使用golang实现的类Ruhoh静态博客引擎(Ruhoh like),基本兼容ruhoh 1.x规范. 相当于与ruhoh的官方实现(ruby实现)
有以下优点:
速度完胜 – 编译wendal.net近200篇博客,仅需要1秒
安装简单 – 得益于golang的特性,编译后仅一个可运行程序,无依赖
安装Golang(Golang官网)
1.安装Mercurial(GOOGLE惯用mercurial做版本管理)
sudo apt-get install mercurial
2.检出GO的代码,注意Pi是ARM平台不能用主干的代码,需要用TIP分支
hg clone -u tip https://code.google.com/p/go
一顿漫长等待,可以看到PI的CPU很高,如果实在不行可以在PC机器上HG出来源码,FTP发到Pi上。
3.编译源码并且安装
cd go/src (进入源码目录)
./all.bash (运行编译安装脚本)
整个编译安装过程会很漫长,要所有TEST都通过后GO才算安装成功。
注意:如果安装报错,尝试用TIP分支的其他版本,之前就遇到了这个坑,最新的TIP是无法编译通过的(看来GOOGLE的程序员也会缺少自测就提交代码)。
附HG回滚:
hg revert -r 15749:e92503ce815b --all (我是使用15749:e92503ce815b 这个版本没问题)
安装GOR(Gor官网)
1.用go安装gor
go get -u github.com/wendal/gor
go install github.com/wendal/gor/gor
2.设置GOPATH
GOPATH=/home/pi/mygo (仅供参考 mygo是我建立的一个目录专门放GO的工程)
建立BLOG站点
gor new blog (会在指定的命令目录下生成BLOG的站点目录)
创建博客文章
cd blog
gor post "goodday" (即可生成 post/goodday.md文件, 打开你的markdown编辑器即可编写)
编译博客
在blog站点目录下执行
gor compile
这样会在你的blog站点目录下生成compiled目录,里面的内容就是编译后的静态文件
本地预览
在blog站点目录下执行
gor http
浏览器输入//xxxx:8080 (xxx为你PI的IP),就可以看到结果
GOR站点的基本配置
*打开站点根目录下的site.yml文件
1.填入title, 作者等信息
2.填入邮箱等信息
*打开站点根目录下的config.yml文件
1.设置production_url为你的网站地址, 例如 //wendal.net 最后面不需要加入/ 生成rss.xml等文件时会用到
2.summary_lines 首页的文章摘要的长度,按你喜欢的呗
3.latest 首页显示多少文章
*打开widgets目录, 可以看到基本的挂件,里面有config.yml配置文件
1.analytics 暂时只支持google analytics, 填入tracking_id(可不填)
2.google_prettify 代码高亮,一般不修改
3.comments 暂时只支持disqus, 请填入short_name
注意:comments需要到 disqus 注册个账号,然后申请个short_name,这样GOR就会为你的博客集成disqus的
评论功能。
安装nginx
gor http 命令只能提供开发调试功能,对于server side include这样类似于显示客户端IP等功能就无能为力了,所以要用nginx
安装:
sudo apt-get install nginx
添加虚拟主机
sudo vi /etc/nginx/sites-enabled/default
添加内容
server {
server_name dqy.me;
root /home/pi/blog/compiled; #站点编译静态文件所在目录
location / {
ssi on;
}
}
这样只要在页面上增加以下代码,就可以显示客户端IP了
<!--# echo var="remote_addr" default="no" -->
重启Nginx
sudo /etc/init.d/nginx restart