部署 Go 專案

所有基於 Go Modules 的專案都可以部署。但你需要在專案根目錄有一個 main.go 作為程式編譯入口。

自訂程式編譯入口

如果你有多個程式編譯入口,你需要將他們放在 cmd 目錄下,例如一個 cmd/server-a/main.go 和一個 cmd/server-b/main.go

Zeabur 會自動辨識並部署 cmd 目錄下與 Service 名稱相同的程式編譯入口。

設定編譯前命令

如果你的 Go 專案需要在編譯前執行諸如 go generate 相關的命令,可以使用 ZBPACK_BUILD_COMMAND 環境變數設定。

ZBPACK_BUILD_COMMAND=go generate ./...

也可以在 zbpack.json 設定 build_command

{
    "build_command": "go generate ./..."
}

你的編譯前命令會在依賴安裝完成、程式編譯前執行。

啟用 cgo

如果你的 Go 專案需要使用到 cgo,可以在 zbpack.json 設定 cgo

{
    "cgo": true
}

或者是設定 CGO_ENABLED 環境變數:

CGO_ENABLED=1

Zeabur 會自動啟用 cgo 並安裝相關的 C/C++ 編譯工具鏈。

監聽端口

請確保你的程式監聽在 PORT 環境變數所指定的端口。這個環境變數是 Zeabur 自動注入的,你不需要自己設定。

port := os.Getenv("PORT")
if port == "" {
    port = "8080"
}
 
http.ListenAndServe(":"+port, nil)

Serverless 支援

Zeabur 支援將 Go 部署成 serverless 專案。不過目前需要 opt-in。 請參考 啟用 Serverless 頁面啟用 serverless 支援。