在我的服务器上部署并构建我的go应用程序

时间:2014-07-29 20:59:11

标签: linux macos git go

我完全不知所措了(看起来很棒)。

所以我想在revel框架中构建一个“web-”应用程序。问题是我在我的mac上编码(os:darwin,arch:amd64),我想在我的服务器上部署应用程序(os:ubuntu 12.04,arch:amd64)。 我在本地“狂热”(所以bin/revel它是一个:Mach-O 64位可执行文件)在我的服务器上是不可执行的。

现在,当我推送(使用git)时,我有一个后接收脚本来构建应用程序(revel build myapp /path/to/deploy)。在我试图“开始”狂欢我的服务器之前,它也失败了。

它不起作用,我能理解为什么,但我不知道如何获得可行的工作流程:

  1. 我的Mac上的代码
  2. 推送我的代码(使用git)
  3. 在服务器上构建应用程序

PS:我读过http://blog.gopheracademy.com/auto-deploy-revel-sitehttp://revel.github.io/manual/deployment.html以及有关交叉编译的文章。

3 个答案:

答案 0 :(得分:4)

我不确定这是否有帮助..但是这里......

在Go中开发我的第一个正确的网络应用程序时,您的确切情况是我目前每天都在做的事情。我开发的是Windows笔记本电脑(虽然在工作中很无聊......我是我工作场所的.NET开发人员!)和家里的Mac。然后我将它部署到Digital Ocean托管的Ubuntu服务器上。

我的工作流程是:

  • 进行任何更改。
  • 提交到存储库(BitBucket)
  • 从回购中提取(无论在哪里 - 例如,在我的Ubuntu服务器上)
  • go build服务器上的代码
  • go get它抱怨我在服务器上没有的任何库(例如,gorilla/mux今天在服务器上没有,所以我只是运行了<) / LI>
  • go build再次(如适用)

..然后在服务器上运行它。

当从这个工作流程开始时(我仍然试图用bash脚本等完善...)我发现跨环境的一致GOPATH确实有帮助。

例如,每台计算机上的GOPATH为:

  • Windows:C:\GOPATH
  • Mac:~/go-code/
  • Linux:/home/simon/go-code/

每个人都有完全相同的结构:

  • $ GOPATH
    • SRC
      • github.com/
        • 大猩猩/
        • 陶醉/
        • 等... /
      • 西蒙
        • WebApp1&lt; --- git repo
          • 的.git
          • SRC
        • webapp2的
        • WebApp3

...等。这大大简化了整个过程,使我能够无缝地在3个环境中进行开发。

我仍然习惯Go和这个设置(作为我的核心.NET开发人员) - 但它现在似乎正在做这个技巧。

答案 1 :(得分:4)

简单易用的方法是在Mac上交叉编译Linux amd64二进制文件,然后使用scp / Fabric /其他选择工具将二进制文件推送到服务器。然后没有必要获取deps(并冒险破坏事物),在您的服务器上构建任何东西:您只需发送二进制文件。

选项1 http://dave.cheney.net/2012/09/08/an-introduction-to-cross-compilation-with-go - 然后使用go-linux-amd64 build或直接设置环境变量(根据以下选项)构建二进制文件。

选项2 :使用Homebrew brew install go --cross-compile-common安装Go然后运行GOOS=linux GOARCH=amd64 go build - 或使用-o标志指定不同的输出文件名。我通常输出我的myapp-linux,因此它不会覆盖平台本机二进制文件。

答案 2 :(得分:-1)

在类似情况下,我想在mac上编码并在Linux上部署。这种快速而肮脏的方式适用于Go 1.6.2 http://kumargaurav.co/2016/08/10/deploy-go-lang-app-linux-server/