原文链接: http://harttle.com/2013/10/18/github-homepage-tutorial.html
最近终于完成了个人博客的开发和部署,就把整个过程记录在这里。利用 GitHub 提供的文件服务部署,采用 github+GFM+jekyll 方式构建静态博客站点。
之后还可以采用highlight.js进行代码高亮,MathJax提供LaTex公式支持。完成部署后,可以在在线撰写博客,也可以本地离线撰写,然后同步到GitHub。
Ruby
ruby --version
得到ruby版本)否则,安装Ruby
#ubuntu
sudo apt-get install ruby
#centos
yum install ruby
#arch
yaourt -S ruby
Jekyll
安装 Jekyll
gem install jekyll
ssh-keygen -t rsa
得到 SSH 公钥文件:id_rsa.pubgit clone URL_YOU_COPIED
,得到文件夹 username.github.iogit remote set-url origin URL_YOU_COPIED
,让git使用密钥验证,省去了每次push时输入密码。生成站点文件
# 建立站点
jekyll new my-site
# 拷贝至 GitHub 仓库
cp -r my-site/. username.github.io
rm -r my-site
# 添加编译生成的文件至 gitignore
echo '_site' >> .gitignore
编译站点,并运行本地服务
# 编译生成静态站点,-w 选项可以监测文件变化并自动重新生成
jekyll build -w
# 运行服务
jekyll serve
文档
jekyll 站点文件结构
.
├── _config.yml //站点的配置文件
├── _drafts //博客草稿
| ├── begin-with-the-crazy-ideas.textile
| └── on-simplicity-in-technology.markdown
├── _includes //供引入的html模块
| ├── footer.html
| └── header.html
├── _layouts //视图模板
| ├── default.html
| └── post.html
├── _posts //博客文章
| ├── 2007-10-29-why-every-programmer-should-play-nethack.textile
| └── 2009-04-26-barcamp-boston-4-roundup.textile
├── _site //jekyll 编译生成的站点
└── index.html
站点配置文件:_config.yml
该文件采用 YAML 标记语言组织内容,在该文件修改站点保留变量,或者添加自定义变量。这里定义的变量在模板中可通过 site.VARIABLE_NAME
访问(记住重启jekyll服务)。
# GitHUb Pages 默认的 Markdown 引擎(即 GFM)
markdown: redcarpet
# Latex 支持
markdown: maruku
运行 git 提交至GitHub
# 提交改动至HEAD版本
git commit -a
# 同步HEAD至服务器
git push
变量定义与访问
_config.yml
中定义的变量,可通过 site.VAL
访问;layout
继承的页面)中定义的变量,可通过 page.VAL
访问;content
为子模板的内容page.content
为经过markdown转换的末级子模板的内容Jekyll 插件在 GitHub Pages 中不能使用,因为 GitHub Pages 的编译使用 --safe
参数;但可以在本地编译后同步至 GitHub 来取代 GitHub 的自动编译。
{% raw %} {% include %} {% endraw %}
标签参数只能为常量,被包含文件中的 liquid 语句以文件为单元解析。GitHub 出于安全性的考虑,jekyll 引擎默认采用 --safe
参数,这会禁用 Jekyll 的插件。如果希望开启 Jekyll 插件来获得更多的支持,只能关闭 GitHub 的 Jekyll 引擎。
我们选择在 username.github.io repo 中新建一个叫 dev
的 branch 来做开发,把生成的静态站点 _site
push 到 master 分支。当然,我们需要把master上的jekyll文件复制过来。
新建 branch
# 建立dev目录
mkdir dev
cd dev
# 建立git仓库,并连接到github
git init
git remote add origin git@github.com:harttle/harttle.github.io.git
# 新建分支
git checkout -b dev
git push --set-upstream origin dev
# 现在可以开始工作了
git push
git pull
迁移 Jekyll 站点
# 拷贝文件
cp -r harttle.github.io/. dev/
# 编译站点
cd dev/
jekyll build -d ../harttle.github.io/
# 运行站点
jekyll serve -d ../harttle.github.io/
这里有完美的文档:http://highlightjs.org/
如果希望在后台实现转换,可以这样使用:
<!-- 首先,引入它的样式 -->
<link rel="stylesheet" href="/assets/css/highlight/tomorrow-night-eighties.css">
<!-- 然后,对于每一个要高亮的代码块,调用如下函数 -->
<script>
function(code, lang){
if(lang)
return '<code class="hljs">'+hljs.highlight(lang,code).value+'</code>';
else
return '<code class="hljs">'+hljs.highlightAuto(code).value+'</code>';
</script>
文档同样完美:http://docs.mathjax.org/en/latest/
如下的使用将会直接将当前页面的\(
与\)
中内容转换为行内公式(inline),将\[
与\]
中内容转换为独立的公式行(block)。当然,这都是可以配置的。
<!-- 直接引入MathJax,使用Tex-MML-AM_HTLMorMML配置文件 -->
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
相册载入速度优化
加入缩略图机制(make+imageMagick)
latex显示
采用mathJax
解决 affix-bottom 失效
问题出自 sticky footer 中的
body{height:100%}
,解决:
Replacedocument.body.offsetHeight
withdocument.body.scrollHeight
in bootstrap.min.js
载入优化
script 后置
社会化链接
添加 linkedIn facebook google+ follow
SEO优化
添加 meta、添加sitemap.xml和robots.txt、导入搜索引擎、创建RSS