前言#
在兩年前的這一篇「2022 年了,聊聊我為什麼還在寫博客」,我聊到了我寫博客的緣起、初衷和搭建方案。
兩年多過去了,初衷仍在,寫作也依然堅持下來了,雖沒有完成自己所計劃的周更,但多少也積澱了些文字。
經歷了很多事,似乎漸漸轉向了一個「周報博主」,寫的內容和風格已經大不同。技術和工具效率主題更少了,分享生活和思考更多了;少了些通宵兩天更新四篇技術教程的衝勁,卻多了些通過筆觸表達情感後的自洽;收到很多關於博客搭建和技術教程的感謝依然會很開心,卻也更珍惜和素昧謀面的大家交心的感動。
周報博主#
可能是有一次開會閒聊 xLog 未來的發展,有位同事突然 cue 我說,你作為一個「周報博主」有什麼想法,我一愣,這個稱呼倒是第一次聽到,翻了翻主頁,確實。
之前一直自詡是技術博主、工具效率博主,最後留下內容最多,給大家印象最深的似乎還是周報,也不錯。
開始寫周報似乎是「Homura」組織了一個周報監督小組,當時不論是在推特還是獨立博客群體中都還是個小透明,也希望有更多人進行抱團和交流,當時會每周把自己的周報丟到群裡,會有互相被卷到,也有對於他人生活狀態的關心,很開心。
後來大家都經歷了許多生活的工作的變動,群裡最後的消息停留在了 23 年 1 月,但那依然是我很快樂的一段時光,也是我後來能繼續寫周報的動力,因為我知道,即使分享的只是生活的瑣碎和一些不成熟的小想法,依然有人在認真讀你的文字。
之前有一次收到 Randy 的催更,他說其實沒必要把它定義為周報,不然常常會有壓力和束縛,不過我反倒依賴這種輸出倒逼輸入的模式,這樣有了周報作為一個結果導向,才會更有動力把這周過好。
雖然我常常重新定義周就是了。
獨立博客#
比起編排精美的書刊雜誌,我更享受於訪問他人的博客網站,站名名稱、主題配色、配樂排版都更真實具體地呈現了一個人格化的存在,而在閱讀博文時,我也常常會視為一次穿越時空的對話,會想像寫下這些文字碎片的作者當時是怎樣的心情,有時甚至也會帶些頑皮地腦補他是一個怎樣的人,此刻在做些什麼。
獨立博客其實是一個說大不大說小不小的圈子,兩年過去,我反倒覺得開始搭博客、寫博客的人漸漸變得多了,也有了更多有意思的高質量內容。
相比起其他不論是粉絲積累還是互動都更為方便的成熟內容平台來說,不僅僅是平台和寫作形式上的獨立(我其實也願意稱在 mastodon 或是 misskey 上認真分享內容的人為獨立博客作者),而是思想的獨立,即好的文章不止授人知識,還引人思考。
還跟 Randy 聊到想為獨立博客做一些事,以刊物的形式收錄這一段時間內讀到的好的文章並為之作序推薦,其實已經籌備好了第一期,但由於兩個人錯峰的忙碌和更專注地做 EpubKit 產品,遲遲未能發布,這也是希望能夠在未來某個節點能夠持續做下去的事。
博客系統#
這是兩年前寫過的幾篇關於博客搭建的文章:
- 2022 年了,聊聊我為什麼還在寫博客
- 免費的個人博客系統搭建及部署解決方案(Hugo + GitHub Pages + Cusdis)
- Hugo + GitHub Action,搭建你的博客自動發布系統
- 從零開始搭建一個免費的個人博客數據統計系統(umami + Vercel + Heroku)
- 輕量級開源免費博客評論系統解決方案 (Cusdis + Railway)
主要是圍繞著我使用 Hugo 這一靜態網頁生成器(SSG)搭建個人博客及一些周邊服務的一些記錄,也看到很多人通過各種聯繫方式加到我說根據這一系列教程成功擁有了自己的博客,很開心能夠為博客這一已經有些式微的創作方式做出一些小小的貢獻。
當時寫的時候對自己的整套方案很滿意,然而時隔兩年回頭看了下。
- 博客本體:Hugo 本體沒變,部署方案: GitHub Pages + Cloudflare CDN -> Cloudflare Pages
- 評論系統:Cusdis -> Remark42,部署平台:Railway -> Vercel + Supabase -> fly.io
- 統計系統:Umami -> goatcounter,部署平台:Vercel + Heroku -> Railway -> Netlify + Supabase -> fly.io
- 圖床系統:GitHub + jsDelivr -> 阿里雲 OSS -> VPS 上自部署的 Chevereto + PicGo -> Cloudflare R2 + WebP Cloud + PicGo
- 內容搜索:無 -> Pagefind 靜態搜索
更換的原因很多,有些是由於 Heroku 和 Railway 漸漸取消了免費計劃,有些是由於開源項目更新少了缺少功能,也有些單純是自己想折騰一下更輕量些。
想起來當時寫這套系列教程的時候主要就是覺得網上能夠搜到的方案和教程零散且常常落後,於是想給想搭建博客的讀者一站式搭建起來的可行方案,發布後收到了許多人的反饋,有些內容也早該更新,卻一直拖到現在才開始重新寫,很惭愧。
下文會對當前的方案作一些介紹,後續更新後的系列文章完成後也會追加鏈接。
博客本體#
我使用 Hugo 這個靜態網站生成器來搭建我的個人博客,使用並改造了一個比較 retro 的主題「hugo-theme-den」。
大體的流程可以參看「Hugo + GitHub Action,搭建你的博客自動發布系統」這篇文章和「GitHub - yu-blog」這個倉庫。
加了一些每天自動更新 About 頁面的 GitHub Actions 自動化操作,並且由於 GitHub Pages 托管的網站從國內訪問速度幾乎不可用了,遷移到了 Cloudflare Pages,免費且體驗感好了很多,其他幾乎沒什麼改動了。
其實倒也不是沒想過換框架,之前看到「Owen」和「PJ Wu」使用的 Zola 就有些眼饞,甚至也有想過像「槿呈 Goidea」或是「Innei」一樣自己寫一個。
不過冷靜下來一想,自己現在網站積累了不少文章,要是想要保留原有路徑免不了一番折騰,再加上確實很喜歡現在的主題,有什麼想法乾脆就直接去定制和改動主題了,還是少花一些心力在折騰平台,多寫些博文比較重要,不然多少有點買櫝還珠之嫌,遂作罷。
評論系統#
在博客誕生之初直到今年四五月我一直使用的都是 Cusdis,整整用了三年。
時至今日依然是十分值得推薦的方案,輕量,方便自部署,風格也簡約好看,搭建教程參看「輕量級開源免費博客評論系統解決方案 (Cusdis + Railway)」。
不過鑑於 Railway 從去年 8 月起已經取消了 Free Plan,如果依然想完全免費使用,可以使用 Vercel/Netlify/Zeabur 免費部署主項目,並在 Supabase 上部署一個免費的 PostgreSQL 數據庫實例,把鏈接作為環境變量傳入 Cusdis 服務中即可,其他流程大同小異。
最近有一次由於更換數據庫 URI 時 Vercel 部署一直報錯,再加上確實需要一些新的功能,於是下定決心從 Cusdis 遷移,調研了一圈後選擇了 reorx 在「更換博客評論系統」一文中最後選定的 Remark42。
單純就配置選項來說比起 cusdis 還是豐富了不少,目前配置了常用的幾種社交賬號登錄(GitHub、Twitter、Telegram、郵箱)、可以匿名評論、支持郵件訂閱回覆提醒並且也設置了 TG bot 提醒,並且部署在 fly.io,go 單二進制 + 數據庫單文件,很舒服的解決方案,完成博文後會在這裡更新教程鏈接。
數據統計系統#
我之前自部署了一個 Umami(參看教程「從零開始搭建一個免費的個人博客數據統計系統(umami + Vercel + Heroku)」不過後來由於 Heroku 取消了免費 Plan,我最後折騰一圈,選擇了 Netlify 部署服務 + Supabase 部署 PostgreSQL 數據庫實例部署的方式,其餘流程依然適用。
不過一方面因為我部署得比較早,有一個大版本無法升級,以至於一直停留在自己 fork 的一個舊版本上,另一方面確實也漸漸覺得這種服務和數據庫需要分離的方式免不了因為平台規則變動而頻繁遷移,有些太重了,所以最後改為了 goatcounter,同樣是 go 單二進制 + sqlite 數據庫單文件部署在 fly.io,又是很舒服的部署方案,等更新博文後同樣會在這裡更新教程鏈接。
另外就是依然使用 Google Console 來統計分析我的訪客信息與搜索權重。
這個結果很有參考性,我發現一篇關於終端對比的文章「Warp,iTerm2 還是 Alacritty?我的終端折騰小記」讓我持續不斷地有通過搜索引擎來的訪客,另外的就是關於個人博客和搭建的系列文章了。
圖床系統#
兩年前我其實還沒怎麼關注圖床的問題,圖片都是直接丟在 GitHub 倉庫裡,並且使用 jsDelivr 作為 CDN 加速(後來國內訪問也幾乎不可用了),不過隨著文章數量增多,常常有身邊的朋友告訴我說我的博客圖片加載不出來,想着還是要兼顧一下閱讀體驗,於是調研了一圈方案。
先選擇了阿里雲 OSS 存圖,電腦使用 PicGo 上傳,方案挺好的,前幾個月也沒什麼問題,直到 23 年初有幾篇文章流量比較大,看着月賬單上漲的勢頭,頓感貧窮。
於是在線路還不錯的搬瓦工伺服器上自建了 Chevereto 圖床,同樣配合 PicGo 的插件進行上傳,穩穩地用了一年半。但自己對於自部署服務的穩定性和數據的珍貴性還是有些大意,前幾天伺服器突然掛了,內核報錯直接無法重啟,服務掛了倒還好說,但是我這一年半多的數據沒有備份,也無法導出。
工單聯繫技術支持,一天只回復了我兩次,一次讓我重啟,一次建議我聘請一個網絡管理員排查。只能自力更生,翻遍了網上各種方案,折騰了一天終於算是解決了,但這一次的教訓讓我對與有重要數據的服務部分和自部署穩定程度都有了全新的認識,因此不敢再用原方案。
最後採用了 Cloudflare R2 對象存儲來存放圖片,每個月 10G 的免費額度很足夠,大廠的服務與數據安全也有保障。為了優化用戶的訪問,又使用了一個「WebP Cloud」服務對 R2 的圖片進行代理,在代理層面進一步減小圖片體積,雖然對於國內用戶來說速度肯定還是比不上阿里雲 OSS 這種線路,但在不用備案、穩定且免費的綜合條件下,這是我能想到的最好的方案了。
在電腦端通過 PicGo 客戶端幾乎一鍵上傳並生成博客直接可用的 markdown 圖片鏈接,配置完成後使用起來很順滑。
圖床搭建教程見這篇:
內容搜索#
之前我的博客是沒有內容搜索功能的,本來文章也不多,再加上靜態博客沒有後端,實現起來感覺也不容易,因此一直沒支持。但隨著後來有時候要查閱自己之前的文章只能用 VS Code 在一堆 markdown 文件中搜索的體驗後,覺得還是很有必要的。
調研了一圈使用了 Pagefind 這一項目,基於靜態文件的搜索庫,無須引入或是托管其他後端服務,我只需要在每次發布博客的 CI 中構建全博客的索引文件,就能夠很方便地支持搜索,中文搜索效果相對弱一些,不過也是夠用的程度,基本上對主流的博客框架都支持。
這部分可以參照「如何透過 Pagefind 在 Zola 產生的靜態網站裡加入搜尋功能」這篇文章,我也正在著手寫基於 GitHub Actions 更詳細的教程,後續會更新在這裡。
總結#
2024 年了,我大抵還是個愛好寫作的人,從早些年的書評影評、技術教程到現在的生活周記,似乎所見所思只有落筆寫下才會轉為觸手可及的真實。而隨著上百篇文章的沉澱,個人博客站點也成為了我在這世界的另一個載體,源於我卻又獨立於我,有時是隨手可拾起的記憶碎片,有時又是自己精神的避難所。
也希望你們能夠繼續在我的博客中發現一些有趣的東西,或是知識,或是啟發,抑或是一點點小小的共鳴,或許在某個時刻,你們也會想擁有自己的博客站點,讓自己的所思所想在這個世界上留下一些痕跡,生根、發芽,也希望這套系列教程能夠提供一些幫助。