diff --git a/server/internal/config/config.go b/server/internal/config/config.go index d1be239..f5e03a0 100644 --- a/server/internal/config/config.go +++ b/server/internal/config/config.go @@ -20,6 +20,7 @@ type ServerConfig struct { } type DatabaseConfig struct { + Type string Host string Port string User string @@ -59,6 +60,7 @@ func Load() *Config { CORSOrigins: getEnv("CORS_ORIGINS", ""), }, Database: DatabaseConfig{ + Type: getEnv("DB_TYPE", "mysql"), Host: getEnv("DB_HOST", "localhost"), Port: getEnv("DB_PORT", "3306"), User: getEnv("DB_USER", "root"), diff --git a/server/internal/config/database.go b/server/internal/config/database.go index 6e827a2..4ddbfc3 100644 --- a/server/internal/config/database.go +++ b/server/internal/config/database.go @@ -5,6 +5,7 @@ import ( "log" "gorm.io/driver/mysql" + "gorm.io/driver/sqlite" "gorm.io/gorm" "github.com/gouki/lunar-server/internal/model" ) @@ -13,16 +14,27 @@ var DB *gorm.DB // InitDB 初始化数据库连接 func InitDB(cfg *Config) error { - dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", - cfg.Database.User, - cfg.Database.Password, - cfg.Database.Host, - cfg.Database.Port, - cfg.Database.Name, - ) - var err error - DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) + + switch cfg.Database.Type { + case "sqlite", "sqlite3": + // DB_NAME 作为 SQLite 文件路径,例如 /app/data/lunar.db + dbPath := cfg.Database.Name + if dbPath == "" { + dbPath = "lunar.db" + } + DB, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) + default: + dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", + cfg.Database.User, + cfg.Database.Password, + cfg.Database.Host, + cfg.Database.Port, + cfg.Database.Name, + ) + DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) + } + if err != nil { return fmt.Errorf("failed to connect database: %w", err) }