Go服务的部署策略?

9

我正在使用Go编写一些新的Web服务。

无论目标平台是什么,有哪些部署策略可以使用?例如,我在Mac上开发,但是暂存/生产服务器将运行Linux。

是否有一些现有的部署工具支持Go?如果没有,有哪些事情我可以做来简化这个过程?

我使用LiteIDE进行开发。有没有办法将LiteIDE连接到部署过程中?

4个回答

9
很不幸,由于Go是一门年轻的语言,目前还没有太多相关工具,或者说它们很难找到。我也对开发这样的工具很感兴趣。
我发现有些人已经自己动手做了,或者他们改编其他工具(例如Capistrano)来完成这项工作。
最可能的情况是你需要自己动手。而且你不必局限于shell脚本——可以用Go来做!实际上,许多Go工具都是用Go编写的。你应该避免在目标系统上编译,因为在生产系统上使用构建工具通常是一个不好的做法。Go使交叉编译二进制文件变得非常容易。例如,这是如何为ARM和Linux编译的:
GOARCH=arm GOOS=linux go build myapp

你可以做的一件事是加入#go-nuts freenode IRC频道或者加入Go邮件列表,向其他Gophers询问他们正在做什么。


1
Capistrano听起来是一个非常好的部署工具。正如Luke所建议的那样,您还可以进行交叉编译。这两种方法都能很好地工作。
更一般地说,我也在OS X(开发)和Linux(部署)之间犹豫不决。事实上,我最终选择在VirtualBox和Vagrant中使用虚拟机进行开发。我使用TextMate 2进行文本编辑,但在Mac上安装许多开发工具是非常麻烦的,而我更喜欢在后台运行Debian或类似的操作系统。好处是,这个虚拟环境可以模拟部署环境,因此无论使用哪种语言,在部署代码时都可以避免出现意外情况。

0

我自己还没有尝试过,但似乎你可以使用交叉编译golang(可以使用goxc或者Dave Cheney的golang-crosscompile),尽管有一些注意事项。

但是如果你需要与生产环境匹配,这可能大部分时间都是必要的,按照Marcin的建议是最安全的选择。

你可以在http://virtualboxes.org/images/找到一些预构建的VirtualBox镜像,不过自己创建一个也很容易。


0
有哪些事情可以使流程更加顺畅?随着Dave Cheney在 "Cross compilation just got a whole lot better in Go 1.5" 中详细介绍的,跨平台编译的想法应该会更加吸引人。

之前:

要成功地进行跨平台编译,您需要:

  • 目标平台的编译器(如果它们与您的主机平台不同),例如您在 darwin/amd64(6g)上,而您想要为 linux/arm(5g)编译。
  • 目标平台的标准库,其中包括在构建Go发行版时生成的一些文件。

之后(Go 1.5+):

随着计划将Go编译器翻译成Go在1.5版本中实现,第一个问题现在已经解决。
package main

import "fmt"
import "runtime"

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

构建适用于darwin/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可执行文件的过程应该变得简单明了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接