【问题标题】:Deploy and build my go app on my server在我的服务器上部署和构建我的 go 应用程序
【发布时间】:2014-07-29 20:59:11
【问题描述】:

我完全是新手(顺便说一句,它看起来棒极了)。

所以我想构建一个与 revel 框架配合使用的“网络”应用程序。问题是我在我的mac(操作系统:darwin,arch:amd64)上编码,我想在我的服务器上部署应用程序(操作系统: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以及关于交叉编译的文章)

【问题讨论】:

  • 如果您阅读过有关交叉编译和部署的内容,您的问题究竟是什么? 究竟是什么对你不利?
  • 起初我做了:在没有狂欢的情况下推送我的项目,并使用我的 post-receive 我 rm 我现有的目录,并尝试去狂欢。我有一个错误“不是 git 存储库”。现在我认为我可以交叉编译我的项目,但是 revel(我现在提交)是一个 Mach-O 64 位,我不能用我的 post-receive 执行它。所以我想知道如何设置工作流来使用这些参数部署我的应用程序(在 mac os x 上编码并在 ubuntu 12.04 上运行)。对不起,我的精度不够。

标签: linux macos git go


【解决方案1】:

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

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

我的工作流程是:

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

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

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

比如我在每台机器上的GOPATH是:

  • 窗口:C:\GOPATH
  • 苹果机:~/go-code/
  • Linux:/home/simon/go-code/

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

  • $GOPATH
      • github.com/
        • 大猩猩/
        • 陶醉/
        • 等等.../
      • 西蒙
        • WebApp1
        • .git
        • 源代码
      • WebAPP2
      • WebApp3

...等等。这极大地简化了整个事情,让我能够无缝地跨 3 个环境进行开发。

我仍然习惯于 Go 和这种设置(我的核心是 .NET 开发人员)——但它现在似乎正在发挥作用。

【讨论】:

  • 非常感谢您的回复和解释。它现在对我很有用,我可以在我的服务器上部署我的构建应用程序。我会使用你的工作流程。
【解决方案2】:

简单、易于测试的方法是在您的 Mac 上交叉编译 Linux amd64 二进制文件,然后使用此处选择的 scp/Fabric/其他工具将二进制文件推送到您的服务器。无需再获取 deps(并冒着破坏的风险),在您的服务器上构建任何东西:您只需发布一个二进制文件。

选项 1http://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,因此它不会覆盖平台本机二进制文件。

【讨论】:

  • 我同意在本地构建。我们发现让服务器构建应用程序只是个坏消息,而且容易出错且难以自动化。
  • 是的 +1。就像我在回答中所说的那样——我仍然习惯于 Go 生态系统,所以我的过程不是最好的——但现在对我来说是可行的。
  • 感谢@Peter 的回复。唯一有效的是交叉编译。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多