--- date: "2022-05-28" --- # 在 Obsidian 設定免費的拼字檢查:使用開源軟體 LanguageTool 並部屬至 Railway.app > TL;DR > 1. fork 我修改的 [LanguageTool Docker](https://github.com/Yukaii/docker-languagetool) > 2. 去 Railway 部屬這個 Repo > 3. 更新 Obsidian LanguageTool 的伺服器設定 最近想試著調高點發文頻率,原因還是堆積的草稿太多了。以前不能接受未完成的東西出品,但想想,程式碼都可以 **Release early, release often** 了,同樣對待寫作也未嘗不可,這裡也只是我個人的部落格罷了,也沒走什麼 Launch 流程,比如發送電子報、到臉書社團發文貼連結等。 ## 在 Obsidian 使用免費的 LanguageTool 來做拼字檢查 回歸標題,身為一個專業免費仔,該如何在 Obsidian 裡使用拼字檢查呢?平常有在用 Grammarly 做簡單文法檢查的我,馬上搜尋到這篇官方論壇的討論:[Any way to integrate Grammarly as plugin?](https://forum.obsidian.md/t/any-way-to-integrate-grammarly-as-plugin/19050) ,裡面這張 LanguageTool 的截圖馬上引起我的注意: ![](https://hackmd.io/_uploads/SJgp8H1dq.jpg "[Screenshot of Obsidian LanguageTool plugin](https://forum.obsidian.md/t/any-way-to-integrate-grammarly-as-plugin/19050/3)") 搜尋了一下 LanguageTool,卻發現有以下[限制](https://dev.languagetool.org/public-http-api): > * 20 requests per IP per minute (this is supposed to be a peak value - don’t constantly send this many requests or we would have to block you) > * 75KB text per IP per minute > * 20KB text per request > * Only up to 30 misspelled words will have suggestions. 雖然限制挺寬鬆的,簡單寫些文件應該不容易超過限制,但**身為一個專業免費仔**,當然要解除限制,並且還不能花到任何一毛錢,這才是所謂的~~專業~~。 ![](https://memeprod.sgp1.digitaloceanspaces.com/user-wtf/1586341731827.jpg "專業人士") ## 部屬 LanguageTool 到 Railway.app 前陣子 Heroku [大逃難](https://status.heroku.com/incidents/2413)時,[敝司](https://hackmd.io)也參了一腳,當時研究了幾個 Heroku 的替代品,除了很多人推的 [Render](https://render.com/),另一個呼聲也很高的服務就是 [Railway](https://railway.app) (同樣以 R 為開頭,所以現在是要抱團跟 [Raycast](https://yukai.dev/blog/2022/05/20/raycast-for-developers) 組一個 R-League ㄇ)。 LanguageTool 已經有貢獻者打包了自己的 [Dockerfile](https://github.com/Erikvl87/docker-languagetool),不過像 Railway 這種 PaaS 平臺,服務跑起來的 Port 都是執行時才會指定,一般也會用 `$PORT` 這個環境變數來指定([12 factor](https://12factor.net/) 留下來的優秀傳統),所以這裡就要來修改一下 Dockerfile 啦。 詳細請看 fork repo 的 commit [`fb9b812`](https://github.com/Yukaii/docker-languagetool/commit/fb9b812406fcffcb1049a036ad09dda1c8f8edbc),就是把 Port 拆出來而已,也有參考 [Railway 的文件](https://docs.railway.app/deploy/docker),裡面提到 Railway 會把環境變數用 `ARG` 傳入。 修改完之後接續**異常順暢**的 Railway 部屬流程,設定好 Repository 到我 fork 的 [LanguageTool Docker Repository](https://github.com/Yukaii/docker-languagetool)(需要的人請自己 fork 一份),跑起來服務,並在 [Obsidian LanguageTool Integration Plugin](obsidian://show-plugin?id=obsidian-languagetool-plugin) 裡設定好新的伺服器位址,就可以免費用自架的 LanguageTool 啦! ![](https://hackmd.io/_uploads/HkYRUrk_c.png "LanguageTool 在 Railway 跑起來的 Log,不得不說 Railway 界面體驗也是 Top-tier 的") ![](https://hackmd.io/_uploads/S1bJwH1uq.png "在 Obsidian 裡使用 LanguageTool") ### 備註 1. Railway Starter Plan 其實有 500hr 的限制,如果一直開機換算時數只有 20 天而已 2. 不知為何 LanguageTool Service 常常會自己 Crash,可以把 Auto-Restart 開啟。不過就要注意前面一點時數的問題 ![](https://hackmd.io/_uploads/SktiaWaAq.png)