2013-08-04 64 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可执行文件的过程应该很简单。