config.go 3.5 KB

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