2013-08-04 108 views
8

我在Go上寫了一些新的Web服務。Go服務的部署策略?

無論目標平臺如何,我可以使用哪些部署策略?例如,我正在Mac上開發,但分段/生產服務器將運行Linux。

是否有一些現有的部署工具可以使用該支持Go?如果沒有,我可以做些什麼來簡化流程?

我使用LiteIDE進行開發。有沒有辦法將LiteIDE掛接到部署過程中?

回答

8

不幸的是,由於Go是一種如此年輕的語言,目前還不存在,或者至少他們很難找到。我也會對Go的這些工具的開發感興趣。

我發現的是,有些人自己做,或者他們已經做了adapted other tools, such as Capistrano,爲他們做。

很可能這是你必須自己做的事情。而且您不必限制自己的shell腳本 - 在Go中執行!事實上,Go的許多工具都是,用Go編寫。您應該避免在目標系統上進行編譯,因爲在生產系統上安裝生成工具通常是一種不好的做法。 Go使交叉編譯二進制文件變得非常簡單。例如,你這是怎麼編譯ARM Linux的&:

GOARCH=arm GOOS=linux go build myapp 

有一件事你可以做的是跳上#go-nuts freenode IRC channel或加入Go mailing list,並要求其他鼠他們在做什麼。

1

卡皮斯特拉諾聽起來像是獨自部署的好主意。你也可以像盧克建議的那樣進行交叉編譯。兩者都可以正常工作。

更一般地說雖然......我也在OS X(開發)和Linux(部署)之間徘徊,事實上我最終只是通過VirtualBox和Vagrant在虛擬機中開發。我使用TextMate 2進行文本編輯,但是在Mac上安裝許多開發工具只是一個主要的PITA,而且我更願意讓Debian或類似的東西在後臺運行。獎金是 - 這個虛擬環境可以反映部署環境,所以當我部署我的代碼時,無論語言如何,我都可以避免出現意外。

0

我還沒有嘗試過它自己,但它似乎可以cross compile golang(goxc或戴夫切尼的golang-crosscompile),雖然有一些注意事項。

但是,如果您需要將環境與生產相匹配,那麼您大多數時候應該這樣做,最安全的做法是像Marcin所建議的那樣。

您可以在http://virtualboxes.org/images/上找到一些預建的VirtualBox圖像,雖然自己創建一個很容易。

0

我可以做些什麼來簡化流程?

交叉編譯的想法應該更加吸引人,Go 1。5(Q3 2015年),爲Dave Cheney細節 「Cross compilation just got a whole lot better in Go 1.5」:

前:

對於成功的交叉編譯你需要

  • 編譯器爲目標平臺,如果他們從不同的主機平臺,即你在達爾文/ amd64(6克),你想編譯的Linux/ARM(5克)。
  • 目標平臺的標準庫,其中包含在Go分發版構建時生成的一些文件。

後(進入1.5+):

隨着翻譯的Go compiler into Go未來的1.5版本,現在第一個問題解決了開花結果的計劃。

package main 

import "fmt" 
import "runtime" 

func main() { 
     fmt.Printf("Hello %s/%s\n", runtime.GOOS, runtime.GOARCH) 
} 

建立達爾文/ 386

% env GOOS=darwin GOARCH=386 go build hello.go 
# scp to darwin host 
$ ./hello 
Hello darwin/386 

或構建的Linux/ARM

% env GOOS=linux GOARCH=arm GOARM=7 go build hello.go 
# scp to linux host 
$ ./hello 
Hello linux/arm 

我在Mac上開發,但分段/生產服務器將運行Linux。

考慮到Go的編譯器在Go中,從Mac生成Linux可執行文件的過程應該很簡單。