config.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package config
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "fmt"
  6. "github.com/spf13/viper"
  7. )
  8. type AppConfig struct {
  9. AppEnv string
  10. AppPort string
  11. RedisAddr string
  12. MySQLDSN string
  13. PostgresDSN string
  14. MongoDSN string
  15. MinIoEndpoint string
  16. MinioAccessKey string
  17. MinioSecretKey string
  18. MinioBucketName string
  19. AsynqmonPort string
  20. }
  21. type FwhApiConfig struct {
  22. FwhEnergy string
  23. FwhOss string
  24. FwhUser string
  25. FwhPassword string
  26. }
  27. type FwhMqttConfig struct {
  28. FwhMqttBroker string
  29. FwhMqttCaUrl string
  30. FwhMqttCertUrl string
  31. FwhMqttKeyUrl string
  32. }
  33. type Config struct {
  34. App AppConfig
  35. FwhApi FwhApiConfig
  36. FwhMqtt FwhMqttConfig
  37. FwhMqttTest FwhMqttConfig
  38. }
  39. // 需先执行LoadConfig后才能读取ENV
  40. // var APP_ENV string = "dev"
  41. // var FWH_ENERGY string = "energy.franklinwh.com"
  42. // var FWH_OSS string = "oss.franklinwh.com"
  43. // var FWH_USER string = ""
  44. // var FWH_PASSWORD string = "" // MD5 - PASSWORD
  45. // LoadConfig 读取配置文件和环境变量
  46. func LoadConfig() (*Config, error) {
  47. v := viper.New()
  48. // 默认值(避免缺省时崩溃)
  49. // APP
  50. v.SetDefault("APP_ENV", "dev")
  51. v.SetDefault("APP_PORT", "8080")
  52. v.SetDefault("REDIS_ADDR", "localhost:6379")
  53. v.SetDefault("MYSQL_DSN", "")
  54. v.SetDefault("POSTGRES_DSN", "host=localhost user=fwh_toolbox password=fwh_toolbox dbname=fwh_toolbox_db port=5432 sslmode=disable")
  55. v.SetDefault("MONGO_DSN", "mongodb://localhost:27017/FwhToolboxDbDev")
  56. v.SetDefault("MINIO_ENDPOINT", "localhost:9198")
  57. v.SetDefault("MINIO_ACCESS_KEY", "fwh-toolbox")
  58. v.SetDefault("MINIO_SECRET_KEY", "fwh-toolbox")
  59. v.SetDefault("MINIO_BUCKET_NAME", "fwh-toolbox")
  60. v.SetDefault("ASYNQMON_PORT", "8081")
  61. // FWH API
  62. v.SetDefault("FWH_ENERGY", "energy.fwh-toolbox.top")
  63. v.SetDefault("FWH_OSS", "energy-oss.fwh-toolbox.top")
  64. // FWH MQTT
  65. // 多文件路径支持
  66. paths := []string{"./.env", "./config.env"}
  67. var readErr error
  68. for _, path := range paths {
  69. v.SetConfigFile(path)
  70. if err := v.ReadInConfig(); err == nil {
  71. fmt.Printf("✅ Using config file: %s\n", path)
  72. readErr = nil
  73. break
  74. } else {
  75. readErr = err
  76. }
  77. }
  78. // 环境变量覆盖文件配置
  79. v.AutomaticEnv()
  80. // 如果两个文件都没读到,也没关系,直接用默认值
  81. if readErr != nil {
  82. fmt.Println("⚠️ No config file found, using default values & environment variables")
  83. }
  84. // APP_ENV = v.GetString("APP_ENV")
  85. // FWH_ENERGY = v.GetString("FWH_ENERGY")
  86. // FWH_OSS = v.GetString("FWH_OSS")
  87. // FWH_USER = v.GetString("FWH_USER")
  88. // FWH_PASSWORD = v.GetString("FWH_PASSWORD")
  89. h := md5.New()
  90. h.Write([]byte(v.GetString("FWH_PASSWORD")))
  91. fwhApiPassword := hex.EncodeToString(h.Sum(nil))
  92. return &Config{
  93. App: AppConfig{
  94. AppEnv: v.GetString("APP_ENV"),
  95. AppPort: v.GetString("APP_PORT"),
  96. RedisAddr: v.GetString("REDIS_ADDR"),
  97. MySQLDSN: v.GetString("MYSQL_DSN"),
  98. PostgresDSN: v.GetString("POSTGRES_DSN"),
  99. MongoDSN: v.GetString("MONGO_DSN"),
  100. MinIoEndpoint: v.GetString("MINIO_ENDPOINT"),
  101. MinioAccessKey: v.GetString("MINIO_ACCESS_KEY"),
  102. MinioSecretKey: v.GetString("MINIO_SECRET_KEY"),
  103. MinioBucketName: v.GetString("MINIO_BUCKET_NAME"),
  104. AsynqmonPort: v.GetString("ASYNQMON_PORT"),
  105. },
  106. FwhApi: FwhApiConfig{
  107. FwhEnergy: v.GetString("FWH_ENERGY"),
  108. FwhOss: v.GetString("FWH_OSS"),
  109. FwhUser: v.GetString("FWH_USER"),
  110. FwhPassword: fwhApiPassword,
  111. },
  112. FwhMqtt: FwhMqttConfig{
  113. FwhMqttBroker: v.GetString("FWH_MQTT_BROKER"),
  114. FwhMqttCaUrl: v.GetString("FWH_MQTT_CA"),
  115. FwhMqttCertUrl: v.GetString("FWH_MQTT_CERT"),
  116. FwhMqttKeyUrl: v.GetString("FWH_MQTT_KEY"),
  117. },
  118. FwhMqttTest: FwhMqttConfig{
  119. FwhMqttBroker: v.GetString("FWH_MQTT_BROKER"),
  120. FwhMqttCaUrl: v.GetString("FWH_MQTT_CA"),
  121. FwhMqttCertUrl: v.GetString("FWH_MQTT_CERT"),
  122. FwhMqttKeyUrl: v.GetString("FWH_MQTT_KEY"),
  123. },
  124. }, nil
  125. }