go - Golang应用的部署策略,如何在生产环境中运行Golang应用

标签 go deployment

我有一个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/

    相关文章:

    git - 如何将 Gogs 设置为 "go get"的本地 github 缓存

    c# - 在另一台机器上运行 c# 应用程序时出现问题

    java - 为 Maven 部署指定显式类型

    amazon-web-services - Go 中返回 JSON

    go - 尝试在Go中设置Cookie,但收到一条CORS错误,指出Access-Control-Allow-Credentials未设置为true

    windows - 推荐的 .NET 应用程序安装程序?

    asp.net - 应用程序 'D:\home\site\wwwroot\' 在检测到 app_offline.htm 后被回收 - ASP.NET

    deployment - 无法在 WebLogic 上的 EAR 中部署 WAR

    go - 从golang中的单词结尾删除句号

    templates - 部分变量不可见