關於作者:程式猿石頭(ID: tangleithu),現任阿里巴巴技術專家,清華學渣,前大疆後端 Leader。公眾號後臺回覆關鍵字 “1024” 獲取程式設計師大廠面試指南。
圖:Drone promotions from SkyPixel
背景
石頭大約在 2010 年左右有了自己的第一個域名,也是從那個時候開始寫部落格的。至今確實有 10 年時間了。
最初玩 blog,其實更多的還是抱著學習的態度。比如剛學習完了 DNS 解析,HTML 語法,不 “實戰”一把麼?然後後續又陸陸續續把讀書筆記、課程總結都往部落格上放。
為什麼要寫 blog,石頭覺得有如下幾個好處:
可以把它作為整理學習筆記的地方,方便沉澱學習,就跟當初我開始玩一樣。更多的是寫給自己看,玩玩“建站”流程(獨立部落格),也算一個小技能。(要不要寫部落格看個人興趣,但學會總結沉澱是必須的)
“成就自己、幫助他人”。在日常工作中,你肯定也有通過別人的部落格解決了你的某個問題,這個時候“反哺”一下開放的網際網路也何嘗不是一件快事。當有人通過搜尋引擎檢索到你的內容並留言說感謝幫助他解決一個類似問題的時候,還是有一絲絲成就感的。
鍛鍊寫作能力。一個問題自己懂和把它講給別人懂,是兩個完全不一樣的概念。
打造個人 IP。例如著名的 coolshell,ruanyifeng 等,大部分人應該都知道吧?
賺錢。這個就不用多說了。說出來,你可能不信,就連我 10 年前沒啥內容的 blog,當初也有是有“外快”賺的:記得當初是給“友鏈”的方式導流,1 個月 5~10 塊,剛好能覆蓋域名、虛擬主機的費用,不過後來各種部落格搬家,也懶得折騰了。
...
通過這 10 年的摸索,石頭也嘗試過多種寫 blog 的方法。不過說來慚愧,貌似也沒什麼說得出的成績。
目前也積累了有 400+篇文章,不過感覺真正有質量的文章也就幾十來篇。折騰過很多 blog 程式,陸陸續續遷移了好幾個版本,歷史文章也”捨不得”丟棄,也一直保留。其實好多文章在我現在看來好像價值不大,但仍然捨不得拋棄,畢竟當初辛辛苦苦 po 出來的。感興趣的同學可以通過 “www.tanglei.name” 這個網址進行訪問。
下面以我的部落格演進之路為例,給大家介紹下常見的部落格玩法,供大家參考。
部落格演進之路
純 wordpress
wordpress 不做多介紹,是一套用 php 開發的 CMS,很多人的部落格都用這個。
下圖是我部落格最初級的版本,在相當長一段時間內也一直用這個主題。
Wordpress 部落格
“時光荏苒、歲月如梭”,上面的截圖也很有意思——
右上角的動態“騰訊微博”,不知道你有沒有用過?
左上角的 Rss 訂閱,現在不知道是否還有人用,用的人多嗎?反正我好久沒開啟我的訂閱文章了。
用 Wordpress 寫部落格,有一個缺點就是,每次寫需要登入後臺,排版、配圖等比較麻煩。並且還得掏錢買虛擬主機、自己運營維護wordpress 程式、MySQL 等。
再後來接觸到 markdown
這門標記語言,才發現這玩意太好用了,就一發不可收拾。一直用 markdown 寫作沿用至今。
wordpress + markdown 外掛
部落格主題想保留就一直還是用 wordpress,但有希望寫作用 markdown。
由於沒有找到合適的 wordpress 的 markdown 外掛,於是就自己寫了一個 markdown2wordpress(https://github.com/tl3shi/markdown2wordpress)。後端框架等仍然用 wordpress,繁瑣的排版等問題就直接交給 markdown,也不用登陸 wordpress 後臺進行調整等操作。
這個工具依賴於 python-wordpress-xmlrpc,一個 python 實現的 wordpress 的客戶端,可以方便呼叫 wordpress 提供的介面,markdown 的渲染依賴於 pandoc,程式碼高亮用的是 highlight.js
圖片用圖床的形式,或者直接以 github 外鏈的形式。
用這個工具又堅持了一段時間。
但石頭當初買的虛擬主機(共享型)還是多個人公用的形式,效能較差,網站就經常掛,一會虛擬機器掛了,一會MySQL又掛了,然後還中過木馬。實在是忍受不了了。
github page 服務
github page 服務 https://pages.github.com/,按照官網說的那樣,直接將原始檔託管在 Github 上,僅僅需要編輯、push即可,然後變化馬上就能體現了。
這樣不但省去了虛擬主機、MySQL 等費用,同時 github page 還支援自定義域名、git 版本管理,markdown 自動渲染簡直就是專門給程式設計師量身定做的(好像確實也是的)。
程式猿只用專注於寫 markdown 檔案即可,渲染 html 等都交給 gitub。
下圖是我搭建好後的一個截圖。
github和octopress配置
詳細過程可以參考下我的這幾篇 Blog:
GitHub搭建部落格教程:https://www.tanglei.name/blog/use-github-to-make-hello-world.html
也試試github+octopress:https://www.tanglei.name/blog/github-with-octopress.html
在搭建過程中,還會涉及到歷史文章的遷移等,感興趣的可以參考_最終還是放棄了 Wordpress_(https://www.tanglei.name/blog/give-up-wordpress-to-jekyll.html)。
github pages 服務的好處在於,博主們真正關注的只需要寫 markdown 就可以了(類似寫論文用 latex 一樣),根本不用去關注比如在 wordpress 後臺排版,傳圖片等等操作。
github pages + travis-ci
github pages 服務本身支援的部落格引擎比較少,比如希望一些定製化的外掛等,github pages 預設服務就不夠了。
但本質上講,github pages 服務就是提供了一個自定義域名解析到靜態 html 的 repo。markdown 轉 html 的這個過程, github 支援得不夠,可以通過其他的方式。
比如本地寫 markdown,然後本地安裝 hexo 等部落格引擎,渲染成 html 後直接 push 到 github page 的遠端倉庫即可。
我曾經也使用過多個部落格引擎,如下圖:
▲ jekyll部落格主題
▼hexo主題
這裡推薦一個工具 —— travis,它是一款免費的 CI 工具,能幫你做的事情是啥?就是上面你本地的流程可以交給它來做。現在我寫 blog 的流程是:
本地寫 blog,md 格式的。工具可以直接用之前推薦的 程式設計師利器 中的 markdown 寫作工具 Macdown 或者Typora。
git commit && git push 即可。
travis 開始工作,安裝 blog 程式,然後 build 靜態 html,最後 push 到指定的 github pages 倉庫。
貼一下我的 travis 配置,大家就知道是怎麼玩的了。
branches:
only:
- master
language: node_js
# v14/stable(2020-05) produces empty html https://github.com/hexojs/hexo/issues/4257
node_js:
- 'v13.8.0'
cache: npm
before_install:
- git config --global user.name "tangleithu"
- git config --global user.email [email protected]
install:
- npm install hexo-cli -g
- npm install
script:
- hexo clean
- hexo g
- git log | head -n 6
- export COMMIT=`git log | head -n 1`
- mv public .deploy && cd .deploy && du -sh
- git init && git add -A . && git commit -m "commit from travis, origin $COMMIT"
- git push --force "https://tl3shi:[email protected]/tl3shi/hexo.tanglei.name.git" master:gh-pages
通過上面的配置可以看出,其實做的事情就是安裝部落格程式 hexo,然後生成靜態 html,最後將本地生成的靜態 html 整體打包作為一個倉庫 push 到github pages 對應的倉庫。
下圖是 travis-ci 的配置頁面,可以配置比如只要有新的 commit push 即可觸發 CI 流程,進而更新部落格內容。
Travis 配置
別看整個過程看起來比較複雜,其實安裝等過程是可以 cache 的,一般而言,走完整個流程所耗費的時間也就 1-2 分鐘(如後圖所示),因為我的部落格內容“歷史包袱重”,可能耗費時間會更久,這時間大部分取決於部落格程式的處理流程以及最後 git 上傳過程。
下圖是構建歷史,構建成功與否會郵件方式通知到你,很方便。
Travis 構建歷史
藉助 travis 可玩的東西就多了,上面的 scripts 有足夠的靈活性,可以自己隨意定製。
比如,是不是可以同一文章多個平臺發。舉例,現在大家普遍玩法是各大部落格平臺同步發表。是否可以直接在 CI 流程裡面加 juejin、部落格園等 post 流程呢?
感興趣的朋友試試?(石頭好久都有這個想法了,但卻一直沒有付出行動)
解決 github 慢的問題
用 github 確實很方便,各種免費的服務白piao,但缺點也比較明顯,就是國內訪問比好慢。gitee 也提供類似的服務,但前面看了一眼,自定義域名好像要收費?
一個比較簡單的方法是用 CDN 來解決這個問題。blog 本身全是靜態資源,html、圖片等,很適合用 CDN 來加速。
在這篇 雲伺服器,域名備案及 CDN 服務體驗(https://www.tanglei.name/blog/try-qcloud-vm-cdn.html) 文章中,我記錄了之前具體的流程。
CDN 的工作流程就是你新增一個域名的 CNAME,指向 CDN 廠商的域名,所以使用者發起請求的時候實際是解析到雲廠商的 CDN 伺服器的,CDN 後臺配置一個源站點,例如 www.tanglei.name
,使用者請求到 CDN 伺服器時,如果沒有命中,則就去源站點請求並將內容快取至 CDN 伺服器。
以下是我之前測試 CDN 的一個效果截圖。
CDN配置效果圖
下圖是訪問一個 含有一些圖片的頁面的測試結果,其中:
請求
www.tanglei.name
會直接路由到 github pages 的檔案;通過
www.tanglei.me
會走雲廠商的 CDN;
CDN測試結果tanglei.name
訪問一個大小為 10KB 的頁面,基本在半秒就載入完畢了,對於個人部落格來講,已經很夠用了。上圖的結果中還有一些如 USA 的節點拉低了平均值,國外的一些節點還是走 github 更快。如果有需求做全球加速的話,還可以用比如敝司的全球加速服務哦(CDN包括海外眾多節點)。
最後
本文只是石頭在探索過程發現覺得合適自己的方法,每個人喜歡的姿勢可能不一樣,本文內容僅供參考,希望你能找到適合你的姿勢。
覺得本號分享的文章有價值,記得新增星標哦。別白 piao,需要來點正反饋,安排個 “一鍵三連”(點贊、在看、分享)如何? 這將是我持續輸出優質文章的最強動力。
關於作者:程式猿石頭(ID: tangleithu),現任阿里巴巴技術專家,清華學渣,前大疆後端 Leader。用不同的視角分享高質量技術文章,以每篇文章都讓人有收穫為目的,歡迎關注,交流和指導!公眾號後臺回覆關鍵字 “1024” 獲取程式設計師大廠面試指南。
推 薦 閱 讀
快快加入我們——“阿里雲-ECS/神龍計算平臺” 招人啦
面試官:會玩牌吧?給我講講洗牌演算法和它的應用場景吧!
有了這份程式設計師面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
同學,這裡有份程式設計師校招總結等你來取 | 面試10+公司,8 Offer的校招經歷分享
- 掃碼加入網際網路大廠內推群 & 技術交流群 -
後臺回覆關鍵字 “1024” 獲取程式設計師大廠面試指南