| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package config
- import (
- "crypto/md5"
- "encoding/hex"
- "fmt"
- "github.com/spf13/viper"
- )
- type AppConfig struct {
- AppEnv string
- AppPort string
- RedisAddr string
- MySQLDSN string
- PostgresDSN string
- MongoDSN string
- MinIoEndpoint string
- MinioAccessKey string
- MinioSecretKey string
- MinioBucketName string
- }
- type FwhApiConfig struct {
- FwhEnergy string
- FwhOss string
- FwhUser string
- FwhPassword string
- }
- type FwhMqttConfig struct {
- FwhMqttBroker string
- FwhMqttCaUrl string
- FwhMqttCertUrl string
- FwhMqttKeyUrl string
- }
- type Config struct {
- App AppConfig
- FwhApi FwhApiConfig
- FwhMqtt FwhMqttConfig
- }
- // 需先执行LoadConfig后才能读取ENV
- // var APP_ENV string = "dev"
- // var FWH_ENERGY string = "energy.franklinwh.com"
- // var FWH_OSS string = "oss.franklinwh.com"
- // var FWH_USER string = ""
- // var FWH_PASSWORD string = "" // MD5 - PASSWORD
- // LoadConfig 读取配置文件和环境变量
- func LoadConfig() (*Config, error) {
- v := viper.New()
- // 默认值(避免缺省时崩溃)
- // APP
- v.SetDefault("APP_ENV", "dev")
- v.SetDefault("APP_PORT", "8080")
- v.SetDefault("REDIS_ADDR", "localhost:6379")
- v.SetDefault("MYSQL_DSN", "")
- v.SetDefault("POSTGRES_DSN", "host=localhost user=fwh_toolbox password=fwh_toolbox dbname=fwh_toolbox_db port=5432 sslmode=disable")
- v.SetDefault("MONGO_DSN", "mongodb://localhost:27017/FwhToolboxDbDev")
- v.SetDefault("MINIO_ENDPOINT", "localhost:9198")
- v.SetDefault("MINIO_ACCESS_KEY", "fwh-toolbox")
- v.SetDefault("MINIO_SECRET_KEY", "fwh-toolbox")
- v.SetDefault("MINIO_BUCKET_NAME", "fwh-toolbox")
- // FWH API
- v.SetDefault("FWH_ENERGY", "energy.fwh-toolbox.top")
- v.SetDefault("FWH_OSS", "energy-oss.fwh-toolbox.top")
- // FWH MQTT
- // 多文件路径支持
- paths := []string{"./.env", "./config.env"}
- var readErr error
- for _, path := range paths {
- v.SetConfigFile(path)
- if err := v.ReadInConfig(); err == nil {
- fmt.Printf("✅ Using config file: %s\n", path)
- readErr = nil
- break
- } else {
- readErr = err
- }
- }
- // 环境变量覆盖文件配置
- v.AutomaticEnv()
- // 如果两个文件都没读到,也没关系,直接用默认值
- if readErr != nil {
- fmt.Println("⚠️ No config file found, using default values & environment variables")
- }
- // APP_ENV = v.GetString("APP_ENV")
- // FWH_ENERGY = v.GetString("FWH_ENERGY")
- // FWH_OSS = v.GetString("FWH_OSS")
- // FWH_USER = v.GetString("FWH_USER")
- // FWH_PASSWORD = v.GetString("FWH_PASSWORD")
- h := md5.New()
- h.Write([]byte(v.GetString("FWH_PASSWORD")))
- fwhApiPassword := hex.EncodeToString(h.Sum(nil))
- return &Config{
- App: AppConfig{
- AppEnv: v.GetString("APP_ENV"),
- AppPort: v.GetString("APP_PORT"),
- RedisAddr: v.GetString("REDIS_ADDR"),
- MySQLDSN: v.GetString("MYSQL_DSN"),
- PostgresDSN: v.GetString("POSTGRES_DSN"),
- MongoDSN: v.GetString("MONGO_DSN"),
- MinIoEndpoint: v.GetString("MINIO_ENDPOINT"),
- MinioAccessKey: v.GetString("MINIO_ACCESS_KEY"),
- MinioSecretKey: v.GetString("MINIO_SECRET_KEY"),
- MinioBucketName: v.GetString("MINIO_BUCKET_NAME"),
- },
- FwhApi: FwhApiConfig{
- FwhEnergy: v.GetString("FWH_ENERGY"),
- FwhOss: v.GetString("FWH_OSS"),
- FwhUser: v.GetString("FWH_USER"),
- FwhPassword: fwhApiPassword,
- },
- FwhMqtt: FwhMqttConfig{
- FwhMqttBroker: v.GetString("FWH_MQTT_BROKER"),
- FwhMqttCaUrl: v.GetString("FWH_MQTT_CA"),
- FwhMqttCertUrl: v.GetString("FWH_MQTT_CERT"),
- FwhMqttKeyUrl: v.GetString("FWH_MQTT_KEY"),
- },
- }, nil
- }
|