feat: support env start
This commit is contained in:
@@ -2,6 +2,9 @@ package services
|
||||
|
||||
import (
|
||||
"baihu/internal/constant"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"gopkg.in/ini.v1"
|
||||
)
|
||||
@@ -34,15 +37,59 @@ type AppConfig struct {
|
||||
|
||||
var Config *AppConfig
|
||||
|
||||
// getEnvStr 获取环境变量字符串
|
||||
func getEnvStr(key string, target *string) {
|
||||
if v := os.Getenv(key); v != "" {
|
||||
*target = v
|
||||
}
|
||||
}
|
||||
|
||||
// getEnvInt 获取环境变量整数
|
||||
func getEnvInt(key string, target *int) {
|
||||
if v := os.Getenv(key); v != "" {
|
||||
if n, err := strconv.Atoi(v); err == nil {
|
||||
*target = n
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func LoadConfig(path string) (*AppConfig, error) {
|
||||
cfg, err := ini.Load(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
// 初始化默认配置
|
||||
Config = &AppConfig{
|
||||
Server: ServerConfig{
|
||||
Port: 8052,
|
||||
Host: "0.0.0.0",
|
||||
},
|
||||
Database: DatabaseConfig{
|
||||
Type: "sqlite",
|
||||
Host: "localhost",
|
||||
Port: 3306,
|
||||
User: "root",
|
||||
Password: "",
|
||||
DBName: "baihu",
|
||||
Path: constant.DefaultDBPath,
|
||||
TablePrefix: "baihu_",
|
||||
},
|
||||
Security: SecurityConfig{
|
||||
Secret: "",
|
||||
},
|
||||
}
|
||||
|
||||
Config = &AppConfig{}
|
||||
if err := cfg.MapTo(Config); err != nil {
|
||||
return nil, err
|
||||
// 检查配置文件是否存在
|
||||
if _, err := os.Stat(path); err == nil {
|
||||
// 配置文件存在,从文件加载
|
||||
log.Printf("[Config] Loading from file: %s", path)
|
||||
cfg, err := ini.Load(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := cfg.MapTo(Config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
// 配置文件不存在,使用环境变量
|
||||
log.Printf("[Config] File not found, loading from environment variables")
|
||||
applyEnvOverrides()
|
||||
}
|
||||
|
||||
// 设置默认数据库路径
|
||||
@@ -56,9 +103,34 @@ func LoadConfig(path string) (*AppConfig, error) {
|
||||
// 设置 Secret 到 constant 包
|
||||
constant.Secret = Config.Security.Secret
|
||||
|
||||
// 输出配置信息(隐藏敏感信息)
|
||||
log.Printf("[Config] Server: %s:%d", Config.Server.Host, Config.Server.Port)
|
||||
log.Printf("[Config] Database: type=%s, host=%s, port=%d, dbname=%s",
|
||||
Config.Database.Type, Config.Database.Host, Config.Database.Port, Config.Database.DBName)
|
||||
|
||||
return Config, nil
|
||||
}
|
||||
|
||||
// applyEnvOverrides 从环境变量加载配置
|
||||
func applyEnvOverrides() {
|
||||
// Server
|
||||
getEnvInt("BH_SERVER_PORT", &Config.Server.Port)
|
||||
getEnvStr("BH_SERVER_HOST", &Config.Server.Host)
|
||||
|
||||
// Database
|
||||
getEnvStr("BH_DB_TYPE", &Config.Database.Type)
|
||||
getEnvStr("BH_DB_HOST", &Config.Database.Host)
|
||||
getEnvInt("BH_DB_PORT", &Config.Database.Port)
|
||||
getEnvStr("BH_DB_USER", &Config.Database.User)
|
||||
getEnvStr("BH_DB_PASSWORD", &Config.Database.Password)
|
||||
getEnvStr("BH_DB_NAME", &Config.Database.DBName)
|
||||
getEnvStr("BH_DB_PATH", &Config.Database.Path)
|
||||
getEnvStr("BH_DB_TABLE_PREFIX", &Config.Database.TablePrefix)
|
||||
|
||||
// Security
|
||||
getEnvStr("BH_SECRET", &Config.Security.Secret)
|
||||
}
|
||||
|
||||
func GetConfig() *AppConfig {
|
||||
return Config
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user