Skip to content

Instantly share code, notes, and snippets.

@rollr76518
Created October 18, 2018 13:58
Show Gist options
  • Save rollr76518/dba6089ce8e616f73fd9f92f99b50a5b to your computer and use it in GitHub Desktop.
Save rollr76518/dba6089ce8e616f73fd9f92f99b50a5b to your computer and use it in GitHub Desktop.

#如何在 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 的指令,就是要執行上面這行

上網花了一點時間找到了方法,這邊分享一下我的實際作法

因此我要把這些動作轉成自動執行的行為,流程大概如下

  1. 在 /資源庫/LaunchDaemons/ 下面,製作一個 plist,開機的時候 macOS 會自動執行資料夾下面的所有 plist

  2. 在 plist 裡面指定要執行某個 .sh 檔

  3. 在 .sh 裡面呼叫 ngrok 的指令

  4. 登入 ngrok 官網看 status 上面的網站是什麼(我其實想要 webhook 到 slack 之類的通訊軟體,但我還不知道怎麼做)

第1件事 - 製作 plist 並放到對應的路徑下

內容大概如下

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,這邊我有點忘記)

第2件事 - 製作 ngrokd.sh 檔並放到對應的路徑下

內容大概如下

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 為何

第3件事 - 製作 ngrok.yml 檔並放到對應的路徑下

其實 yml 檔裡面放的是 config 檔,只要簡單的寫以下的內容就好

https://gist.github.com/51dbd116bb8683f54ca79c1dd937b7ad

完工

其實 ngrok 還可以更多細緻的設定,但由於目前還沒有相關的需求,所以沒有再深入研究。

如果有什麼更好的方法歡迎分享給我哦!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment