什麼是octopress

octopress是一套讓你寫blog的程式。聽起來好像沒啥特別的,不過他其實很不一樣。一般的部落格系統(或是更專門的術語content manage system, CMS),像是wordpress, google的blogger, 無名小站, 痞客幫...等,清一色都是架構在動態網站上,也就是網站需要run在類似php這種動態語言的環境,而且通常會搭配著apache, mysql, linux,這個環境簡稱LAMP(Linux + Apache + Mysql + PHP)。

那這樣有什麼壞處呢? 首先,第一個你必須找一個LAMP環境的主機去放你的網站,不管是實體主機還是虛擬主機,這多半都需要錢,就算免費也會有廣告,看著別人的廣告放在自己的blog上一閃一閃的,整個就是噁心。第二個,最令人討厭的是你必須忍受在瀏覽器上用網頁編寫文章!! 也就是所謂的網站後台附贈的文字編輯器,這通常都很難用,內建的「所見即所得編輯器」排版常會亂掉,因此你免不了要跟html tag打交道,讓人仿佛置身於寫網頁當中...

BUT!! 我是在寫文章不是在寫網頁!!!

而這又是很繁瑣的事情,因為你很難在網頁編輯器處理好落落長的html縮排,而且這些tag也很煩。這件事情,果然大家都有感受到...

貼圖麻煩、排版麻煩、host麻煩、樣樣麻煩...XDite

身為一個programmer,有自己用慣的text editor也是很合理的事,加上markdown處理排版比html更方便簡潔,讓人開始幻想如果能在這樣的環境blogging那將是多麼幸福快樂的事啊...!

沒錯,Octopress就是為此而生的,它是在本機電腦用text editor編輯markdown來寫blog,排版貼圖貼連結都還挺方便的,寫完之後經過rake處理完產生純靜態檔deploy至網頁空間,完完全全不需要動態語言的環境!! 甚至還能「用git來版本控制blog」!!

沒想到寫blog也可以是這麼宅的事

ps. octopress不太適合程式麻瓜

先裝ruby才能裝octopress

原因很簡單,octopress是ruby寫的,想執行它你必須有ruby環境。不過呢,一直以來在OSX裝ruby不是一件太容易的事,你要搞rvm, 環境變數, 還要避免跟OSX內建的ruby版本衝突,還有一些dependency...etc. 運氣好的話一個小時可以搞定,運氣不好的話可能要花一個上午。

然而最近我發現有個好物,不消一杯咖啡的時間,躺著都可以搞定,裝過一次就回不去了!! 這個安裝包同時也會幫你安裝git,這麼nice還不用嗎?

裝完之後檢查一下
ruby -v
rails -v
rvm -v
查看這三個主要套件的版本是否為最新,另外幾個常用的指令
rvm list # 列出目前「透過rvm」安裝的各種ruby版本
rvm use 1.9.3 # 切換至ruby 1.9.3版
請務必把ruby版本切換至1.9.2或更新,以下的範例都是用1.9.3。

安裝octopress在本機電腦

既然安裝包已經安裝好git了,那就直接複製github上的repo吧!
git clone git://github.com/imathis/octopress.git octopress
cd octopress # 如果你用rvm,這時候你有可能會被問到是否相信這個.rvmrc檔案來管理你的ruby環境,選擇yes
切到octopress資料夾後,利用bundler來安裝所有ruby相關的dependency。不過呢,你必須先安裝bundler
gem install bundler
接著利用bundler安裝Gemfile裡面的gem,bundler會幫你處理dependency
bundle install
然後安裝octopress預設的佈景主題吧!
rake install

到目前為止,已經有一個完整的「產生blog的系統」安裝在你的機器上了。這就來看一下他「產生」的blog長什麼樣子
rake preview # octopress啓動一個網頁伺服器,預設port為4000
然後打開你的browser,網址輸入localhost:4000。鏘鏘!! 你已經完成一個屬於自己的blog了! 下一步就是把這個blog放到一個網路空間去。

部署octopress的方法

rake generate   # 產生編譯過的靜態檔案至_deploy資料夾內

部署octopress其實只要找個免費空間,把_deploy內的檔案全部上傳即可,可以是dropbox或是其他數不盡的免費網頁空間。但是最夯的還是這些:

  • Github
  • Heroku
  • Rsync

至於要選擇哪一個,詳細我也沒研究,我個人是偏好github

部署octopress至Github (免費)

到Github申請一個帳號,開一個repo,請原諒懶惰的小弟,這部分就不在此贅述了。唯一要注意的就是,repo的名稱必須是your_github_user_name.github.com

設定octopress將來自動幫你部署,然後在terminal輸入
rake setup_github_pages
官網教學

generate ssh keys

這部分是比較麻煩的地方,當代的許多網路服務都會透過ssh安全加密連線來傳送資料,heroku或github都是,亞馬遜AWS也是,可以說ssh連線已經成為潮流了。他的運作原理真要講起來也是很複雜,簡單一句話就是ssh是透過鑰匙來認證身份的,public key跟private key。public key就像是真實世界的鎖頭,而private key像是真實世界的鑰匙,每一個public key都有其對應的private key,ssh運作的原理就是當你連線的時候,這個連線會帶上一個private key去match對方的public key,換句話說就是帶上一把鑰匙去開對方的鎖頭,開成了就成了。而public key跟private key其實就只是一個檔案而已,只不過這檔案裡的內容是透過一種叫做rda演算法所算出來的加密字串。因為它只是檔案所以可以被複製貼上,所以你可以擁有很多鑰匙跟鎖頭,除此之外你也可以有「多個」鑰匙-鎖頭組(key pair),同一組key pair內的public key跟private key是互相對應的,然而不同的key pair之間的key都不互相對應,就像是你沒辦法把腳踏車鑰匙當成機車鑰匙一樣,腳踏車鑰匙只能打開腳踏車上的鎖頭,而機車鑰匙只能發動機車(這也是一種鎖頭)。

言歸正傳,如果你想要透過ssh用git push到github,就必須要有private key跟public key,並且要把public key跟你的github帳號掛鉤起來,意思就是拿鎖頭去鎖你的github帳號,只能用你手上的private key去開。至於如何產生ssh,github官網有教學,建議你讀一讀那篇文章。在這邊提供我自己的設定

in ~/.ssh/config:
Host tpy-blog
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/{my_private_key}

再確認一次你的鑰匙
ssh-add -l

進階: Custom Domain


在octopress/source/CNAME裡(沒這個檔案的話就創建一個)寫入你的custom domain: my_custom_domain.com。
然後到你的DNS管理區設定一個CNAME至github.com
以我自己為例,in /source/CNAME
blog.tpy.tw
我的DNS供應商(pchome)設定CNAME:blog, value: github.com。

進階: 本機電腦部署至多個Github帳號

你一定有機會在你自己的電腦同時使用「私人」以及「工作」用的github repo
然而當你push至github時,github只會用你所提交的ssh key辨識你的身份,而不是用git config user.name或是其他,所以要有一個切換ssh key的機制。

ssh-agent是你的鑰匙管家,而ssh-add這個指令可以新增/刪除目前管家手上所掌控的鑰匙

git remote add origin git@blog-1:you_github_account/you_github_account.github.com
ssh-add -l # checkout which key you use to link to github, github identify you by this key
if you use user_A's key to authenticate user_B's github repo, it will fail of course
ssh-add ~/.ssh/{private_key_of_blog1} # add key for blog1's repo
ssh-add -d ~/.ssh/{remove_other_key}

ref:

https://github.com/chalien/Multiple-public-ssh-key-github
http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/
http://stackoverflow.com/questions/3225862/multiple-github-accounts-ssh-config
http://stackoverflow.com/questions/2419566/best-way-to-use-multiple-ssh-private-keys-on-one-client
http://stackoverflow.com/questions/4665337/git-pushing-as-wrong-user
http://doblock.com/articles/using-public-keys-with-multiple-github-accounts

ssh-add

http://linux.die.net/man/1/ssh-add

附錄: Git複習

http://blog.longwin.com.tw/2009/05/git-initial-env-setup-2009/
git remote -v
git remote add SOME_NAME git@you_ssh_host_not_ssh_host_name:your_github_username/your_github_username.github.com #your_github_username.github.com is actually your repo

Comments

comments powered by Disqus