Go服务的部署策略?

时间:2013-08-04 01:40:52

标签: deployment build ssh go remote-server

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

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

我是否可以使用支持Go的现有部署工具?如果没有,我可以采取哪些措施来简化流程?

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

5 个答案:

答案 0 :(得分:9)

不幸的是,由于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并向其他Gophers询问他们在做什么。

答案 1 :(得分:1)

Capistrano听起来只是单独部署的好主意。你也可以像Luke建议的那样进行交叉编译。两者都可以正常工作。

更普遍的是......我在OS X(开发)和Linux(部署)之间也有点挣扎,实际上我只是通过VirtualBox和Vagrant在虚拟机中开发。我正在使用TextMate 2进行文本编辑,但在Mac上安装许多开发工具只是一个主要的PITA而且我更熟悉让Debian之类的东西在后台运行。奖励是 - 这个虚拟环境可以镜像部署环境,因此当我部署代码时,无论语言如何,我都可以避免意外。

答案 2 :(得分:0)

我自己没有尝试过,但看起来你可以cross compile golang(使用goxc或Dave Cheney的golang-crosscompile),尽管有一些警告。

但是如果你需要将环境与生产相匹配(这可能是你应该在大多数时间),那么就像Marcin建议的那样最安全。

您可以在http://virtualboxes.org/images/上找到一些预先构建的VirtualBox图像,尽管自己创建一个非常简单。

答案 3 :(得分:0)

  

我可以采取哪些措施来简化流程?

对于Go 1.5(2015年第3季度),交叉汇编的想法应该更具吸引力,因为Dave Cheney" Cross compilation just got a whole lot better in Go 1.5中的Go compiler into Go详细信息:

在:

  

要成功进行交叉编译,您需要

     
      
  • 目标平台的编译器,如果它们与您的主机平台不同,即您使用的是darwin / amd64(6g)并且您想为linux / arm(5g)编译。
  •   
  • 目标平台的标准库,其中包含在构建Go分发时生成的一些文件。
  •   

之后(Go 1.5 +):

  

计划在1.5版本中翻译{{3}}即将实现,第一个问题现已解决。

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可执行文件的过程应该变得简单。

答案 4 :(得分:-1)

我现在可能有点晚了,但我最近写了一篇关于我如何使用Capistrano部署Go,在我的本地机器上进行交叉编译的博客文章。

如果您仍然感兴趣,请给它 go http://thread0.me/2016/03/deploy-go-with-capistrano/