From e2c2e08fb199f4fdead6d9eb777db2ce033b064e Mon Sep 17 00:00:00 2001 From: engigu Date: Sun, 28 Jan 2024 19:59:33 +0800 Subject: [PATCH] feat: add docker env vars start server --- pkg/setting/env.go | 63 ++++++++++++++++++++++++++++++++++++++++++ pkg/setting/setting.go | 30 ++++++++++++++------ 2 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 pkg/setting/env.go diff --git a/pkg/setting/env.go b/pkg/setting/env.go new file mode 100644 index 0000000..d9e4b7b --- /dev/null +++ b/pkg/setting/env.go @@ -0,0 +1,63 @@ +package setting + +import ( + "github.com/unknwon/com" + "log" + "os" +) + +var optionValueMap = map[string]string{} + +// getOptionEnvValue 获取必须声明的环境变量 +func getOptionEnvValue(key string, defaultV string) string { + value := os.Getenv(key) + result := "" + if value == "" { + result = defaultV + } else { + result = value + } + optionValueMap[key] = result + return result +} + +// getMustEnvValue 获取必须声明的环境变量 +func getMustEnvValue(key string) string { + value := os.Getenv(key) + if value == "" { + log.Printf("[message-nest] you must assign env: %s", key) + return "" + } else { + return value + } +} + +// printOptionValue 打印可选环境变量值 +func printOptionValue() { + for key, val := range optionValueMap { + log.Printf("[message-nest] current option env : %s, value: %s", key, val) + } +} + +// loadConfigFromEnv 从环境变量加载配置 +func loadConfigFromEnv() { + AppSetting.JwtSecret = getOptionEnvValue("JWT_SECRET", "message-nest") + AppSetting.LogLevel = getOptionEnvValue("LOG_LEVEL", "INFO") + AppSetting.InitData = getOptionEnvValue("INIT_DATA", "") + + ServerSetting.RunMode = getOptionEnvValue("RUN_MODE", "release") + ServerSetting.HttpPort = 8000 + ServerSetting.ReadTimeout = 60 + ServerSetting.WriteTimeout = 60 + + DatabaseSetting.Type = "mysql" + DatabaseSetting.Host = getMustEnvValue("MYSQL_HOST") + DatabaseSetting.Port = com.StrTo(getMustEnvValue("MYSQL_PORT")).MustInt() + DatabaseSetting.User = getMustEnvValue("MYSQL_USER") + DatabaseSetting.Password = getMustEnvValue("MYSQL_PASSWORD") + DatabaseSetting.Name = getMustEnvValue("MYSQL_DB") + DatabaseSetting.TablePrefix = getMustEnvValue("MYSQL_TABLE_PREFIX") + DatabaseSetting.SqlDebug = getOptionEnvValue("SQL_DEBUG", "disable") + + printOptionValue() +} diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 5194bc3..1197c33 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -2,6 +2,7 @@ package setting import ( "log" + "os" "time" "github.com/go-ini/ini" @@ -43,17 +44,30 @@ var DatabaseSetting = &Database{} var cfg *ini.File +func fileExists(filePath string) bool { + _, err := os.Stat(filePath) + return !os.IsNotExist(err) +} + // Setup initialize the configuration instance func Setup() { var err error - cfg, err = ini.Load("conf/app.ini") - if err != nil { - log.Fatalf("setting.Setup, fail to parse 'conf/app.ini': %v", err) - } + intPath := "conf/app.ini" - mapTo("app", AppSetting) - mapTo("server", ServerSetting) - mapTo("database", DatabaseSetting) + if fileExists(intPath) { + log.Printf("[message-nest] start server from %s.", intPath) + cfg, err = ini.Load(intPath) + if err != nil { + log.Fatalf("[message-nest] setting.Setup, fail to parse 'conf/app.ini': %v", err) + } + + mapTo("app", AppSetting) + mapTo("server", ServerSetting) + mapTo("database", DatabaseSetting) + } else { + log.Printf("[message-nest] %s is not exists, start server from env vars.", intPath) + loadConfigFromEnv() + } ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second ServerSetting.WriteTimeout = ServerSetting.WriteTimeout * time.Second @@ -63,6 +77,6 @@ func Setup() { func mapTo(section string, v interface{}) { err := cfg.Section(section).MapTo(v) if err != nil { - log.Fatalf("Cfg.MapTo %s err: %v", section, err) + log.Fatalf("[message-nest] Cfg.MapTo %s err: %v", section, err) } }