Heroku with Golang,如何部署第一個 WebApp
Heroku 是一套支援多程式個語言的雲平台即服務 (platform as a service, PaaS),只要將程式碼上傳到該服務中,便可上頭自動編譯執行,建造自己的網路應用程式,且該服務提供免費試用方案 (有限制的),又有支援 SSL (https)。
先到 Heroku.com 官方網站註冊帳號,根據官方手冊安裝必須要的 Heroku Cli,並且版本控制軟體 Git,完成準備的前置作業。
理解 Heroku 更新運作概念後,覺得其機制相當直覺與方便,每個運作在 Heroku 的 WebApp 都有一份自己的 Git repo. (repository),在本機端初始 git repo. 後,利用 git commit 將程式碼加入本機 repo. 控管,然後進行 git push 將資料送到遠端的 Heroku git repo.,Heroku 再收到資料後,便開始展開編譯建置,然後部署在其伺服器上。
部署範例
以下全部都在 CommandLine 環境運行,確保擁有設定好的 Go 安裝環境:
- 環境變數 $GOROOT 有設定
- 環境變數 $GOPATH 有設置
- 環境變數 $PATH 有加入 $GOROOT/bin 以及 $GOPATH/bin 的路徑
為了確保 Heroku 能夠判斷上傳的 Go 專案,需要使用指定的相依性工具來管理,目前支援 dep、gb,govendor、或是 godep,更多細節可參考 Heroku Go Support。
以下筆記採用 dep 來管理 Go 專案,參考該工具的說明文件安裝最新版本:
go get -u github.com/golang/dep/cmd/dep
準備 Web App 專案,使用簡單的 main.go 範例:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
port := "80"
if v := os.Getenv("PORT"); len(v) > 0 {
port = v
}
h := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
name := req.URL.Query().Get("name")
if len(name) <= 0 {
name = "stranger"
}
fmt.Fprintf(w, "Hello, %s.", name)
})
http.ListenAndServe(":"+port, h)
}
在 main.go 所在資料夾,執行 Go dependency 初始化:
$ dep init
並且修改 Gopkg.toml 設定,加入以下 root-package 設定,更多細節可參考 Go Dependencies via dep:
[metadata.heroku]
root-package = "main"
然後初始化 Git repository:
$ git init
Initialized empty Git repository in C:/go/src/example/.git/
將專案檔案提交到該 git repository:
$ git add main.go Gopkg.lock Gopkg.toml
$ git commit -m "your commit message"
接著登入 Heroku:
$ heroku login
Enter your Heroku credentials.
Email: example@twsiyuan.com
Password: **********
Logged in as example@twsiyuan.com
要求建立一個指定名字的 Heroku App,若名稱已被使用,將會回傳錯誤;若沒有指定名稱,會隨機產生一組名稱:
$ heroku create twsiyuan-example
Creating example... done
https://twsiyuan-example.herokuapp.com/ | https://git.heroku.com/twsiyuan-example.git
使用上述指令,heroku 會自動在目前 git repository 加入 remote heroku 的設定:
$ git remote -v
heroku https://git.heroku.com/twsiyuan-example.git (fetch)
heroku https://git.heroku.com/twsiyuan-example.git (push)
或是手動執行指令,讓 heroku 設定 git remote 位置:
$ heroku git:remote --app twsiyuan-example
set git remote heroku to https://git.heroku.com/twsiyuan-example.git
使用 git push,將資料推送到遠端的 Heroku:
$ git push heroku master
...
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Go app detected
...
To https://git.heroku.com/twsiyuan-example.git
* [new branch] master -> master
最後,要求開啟 Web app,查看部署結果:
$ heroku open
沒有留言: