#如何在 macOS 一開機就自動執行 ngrok ?
ngrok 是一個可以讓你的電腦有一個暫時的 domain name,無論你的 IP 是什麼,都可以將指定的 port 轉成像是下面的網址。
http://92832de0.ngrok.io
這東西的用處很多,目前看到好像因為開發 ChatBot 的時候需要 domain name 而非 IP,因此這個服務瞬間大紅。
當然若你需要固定的 domain name,它也有付費版本。
根據 ngrok 的文件,你在使用之前必須先給予 ngrok 你的 authtoken 指令大概如下
ngrok authtoken <YOUR_AUTHTOKEN>
完成這個步驟後,再輸入你要的指令大概如下即可
ngrok http 80
我架了一台 Jenkins 需要在開機的時候執行 ngrok 的指令,就是要執行上面這行
上網花了一點時間找到了方法,這邊分享一下我的實際作法
因此我要把這些動作轉成自動執行的行為,流程大概如下
-
在 /資源庫/LaunchDaemons/ 下面,製作一個 plist,開機的時候 macOS 會自動執行資料夾下面的所有 plist
-
在 plist 裡面指定要執行某個 .sh 檔
-
在 .sh 裡面呼叫 ngrok 的指令
-
登入 ngrok 官網看 status 上面的網站是什麼(我其實想要 webhook 到 slack 之類的通訊軟體,但我還不知道怎麼做)
內容大概如下
https://gist.github.com/6707ef00c5779a947abff0f8f9ce479e
Label 表示事件名稱,建議可以跟檔名一樣 - com.ngrok.onstartup.plist,需要 unique 的字串供辨識
Program 表示執行的內容,將 .sh 的路徑寫進去,由於我是希望系統直接執行而非依賴於使用者,因此放在 /Users/Shared 下 (但官方寫要用 ProgramArguments),這邊我還需要再研究
KeepAlive 表示這個服務是 always be running 或是 launches on-demand,依我們的需求是 true
完成後就放到 /資源庫/LaunchDaemons/ 下
(可能需要修改檔案的權限為 root/wheel,這邊我有點忘記)
內容大概如下
https://gist.github.com/c6d87459f80e7b379f8f69ea0009775f
/Applications/ngrok 是指 ngrok 這個指令的路徑
http 是 ngrok 的指令,可以 start an HTTP tunnel
-region ap 是指透過位於 Asia/Pacific 的中繼伺服器來溝通
-config /Users/Shared/.ngrok2/ngrok.yml 是指 ngrok.yml 這個組態檔的路徑
由於我是希望系統直接執行而非依賴於使用者,因此放在 /Users/Shared 下
完成後就放到 /Users/Shared/ 下
80 是指要開放的 port 為何
其實 yml 檔裡面放的是 config 檔,只要簡單的寫以下的內容就好
https://gist.github.com/51dbd116bb8683f54ca79c1dd937b7ad
其實 ngrok 還可以更多細緻的設定,但由於目前還沒有相關的需求,所以沒有再深入研究。
如果有什麼更好的方法歡迎分享給我哦!