一般在自己的開發測試階段,想要對外公開服務,很多人都會選擇使用Ngrok,相關的教學資源很多,尤其是LineBot相關的主題多半都有講到,難度相對不高,載下來開箱即用,所以今天不特別說安裝。
今天想說個新功能,跟介紹不同的用法,首先今年八月中的時候, Ngrok很佛的為我這種免費仔免費用戶推出了一個超級方便的功能,那就是免費的” Static domain ”!,所有註冊用戶都可以免費申請一個靜態域名來使用。
以往在開發的過程中使用ngrok做測試時,有時候手滑不小心把terminal關掉,或是需要關機重啟的時候,由於ngrok每次配發的domain都不相同,如果自己的服務有用到Webhook那就要一直去網站後台更新Webhook,像是Linebot Messaging API 的Webhook URL,平時只有用到一家的就算了,但如果牽扯很多家服務的話,光更新URL就是一件很崩潰的事情了。
那接著我們就一步一步來看看怎麼使用吧~
先登入ngrok
登入後可以看到,由於是新功能,所以有跳提示,我們就按下去
按下Create Domain
這樣就創建完成了,要像傳統那樣使用的話,可以直接複製使用,其實就只是要加上--domain
就可以了
可以看到我們免費的domain就在這邊~
如果你覺得每次開一個terminal放在那邊很佔位,我們可以透過ngrok提供的go SDK讓他與我們的linebot一起拉起來,先按到Your Authtoken的地方,記下我們的token
然後開一個新的main.go,先下載依賴
go get golang.ngrok.com/ngrok
開一個.env
檔案來儲存環境變數,自己開發測試使用,要記得.gitignore
要忽略掉他。
填上上面拿到的Your Authtoken 和 Domain
NGROK_AUTHTOKEN="YOUR_TOKEN"
NGROK_DOMAIN="YOUR_DOMAIN"
創建main.go
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
_ "github.com/joho/godotenv/autoload"
"golang.ngrok.com/ngrok"
"golang.ngrok.com/ngrok/config"
)
func main() {
tun, err := ngrok.Listen(context.Background(),
config.HTTPEndpoint(config.WithDomain(os.Getenv("NGROK_DOMAIN"))),
ngrok.WithAuthtokenFromEnv(),
)
if err != nil {
log.Fatal(err)
}
log.Println("Application available at:", tun.URL())
err = http.Serve(tun, http.HandlerFunc(handler))
if err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello from ngrok-go!")
}
最後go run main.go
將程式跑起來,然後到網頁上輸入自己的domain,看到下圖就代表成功拉~
有兩點比較需要注意
- .env裡面的"NGROK_AUTHTOKEN",這個Key一定要是這個名稱,因為ngrok包的WithAuthtokenFromEnv()就是吃這個名稱
- 要記得
import _ "github.com/joho/godotenv/autoload"
,不然是讀不到.env的呦~
往後我們在本機端的開發,就會使用這個模式來啟動ngrok,讓他與我們的linebot server一同運行,那我們明天見~