Golang Go语言中如何优雅处理不同环境下数据库DNS配置不同的问题

发布于 1周前 作者 songsunli 来自 Go语言

如何优雅的处理在不同的环境中(如本地开发、Docker Compose 和 Kubernetes ),数据库的 DNS 配置不同的问题。
Golang Go语言中如何优雅处理不同环境下数据库DNS配置不同的问题

10 回复

读取环境变量,或者启动参数?

更多关于Golang Go语言中如何优雅处理不同环境下数据库DNS配置不同的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


本地配置 启动参数 环境变量

本机上和 docker-compose 上的时候经常要把 config 中 host 在 127.0.0.1 和 mysql 之间来回改,本人刚开始学 k8s ,deploy 是通过拉取镜像部署的,目前知道可以通过环境变量或者 configmap 读取配置,貌似可以用 volumeMounts 挂载到容器中,只需要多配置一个路径,或者配置相同的路径就行?

我用的也是 volume 挂载不同的配置文件到容器中,我平常的做法是用多个 docker-compose 文件,使用 docker-compose -f 可以指定文件,在每个文件中定义不同的挂载,一些使用的是容器中的数据库,一些连着服务器的数据库,马马虎虎吧,不知道还有没有更方便的方法

k8s 用的不多,但是大概也是挂载不同配置文件的思路

我们的配置是统一存放在配置中心,由服务实例按需拉取。同时也支持热更新。相信不少的朋友都是采用的这样的方案。丢一个自己的开源项目,写的不好的地方大家轻喷(🐶

https://github.com/keepchen/go-sail

关于配置热更新的文档章节:
https://go-sail.keepchen.com/docs/examples/configuration#from-nacos

cmd/test/main.go
cmd/dev/main.go
cmd/prod/main.go

反正不要想着人去改和维护,人是会出错误的。使用 golang 的 build-tag ,设置配置文件的名字。

2 种方式:
1 、环境变量
2 、启动参数

根据以上两种的任意一种去读对应环境的配置文件,可以参考: https://github.com/go-eagle/eagle 里面的实现方式

在Golang中处理不同环境下数据库DNS(Data Source Name)配置不同的问题,可以采用以下几种优雅的方式:

  1. 环境变量: 将数据库DNS配置存储在环境变量中,根据运行时的环境(如开发、测试、生产)读取不同的环境变量。可以使用os.Getenv函数获取环境变量的值,然后将其传递给数据库连接库(如database/sql和对应的数据库驱动)。

  2. 配置文件: 使用配置文件(如JSON、YAML、TOML等)存储数据库配置信息,不同环境使用不同的配置文件。程序启动时读取相应环境的配置文件,并解析出数据库DNS配置。可以使用第三方库(如viper)来简化配置文件的读取和管理。

  3. 构建时配置: 通过构建标签(build tags)在编译时选择不同的数据库配置。这种方法适用于需要在编译时就确定环境配置的情况。可以在构建命令中使用-tags参数指定环境标签,然后在代码中根据标签选择不同的配置。

  4. 服务发现: 在微服务架构中,可以使用服务发现工具(如Consul、Etcd等)来动态获取数据库配置信息。服务发现工具允许服务在启动时注册自己,并允许其他服务查询其配置信息。

  5. 秘密管理工具: 使用秘密管理工具(如HashiCorp Vault、AWS Secrets Manager等)来安全地存储和访问数据库配置信息。这些工具提供了访问控制和审计日志功能,以确保配置信息的安全性和合规性。

选择哪种方法取决于项目的具体需求和团队的偏好。

回到顶部