我有一个golang网络应用,需要对其进行部署。我正在尝试找出有关如何在生产环境中运行golang应用程序的最佳实践。我现在的操作方式非常简单,
prod上的源代码。
但是我发现了一个问题,我的源代码实际上是从源代码读取
config/<local/prod>.yml
配置文件。如果我只是上传没有源代码的二进制文件,则该应用程序将无法运行,因为它缺少配置。所以我想知道什么是最佳实践。我想到了几个解决方案:
yml config
移到Env Variables
,但是我认为使用此解决方案,代码的结构将更少,因为如果您有大量的配置,那么env变量将很难管理。 提前致谢。
最佳答案
我认为应用程序最常见的部署策略是尝试遵守12因子应用程序methodology。
因此,在这种情况下,如果您的YAML文件是配置文件,则最好将配置放在环境变量(ENV vars)上。因此,当您在容器上部署应用程序时,从ENV vars配置运行中的实例比将配置文件复制到容器更容易。
但是,在编写系统软件时,最好遵守所用操作系统定义的文件系统层次结构。如果使用的是类似Unix的系统,则可以通过在终端上键入man hier
来读取层次结构。通常,我将编译后的二进制文件安装在/usr/local/bin
目录中,并将配置放入/usr/local/etc
中。
为了在生产环境中进行部署,我创建了一个简单的Makefile,它将执行构建和安装过程。如果部署环境是裸机服务器或VM,则通常使用Ansible通过ansible-playbook进行部署。剧本将从代码存储库中获取源代码,然后通过运行make
命令来构建,编译和安装软件。
如果将应用程序部署在容器上,建议您创建一个镜像并使用multi-stage builds,这样在生成二进制文件时所需的源代码和其他工具将不在生产环境中,并且镜像大小会更小。但是,正如我之前提到的,从ENV变量而不是配置文件中读取应用程序配置是一种常见的做法。如果应用程序有很多要配置的内容,则可以在构建镜像时将文件复制到镜像。
关于go - Golang应用的部署策略,如何在生产环境中运行Golang应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63627469/