背景
經歷過幾次 莫名其妙 的被 封號 / 鎖文章 之后突然意識到,如果有一天 簡書 這個平臺倒了,那么這些積累的文章可能就化為烏有了,所以就有了遷文章的想法。
傳送門:https://github.com/anyesu/blog/issues
當然,也可以訪問這個域名:https://anyesu.github.io
新平臺選擇
本來,寫文章只是記錄和分享一些經驗,以作為技術博客的,所以也沒打算換其他花里胡哨的平臺。但是,如果自己搭建一個個人博客還要選框架、選主題、買服務器、買域名,還要自己維護,麻煩的不行。無意間發現還有在GitHub issue 上寫博客的操作,試了下真的不錯,是個天然的博客系統:
- [x] 一個 issue 就是一篇文章
- [x] 天然的評論系統,方便做技術上的探討,而且能評論的人或多或少懂一些基礎知識
- [x] 支持 Markdown 語法,支持預覽效果
- [x] 可重復編輯,可查看版本變更記錄
- [x] 可以添加標簽對文章分類,可以置頂
- [x] 可以訂閱,可以接收到郵件通知
- [x] 文章中涉及到的代碼可以直接放到對應的倉庫下
- [x] 可以點贊,發 emoji 圖標
- [x] 可以使用 GitHub 提供的 API ( v3 / v4 ) 抓取數據,就不用自己再去造數據存儲的輪子了
- [x] 簡潔
當然,不足之處也有:
- [ ] 沒有獨立域名,不能自定義樣式
- [ ] 不能限制其他人隨意發 issue
- [ ] 雖然可以訂閱,但是使用不當也會產生很多噪音
- [ ] 不利于推廣和分享,不是圈內人估計是看不到了,隨緣吧
對于我來說,作為技術博客,更應該關注內容的輸出而不是其他花里胡哨的東西,所以權衡之后這個方案還是利大于弊的。
遷移過程
新建一個倉庫,在里面添加 issue 就可以開始創作了,這里就不講這些細節了。
由于 簡書 的 Markdown 方言不是很標準,之前為了展示效果做了些特殊處理,直接拷貝內容到 GitHub 上就會發現各種樣式錯亂,所以需要先重新整理下。這里,我推薦一個編輯器 - typora,把文章內容拷到編輯器上編輯后再發布到 GitHub 上看效果,順便把 簡書 也更新下。
文章同步好,之后就是閱讀了,這里推薦一個 Chrome 插件 - 簡悅,具體效果自行體會吧。
自定義 UI 界面
上面提到一個樣式的問題,這里我就拿別人現成的模版 - Blogsue 先用著,步驟如下:
# 下載項目
git clone --depth=1 https://github.com/coderming/blogsue.git blog
# 進入項目
cd blog
# 自行編輯配置文件 index.js 修改其中的配置
cp src/config/index-example.js src/config/index.js
# 安裝依賴
npm install
# 構建
npm run build
# 運行
docker run --name=blog -d -p 8080:8080 -v `pwd`:/app node:alpine sh -c "node /app/scripts/prod-server.js"
這個項目自身提供的 Docker 部署方式是在鏡像中 構建 項目的,如果修改了配置又要重頭開始 構建 了,考慮到 npm 的速度,還是推薦在容器外 構建,然后用純粹的 node 鏡像來啟動:
docker run --name=blog -d -p 8080:8080 -v `pwd`:/app node:alpine sh -c "node /app/scripts/prod-server.js"
如果不想安裝 node 可以使用 Docker 的 node 鏡像來代替,比如:
docker run -it --rm -v `pwd`:/app node:alpine sh -c 'cd /app && npm config set registry "https://registry.npm.taobao.org/" && npm install'
注意:一些低配服務器可能會出現 IO 卡死的現象
這個項目風格比較簡潔,配置起來也比較簡單,還接入了 Gitalk 評論系統,算是比較完整了,不過還是有一些問題需要改進,等后面有空了再自己寫一個吧。
關于域名
買域名的話還要買服務器,國內的域名還要備案,也沒空去折騰,先用著 GitHub 送的免費域名 GitHub Pages。原理的話,可以理解為 GitHub 提供一個 web 服務器 ( 比如 Nginx ),然后將給你的 三級域名 解析到對應的目錄下,也就是你的代碼倉庫。
接著上面 構建 的步驟:
# 進入項目的構建目錄,就是把里面的靜態文件上傳到 GitHub 倉庫中
cd build
# 初始化本地 Git 倉庫
git init
# 設置用戶名 ( 在 git log 中顯示)
git config user.name xxx
# 設置郵箱 ( 在 git log 中顯示)
git config user.email xxx@email
# 設置換行符轉換方式,以 LF 格式保存到倉庫中
git config core.autocrlf true
# 將當前目錄下所有文件加入到版本控制
git add --all
# 提交文件到本地倉庫并備注為 init
git commit -m "init"
# 添加遠程倉庫 ( 需要在 GitHub 上先新建一個倉庫:xxx.github.io )
git remote add origin https://github.com/xxx/xxx.github.io.git
# 將本地倉庫推送到遠程倉庫
git push -u origin master
執行完上面的步驟,瀏覽器訪問 https://xxx.github.io 看下效果。
需要注意的地方:
倉庫里放靜態文件 ( html / js / css / 圖片 ),因為不提供額外的服務器去執行代碼,所以動態腳本就免了
如果你的用戶名為 xxx ,你的倉庫名為 blog,那么對應的 url 為 https://xxx.github.io/blog,如果想要對應到根路徑 / 下,需要新建一個名為 xxx.github.io 的倉庫
由于使用靜態頁面,每個文件對應一個 url ,但是由于文章內容不屬于倉庫文件的一部分,所以每篇文章不能擁有獨立的 url ,需要實現 hash 模式 的前端路由,像上面用到的 Blogsue 使用 history 模式 的前端路由,頁面跳轉是沒有問題的,刷新頁面就會 404 了
TODO
- [ ] 寫個工具來做自動同步,在 簡書 上新增編輯文章,然后定期同步到 GitHub
- [ ] 自己寫一個 UI 界面
- [ ] 獨立的域名和服務器
- [ ] GitHub 的 API 會限流,需要做優化
最后
來 簡書 幾年了,最初的時候真的是博客界的一股清流,但是現在體驗卻越來越差了。界面一成不變,反饋沒動靜,投稿幾個月不審核,凈弄些花里胡哨的東西,現在還會亂封號,也不說明原因,另外,各種 雞湯 和 標題黨 泛濫。作為內容平臺,我對這種運營模式不做評判,但是作為技術博客,顯然已經有些脫軌了,也差不多是時候說再見了。