來自未來的復古網路協定:Gemini Protocol
本文描述的 Gemini 協定是一個開發於 2019 年的網路協定,而不是最近 Google 釋出的大型語言模型(LLM),以及其服務。
本文介紹 Gemini 協定以及其應用,並附上本站開發 Gemini 協定鏡像站的過程與細節
什麼是 Gemini 協定
請容我直接引用官方網站的介紹的翻譯(by Claude 3.5 Sonet)
Gemini 是一項嶄新的網際網路技術,支援互相連結的電子文件圖書館。這個概念並非全新,但也絕非過時。它是永恆的,值得我們以一流的理念來對待,而非視為殘存的邊緣案例。Gemini 並非為了創新或顛覆而生,而是為那些認為網路已經被過度顛覆的人們提供一個喘息之地。我們無意改變世界或摧毀其他科技。我們的目標是建立一個輕量級的線上空間,在這裡文件就只是文件,以維護每位讀者的隱私、注意力和頻寬。
技術上來說,你可以把他想像成一個簡化版的 HTML,甚至是傳輸純文字的協定的感覺,你能夠以更低的頻寬上網,因為網頁不會有 JavaScript 和 CSS,幾乎只有內容本身。
在頻寬越來越高的現在反而打造這種極簡的協定,也算是某種叛客精神了吧。
要怎麼使用 Gemini 協定來上網?
首先當然是安裝好用的客戶端軟體,這裡我推薦 Lagrange,手機雙平台,桌面跨平台,都能正常使用。以下的操作範例就會使用 Lagrange 來示範。
如果想嘗試純文字介面的 Gemini 客戶端,我推薦 ncgopher 和 Amfora。不過大部分的 TUI Client 在 Hype 一過,都進入了維護模式,不然 MVP 最少功能實作完就沒有然後了 XD。如有需要,大家可以到 awesome-gemini 看看有沒有新的客戶端可以用。
第一次連線
請在網址輸入 gemini://txt.yukai.dev
,成功連線後應該會看到下面的畫面,會有很多方塊字是正常的,因為還沒安裝中文字體。
安裝 NotoSans 中文字體
請在網址列上輸入 gemini://skyjake.fi/fonts/cjk/
,並點選下方的 Noto Sans CJK - 19MB 下載字體。
下載完成後,會跳出字體安裝畫面。請繼續選擇 **Install “noto-sans-cjk”。
安裝完成後重新整理頁面,本站 Gemini 鏡像站的中文字體,就能正常顯示啦!
建立 Gemini 與簡易 HTML 的 Daily Oops 鏡像站
Daily Oops 主站的架設方式就是 Next.js SSG + HackMD Host Markdown + HackMD API 產生靜態的 React.js 網頁。 [1]
以此為基礎,為了讓本站支援 Gemini 協定,我總共做了兩次嘗試。
第一次嘗試:用 agate 架設在 fly.io
詳細的實作細節可以查看:commit 10bd36
時的 Repo。步驟大致如下:
- 從 HackMD 拉下 Markdown 列表
- 用 [gemgen][gemgen] 轉換 Markdown 成 gemtext(Gemini 協定用的純文字格式)
- 編寫 fly.io 能用的 Dockerfile
- 用 AWS CLI 同步 gemtext 的資料夾到 s3 (
aws s3 sync
) - 用 [s3fuse][s3-fuse] 掛載 S3 成 container 內的目錄
- 用 agate 架設該含有 gemtext 的目錄
- 用 AWS CLI 同步 gemtext 的資料夾到 s3 (
用這個方法,我就可以在有新文章的時候跑一次同步,就可以更新線上的文章,也不用重新部署伺服器。
不過這個方法也有幾個缺點:
- fly.io 屬於 PaaS,一般來說比較貴
- AWS 在本機跑,有時會忘記
其實最影響我決定的還是免費仔的部分。後者 S3 同步部分要搬到 CI 上也不是不可,但相依於要錢的 fly.io (每個月含 IP 約 4 USD),然後只為了架一個精簡協議的網站,想想就不怎麼划算 XD
第二次嘗試:同時產生 Gemini 網站與精簡版 HTML
在得知開源軟體倉庫服務 SourceHut 也提供了免費架站 SourceHut Pages 後,我就決定把 Gemini 站移到那裡。
整體的流程還是和之前差不多:
- 從 HackMD 拉下 Markdown 列表,並用 [gemgen][gemgen] 將 Markdown 文章轉換成 gemtext (之前的第一二步驟)
- 附加部分的詮釋資料(metadata)到 Markdown 裡,然後用 Hugo 生成簡易版 HTML 的網站
- 推送到 SourceHut Pages 上
改用 SourceHut 倒是多了些好處:
- 免費,還可以同時 Host HTML 和 Gemtext
- 不用自己維護 Dockerfile 檔。雖然 Docker 能自訂的地方比較多,但推上 fly 還要等 build,不若 SourceHut 精簡快速(tar & upload)
不過後來我還是為了支持 SourceHut 購買了每月兩美金的贊助方案就是了。贊助和買服務的感覺還是不太一樣 XD 平平都是掏錢,還有個心情的差異嘛。
至此,只要再綁上 Netlify postbuild hook,我就能 Trigger 一次 rebuild,亦次部署主站,以及雙協定 Gemini/HTML 支援的精簡版鏡像站啦(還沒實作)
所以你到底為了什麼要做 Gemini 協定的分站
因為潮啊 (1s)
常常會看到許多大神的個人網站是極簡風格,用簡單的 HTML 加上等寬字體設定,有時甚至連 CSS 也沒有。極簡風格的部落格一直在我的願望清單裡,但我又想要保有好看的版本,對,就是「我全都要」。
這次實作的鏡像站解法,同時保有最少的維護成本,也有最大的掌控性,如果未來有更好的做法會再更新的!
可參考本站文章 把 HackMD 當做部落格後臺 ↩︎