为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
眼眸繁星 2022-06-27 15:05:21
我有一个 golang 网络应用程序,我需要部署它。我正在尝试找出如何在生产环境中运行 golang 应用程序的最佳实践。我现在的做法,很简单,只需将构建的二进制文件上传到生产环境,而实际上根本没有 prod 上的源代码。但是我发现了一个问题,我的源代码实际上是从源代码中读取了一个config/<local/prod>.yml配置文件。如果我只是上传没有源代码的二进制文件,应用程序将无法运行,因为它缺少配置。所以我想知道这里的最佳做法是什么。我想到了几个解决方案:上传源代码和二进制文件或从源代码构建只上传二进制文件和配置文件。移至,但我认为使用此解决方案,代码的结构化程度会降低,因为如果您有很多配置,环境变量将难以管理yml config。Env Variables提前致谢。
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

部署的良好实践是在洁净室(例如 Docker 映像)中运行可重现的构建过程并生成要部署的工件(二进制文件、配置、资产),理想情况下还可以运行一些测试来证明上次没有任何问题。

将服务 - 二进制文件及其所有需要的文件(配置、辅助文件,如 systemd、nginx 或 logrotate 配置等)打包成某种包是一个好主意 - 无论是目标环境 Linux 发行版 (DPKG) 的原生包, RPM)、虚拟机映像、docker 映像等。这样您(或负责部署的其他人)就不会忘记任何文件等。一旦您有了包,您就可以使用该打包格式的本机工具轻松验证和部署( aptyumdocker...) 到生产环境。

对于配置和其他文件,我建议让软件从众所周知的位置读取它,或者至少可以选择在命令行参数中传递路径。如果您部署到 Linux,我建议您遵循LFHS(tldr;配置为/etc/yourapp/,二进制文件为/usr/bin/

不建议在生产环境中从源代码构建软件,因为构建需要通常不需要的工具(例如gogit依赖项等)。安装和运行这些需要更多维护,并可能导致安全和性能风险。通常,您希望根据运行应用程序的要求将生产环境保持在最低限度。


查看完整回答
反对 回复 2022-06-27
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我认为应用程序最常见的部署策略是尝试遵循 12-factor-app方法论

因此,在这种情况下,如果您的 YAML 文件是配置文件,那么将配置放在环境变量(ENV vars)上会更好。因此,当您在容器上部署应用程序时,从 ENV 变量配置正在运行的实例比将配置文件复制到容器更容易。

但是,在编写系统软件时,最好遵守您所使用的操作系统定义的文件系统层次结构。如果您使用的是类 Unix 系统,您可以通过man hier在终端上键入来读取层次结构。通常,我将编译后的二进制文件安装在/usr/local/bin目录中,并将配置放在/usr/local/etc.

对于生产环境的部署,我创建了一个简单的 Makefile 来完成构建和安装过程。如果部署环境是裸机服务器或虚拟机,我通常使用 Ansible 使用 ansible-playbook 进行部署。playbook 将从代码存储库中获取源代码,然后通过运行make命令构建、编译和安装软件。

如果应用程序将部署在容器上,我建议您创建一个镜像并使用多阶段构建,这样构建二进制文件所需的源代码和其他工具就不会在生产环境中,并且镜像大小会更小。但是,正如我之前提到的,从 ENV 变量而不是配置文件中读取应用程序配置是一种常见的做法。如果应用程序需要配置很多东西,则可以在构建映像时将文件复制到映像中。


查看完整回答
反对 回复 2022-06-27
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

当我们等待提案时::cmd/go支持在二进制文件中嵌入静态资产(文件)来实现(请参阅当前提案),您可以使用该提案中列出的嵌入静态资产文件工具之一。

这个想法是将您的静态文件包含在您的可执行文件中。
这样,您可以分发您的程序而不依赖于您的来源。


查看完整回答
反对 回复 2022-06-27
  • 3 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号