一切從搭建博客開始談起

問題描述

靜態(tài)博客托管在github上誠然是一件非常不錯(cuò)的事情,但是github在國內(nèi)訪問速度很慢,而且經(jīng)常因?yàn)檫`反國內(nèi)的政策被墻而導(dǎo)致無法訪問,所以在國內(nèi)找一個(gè)類似github的代碼托管兼靜態(tài)頁面托管平臺(tái)并采用雙托管方式似乎是個(gè)不錯(cuò)的解決方案。

解決方案

國內(nèi)有個(gè)叫g(shù)itcafe的代碼托管平臺(tái)提供了類似github的服務(wù),不過gitcafe已經(jīng)整合到coding.net,所以國內(nèi)選擇了coding.net作為代碼和靜態(tài)網(wǎng)頁的托管。
國內(nèi)的靜態(tài)網(wǎng)頁托管問題解決了,但是coding.net有自己的默認(rèn)域名和綁定域名的方式,如何與github綁定的域名共存呢?也就是對于國內(nèi)的用戶讓他們訪問coding.net托管的網(wǎng)頁;對于海外的用戶,讓他們訪問github托管的網(wǎng)頁,而且用戶在瀏覽器上敲下的網(wǎng)址要都是同一個(gè)。其實(shí)采用CDN的方式可以解決這個(gè)問題,但是免費(fèi)靠譜的CDN資源非常難找,而且也有諸多限制,這里采用了免費(fèi)的DNSPod服務(wù),可以將國內(nèi)的dns請求解析到國內(nèi)的服務(wù)器(coding.net),國外的dns請求解析到國外的服務(wù)器(github.com),有效的解決了問題。
下面拿本人的博客http://www.figotan.org舉例說明如何一步一步解決這個(gè)問題。

國內(nèi)代碼以及靜態(tài)網(wǎng)頁托管平臺(tái)-coding.net

訪問 http://www.coding.net注冊賬號,記得賬號名最好和github的賬號名保持一致(不一致其實(shí)也沒問題);

  1. 新建并上傳一個(gè)SSH公鑰,操作過程和github類似;
  2. 創(chuàng)建Coding Pages,具體流程可以參考官方文檔
  3. 綁定自定義的網(wǎng)址,如果是主域名訪問,比如figotan.org,記得www和非www都需要綁定一下,否則非www的方式,比如http://figotan.org會(huì)報(bào)404錯(cuò)誤;
  4. 在瀏覽器里訪問http://figotan.coding.me試試看效果

DNSPod

采用DNSPod提供的智能域名解析服務(wù),可以按國內(nèi)網(wǎng)絡(luò)供應(yīng)商(電信,聯(lián)通,移動(dòng),教育網(wǎng)),地域(國內(nèi),國外),搜索引擎(谷歌,百度,搜搜,有道,必應(yīng),搜狗,奇虎)等維度對線路類型做域名解析。這樣,一個(gè)域名可以針對不同的用戶群體提供不同的空間與之提供服務(wù)。國內(nèi)的用戶訪問國內(nèi)的空間,國外的用戶訪問國外的空間。
下面是具體的操作步驟和注意的問題:

  1. 注冊賬號并添加域名;
  2. 添加coding.net的空間地址,具體配置如下圖:
  3. 去域名供應(yīng)商處改寫NS紀(jì)錄,我用的狗爹提供的域名服務(wù),具體修改操作如下圖:
  4. 刷新本機(jī)dns緩存并在瀏覽器測試效果
    $ sudo dscacheutil -flushcache
    $ sudo killall -HUP mDNSResponder
  5. 查看博客的域名解析信息
    $ dig www.figotan.org +nostats +nocomments +nocmd

配置域名

配置域名紀(jì)錄的時(shí)候需要了解如下一些概念,也需要注意一些問題和坑,避免出現(xiàn)無法訪問域名的問題。

關(guān)于Host(主機(jī))

主機(jī)記錄就是域名前綴

Host(主機(jī)) 用法
www 解析后的域名為 www.figotan.org
@ 直接解析主域名 figotan.org
* 泛解析,匹配其他所有子域名 *.figotan.org

關(guān)于Resord Type(記錄類型)

要指向空間商提供的 IP 地址,選擇「類型 A」,要指向一個(gè)域名,選擇「類型 CNAME」

Resord Type(記錄類型) 用法 Points To(記錄值)
A(Host) 地址記錄,用來指定域名的IPv4地址(如:8.8.8.8),如果需要將域名指向一個(gè)IP地址,就需要添加A記錄 填寫您服務(wù)器 IP,如果您不知道,請咨詢您的空間商
AAAA(IPv6 Host) 用來指定主機(jī)名(或域名)對應(yīng)的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)記錄 不常用。解析到 IPv6 的地址
CNAME(Alias) 如果需要將域名指向另一個(gè)域名,再由另一個(gè)域名提供ip地址,就需要添加CNAME記錄 填寫空間商給您提供的域名,例如:figotan.org
MX(Mail Exchanger) 如果需要設(shè)置郵箱,讓郵箱能收到郵件,就需要添加MX記錄 填寫您郵件服務(wù)器的IP地址或企業(yè)郵局給您提供的域名,如果您不知道,請咨詢您的郵件服務(wù)提供商
TXT(Text) 在這里可以填寫任何東西,長度限制255。絕大多數(shù)的TXT記錄是用來做SPF記錄(反垃圾郵件) 一般用于 Google、QQ等企業(yè)郵箱的反垃圾郵件設(shè)置
SRV(Service) 記錄了哪臺(tái)計(jì)算機(jī)提供了哪個(gè)服務(wù)。格式為:服務(wù)的名字、點(diǎn)、協(xié)議的類型,例如:_xmpp-server._tcp 不常用。格式為:優(yōu)先級、空格、權(quán)重、空格、端口、空格、主機(jī)名,記錄生成后會(huì)自動(dòng)在域名后面補(bǔ)一個(gè)“.”,這是正常現(xiàn)象。例如:5 0 5269 xmpp-server.l.google.com.
NS(Name Server) 域名服務(wù)器記錄,如果需要把子域名交給其他DNS服務(wù)商解析,就需要添加NS記錄 不常用。系統(tǒng)默認(rèn)添加的兩個(gè)NS記錄請不要修改。NS向下授權(quán),填寫dns域名,例如:f1g1ns1.dnspod.net

關(guān)于TTL

即 Time To Live,緩存的生存時(shí)間。指地方dns緩存您域名記錄信息的時(shí)間,緩存失效后會(huì)再次到DNSPod獲取記錄值。

TTL 用法
600(10分鐘) 建議正常情況下使用 600
60(1分鐘) 如果您經(jīng)常修改IP,修改記錄一分鐘即可生效。長期使用 60,解析速度會(huì)略受影響
3600(1小時(shí)) 如果您IP極少變動(dòng)(一年幾次),建議選擇 3600,解析速度快。如果要修改IP,提前一天改為 60,即可快速生效

部署內(nèi)容

之前的博客是放在github,所以首先從github獲取博客最新的代碼到本地

第一次從github遷移到雙git的流程

詳細(xì)流程如下:

  1. 從github獲取代碼
    git clone git@github.com:figofuture/figofuture.github.io.git
  2. 進(jìn)入代碼所在的目錄
    cd figofuture.github.io
  3. 本地master分支跟蹤github遠(yuǎn)程分支
    git branch --set-upstream-to=origin/master master
  4. 拉取master最新的代碼
    git pull
  5. 添加coding.net遠(yuǎn)程分支
    git remote add coding-origin git@git.coding.net:figotan/figotan
  6. 新建本地分支coding-pages
    git checkout -b coding-pages
  7. 拉取coding.net遠(yuǎn)程分支代碼到本地coding-pages分支
    git pull coding-origin coding-pages
  8. 本地coding-pages分支跟蹤遠(yuǎn)程分支
    git branch --set-upstream-to=coding-origin/coding-pages coding-pages
  9. 解決沖突
  10. 提交本地修改
    git commit -a -m "xxxxx"
  11. 推送本地coding-pages到coding遠(yuǎn)程coding-pages分支
    git push coding-origin coding-pages
  12. 切換到master分支
    git checkout master
  13. 合并coding-pages分支的修改到master分支
    git merge --no-ff coding-pages
  14. 提交master分支到github
    git push origin master

日常編寫博客以及同步的流程

以后可以拿其中某一個(gè)本地分支(coding-pages)做基準(zhǔn)修改,推送到這個(gè)本地分支跟蹤的遠(yuǎn)程分支(coding),然后同步到本地另一個(gè)分支(master),并推送到另一個(gè)分支跟蹤的遠(yuǎn)程分支(github),這樣,就做到了國內(nèi)和國外博客內(nèi)容的同步更新。
具體的操作流程如下:

  1. 切換到coding-pages分支,并編寫博客/上傳圖片/修改代碼
    git checkout coding-pages
  2. 提交并推送到coding遠(yuǎn)程分支
    git commit -a -m "update"
    git push coding-origin coding-pages
  3. 切換到master分支,合并coding-pages分支的改動(dòng)到master分支
    git checkout master
    git merge --no-ff coding-pages
  4. 推送master內(nèi)容到github,同步完成
    git push origin master

自動(dòng)化部署方案

如果以上方法你覺得麻煩,其實(shí)還有一種自動(dòng)化的repo同步方案,詳見利用webhook自動(dòng)同步不同repo之間的代碼
這里筆者做了一些整理和注意的坑,如下:

  1. 注冊openshift
  2. 添加一個(gè)應(yīng)用,根據(jù)熟悉的語言選擇平臺(tái),這里選PHP5.4,設(shè)置域名和應(yīng)用名。也可以使用OpenShift提供的客戶端工具(rhc)來創(chuàng)建應(yīng)用,具體的使用可以參考OpenShift的官方文檔
  3. 本地生成ssh公鑰私鑰,將公鑰導(dǎo)入注冊的應(yīng)用;
  4. ssh訪問應(yīng)用;
  5. 在openshift的應(yīng)用上生成ssh公鑰私鑰,注意~/.ssh/下無寫權(quán)限,所以將公鑰私鑰生成到$OPENSHIFT_DATA_DIR目錄下;
  6. 將公鑰分別導(dǎo)入到githubcoding的賬戶下;
  7. 從coding簽出最新的代碼
    cd $OPENSHIFT_DATA_DIR
    ssh-agent bash -c 'ssh-add /var/lib/openshift/[openshift分配的名字]/app-root/data/.ssh/id_rsa; git clone git@git.coding.net:figotan/figotan.git'
    cd figotan
  8. 跟蹤并獲取coding上最新的代碼
    git branch --set-upstream-to=coding-origin/coding-pages coding-pages
    ssh-agent bash -c 'ssh-add /var/lib/openshift/[openshift分配的名字]/app-root/data/.ssh/id_rsa; git pull origin coding-pages'
  9. 添加github遠(yuǎn)程代碼倉庫
    git remote add gh-origin git@github.com:figofuture/figofuture.github.io.git
  10. 編寫php api接口并部署
    安裝OpenShift客戶端工具rhc,rhc是用ruby編寫,所以安裝前請先安裝ruby的開發(fā)環(huán)境sudo gem install rhc
    輸入OpenShift用戶名和密碼 rhc setup
    獲取應(yīng)用對應(yīng)的git地址 rhc app show [前面步驟申請的openshift應(yīng)用名稱]
    簽出代碼 git clone [申請openshift應(yīng)用分配的git repo地址]
    示例參考
<?php
if( $_GET['key'] == 'KEY' ) {
    echo shell_exec('cd $OPENSHIFT_DATA_DIR/figotan;ssh-agent bash -c "ssh-add /var/lib/openshift/[openshift分配的名字]/app-root/data/.ssh/id_rsa; git pull origin coding-pages";ssh-agent bash -c "ssh-add /var/lib/openshift/[openshift分配的名字]/app-root/data/.ssh/id_rsa; git push gh-origin coding-pages:master"');
}
else {
    header('HTTP/1.1 400 Bad Request');
    echo <<<HTML
// Fallback
HTML;
}

提交推送后OpenShift自動(dòng)部署 git commit && git push

  1. 在coding.net項(xiàng)目中設(shè)置webhook,記得把KEY設(shè)置成一串隨機(jī)的字符串,為了一定的安全性考慮。記得上面步驟中php api源碼里的KEY和webhook中的KEY內(nèi)容一定要一致。

注意的坑

  • 因?yàn)樵趏penshift里用戶主目錄下的.ssh只讀不可寫,所以只能在其他地方生成ssh公鑰私鑰,推薦在$OPENSHIFT_DATA_DIR目錄下,這樣,用git獲取github或者coding上的代碼就需要采用如下這種形式:
    ssh-agent bash -c 'ssh-add /var/lib/openshift/[openshift分配的名字]/app-root/data/.ssh/id_rsa; [需要使用ssh方式執(zhí)行的命令]'
  • 從coding觸發(fā)webhook有一定的失敗幾率,如果失敗,可以手動(dòng)觸發(fā)一遍,有兩個(gè)辦法:
    • 在瀏覽器里直接訪問webhook的網(wǎng)址
    • 登陸到coding的web后臺(tái),在項(xiàng)目的webhook設(shè)置的地方點(diǎn)擊測試按鈕,在發(fā)送紀(jì)錄可以跟蹤到發(fā)送狀態(tài)

參考資料

感謝網(wǎng)絡(luò)上各路英雄的幫助:

Jekyll自建博客同時(shí)托管至 Github 與 Gitcafe

解決百度爬蟲無法抓取github pages

解決 Github Pages 禁止百度爬蟲的方法與可行性分析

利用 CDN 解決百度爬蟲被 Github Pages 拒絕的問題

解決 Github Pages 禁止百度爬蟲的方法2--從gitcafe遷移到coding.net

GitHub 實(shí)時(shí)同步到 GitCafe,并解決百度無法抓取 GitHub Pages 問題

知乎上各種解決方案的匯總

原文請猛戳http://www.figotan.org/2016/03/29/how-to-speed-up-your-blog-using-duplex-git-pages/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,641評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內(nèi)容