我有一个用Go编写的REST API端点,想知道最佳的部署方式。 我知道使用Google App Engine可能会更容易部署。但是,假设我想在AWS上部署它,我有哪些选项/流程/程序可供选择? 有哪些最佳实践?我需要编写自己的任务来构建、SCP和运行吗?
我感兴趣尝试的一个选项是使用Fabric创建部署任务。
我有一个用Go编写的REST API端点,想知道最佳的部署方式。 我知道使用Google App Engine可能会更容易部署。但是,假设我想在AWS上部署它,我有哪些选项/流程/程序可供选择? 有哪些最佳实践?我需要编写自己的任务来构建、SCP和运行吗?
我感兴趣尝试的一个选项是使用Fabric创建部署任务。
我刚从Mountain West DevOps回来,今天我们讨论了这个问题,非常多。(不仅仅是针对Go语言,而是一般性的讨论)
简洁地说,我只能说:这取决于具体情况。
对于一个不需要高使用率的简单应用程序,您可能只需手动启动一个实例,将二进制文件放置到其中,运行它,然后就完成了。(如果您不在生产平台上开发,可以进行交叉编译)
对于稍微更自动化一些的应用程序,您可能会编写一个Python脚本,使用boto/ssh将最新的二进制文件上传并在EC2实例上运行。
尽管Go程序通常相当安全(特别是如果您进行了test),但为了更可靠,您可能会使二进制文件成为服务(daemonize),以便如果由于某种原因它崩溃了,它将重新运行。
对于更多的自主权,使用像Jenkins或Travis这样的CI工具。这些工具可以配置为在您提交代码到某个分支或应用标签时自动运行部署脚本。
为了更加强大的自动化,你可以采用Packer或者Chef等工具。除非你的需求非常强烈,否则我建议先从Packer入手。Packer开发人员今天谈到了它,看起来简单而强大。Chef服务于几个企业,但对你来说可能过度。
这是简单的Go程序的基本思想:只需将二进制文件复制到生产服务器并运行即可。就是这么简单。如何自动化或可靠地执行取决于你的需求和喜好的工作流程。
更多阅读材料:http://www.reddit.com/r/golang/comments/1r0q79/pushing_and_building_code_to_production/,特别是:https://medium.com/p/528af8ee1a58