iT邦幫忙

2023 iThome 鐵人賽

DAY 7
1

一般在自己的開發測試階段,想要對外公開服務,很多人都會選擇使用Ngrok,相關的教學資源很多,尤其是LineBot相關的主題多半都有講到,難度相對不高,載下來開箱即用,所以今天不特別說安裝。

今天想說個新功能,跟介紹不同的用法,首先今年八月中的時候, Ngrok很佛的為我這種免費仔免費用戶推出了一個超級方便的功能,那就是免費的” Static domain ”!,所有註冊用戶都可以免費申請一個靜態域名來使用。

以往在開發的過程中使用ngrok做測試時,有時候手滑不小心把terminal關掉,或是需要關機重啟的時候,由於ngrok每次配發的domain都不相同,如果自己的服務有用到Webhook那就要一直去網站後台更新Webhook,像是Linebot Messaging API 的Webhook URL,平時只有用到一家的就算了,但如果牽扯很多家服務的話,光更新URL就是一件很崩潰的事情了。

那接著我們就一步一步來看看怎麼使用吧~

  1. 先登入ngrok

  2. 登入後可以看到,由於是新功能,所以有跳提示,我們就按下去
    https://ithelp.ithome.com.tw/upload/images/20230922/20115990NsMRD5JeHZ.png

  3. 按下Create Domain
    https://ithelp.ithome.com.tw/upload/images/20230922/201159901OprJkQq9U.png

  4. 這樣就創建完成了,要像傳統那樣使用的話,可以直接複製使用,其實就只是要加上--domain就可以了
    https://ithelp.ithome.com.tw/upload/images/20230922/20115990GzLOf5y3Hg.png

  5. 可以看到我們免費的domain就在這邊~
    https://ithelp.ithome.com.tw/upload/images/20230922/20115990ThhjqmRXwU.png

  6. 如果你覺得每次開一個terminal放在那邊很佔位,我們可以透過ngrok提供的go SDK讓他與我們的linebot一起拉起來,先按到Your Authtoken的地方,記下我們的token
    https://ithelp.ithome.com.tw/upload/images/20230922/20115990yrgKKdaxbK.png

  7. 然後開一個新的main.go,先下載依賴

    go get golang.ngrok.com/ngrok
    
  8. 開一個.env檔案來儲存環境變數,自己開發測試使用,要記得.gitignore要忽略掉他。
    填上上面拿到的Your AuthtokenDomain

    NGROK_AUTHTOKEN="YOUR_TOKEN"
    NGROK_DOMAIN="YOUR_DOMAIN"
    
  9. 創建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!")
    }
    
  10. 最後go run main.go將程式跑起來,然後到網頁上輸入自己的domain,看到下圖就代表成功拉~
    https://ithelp.ithome.com.tw/upload/images/20230922/20115990Cs97jdWAkW.png

有兩點比較需要注意

  • .env裡面的"NGROK_AUTHTOKEN",這個Key一定要是這個名稱,因為ngrok包的WithAuthtokenFromEnv()就是吃這個名稱
  • 要記得import _ "github.com/joho/godotenv/autoload",不然是讀不到.env的呦~

往後我們在本機端的開發,就會使用這個模式來啟動ngrok,讓他與我們的linebot server一同運行,那我們明天見~


上一篇
Day06 啟用Google Drive API
下一篇
Day08 串接DynamoDB-01 (Cloud+Local)
系列文
Golang LineBot X GoogleDrive:LINE有各種限制!? 那就丟上Drive吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言