轉載自[http://typeof.net/m/static-website-using-git-in-actions.html]
在 Github Pages 火起來之后,很多人寫博客都開始用全靜態了。(什么?評論?disqus 啊!)這種靜態站使用 git 管理網站內容,在本地(或者在服務器端使用 Jekyll)生成頁面內容后,用 git 推送到服務器上完成部署。這種設計讓我等死 Nerd 感覺很舒服,畢竟一切盡在掌握。搭建一個這樣的服務器并不困難,趁著最近入手 42qu 的服務器,就在這里放個教程給和我一樣的神奇生物好了。
裝 git 這個工作不復雜,我的服務器使用 Centos 6.2,yum install git 就搞定了。
接下來是安裝 git 的權限管理系統 gitosis 使服務器支持推送。這個步驟不在贅述,網上內容多得是。我假定你放網站的 repo 位于 /home/git/repositories/site.git。
然后是把 git 用戶和網頁服務器的用戶(我這里是 nginx)加入同一個組里。這對之后 git 和網站目錄同步至關重要,否則會有非常麻煩的權限問題。
sudo groupadd web
sudo usermod -a -G web git
sudo usermod -a -G web nginx
首先我們需要建立一個目錄來放置網站,接下來把它的從屬組改成上面建立的 web 組并且設置組的寫權限:
sudo mkdir /var/www/site
sudo chmod g+w /var/www/site
sudo chgrp web /var/www/site
接著找到你的網站對應的 repo(比如 /home/git/repositories/site.git),編輯里面的 hooks/post-receive 文件:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=/var/www/site checkout -f $branch
echo 'Changes pushed live.'
fi
done
這一段腳本是用 git 用戶運行的,所以上面才需要給 /var/www/site 設置權限還要把 git 加組。
好了,現在可以推更新了:
git push origin master
如果看到“Changes pushed live.”,你就成功了。把 nginx 的目錄設置成 /var/www/site,看看效果如何?