feat(server): support SQLite via DB_TYPE env var
Build and Publish Server / build (push) Failing after 43s
Build and Publish Server / build (push) Failing after 43s
This commit is contained in:
@@ -20,6 +20,7 @@ type ServerConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DatabaseConfig struct {
|
type DatabaseConfig struct {
|
||||||
|
Type string
|
||||||
Host string
|
Host string
|
||||||
Port string
|
Port string
|
||||||
User string
|
User string
|
||||||
@@ -59,6 +60,7 @@ func Load() *Config {
|
|||||||
CORSOrigins: getEnv("CORS_ORIGINS", ""),
|
CORSOrigins: getEnv("CORS_ORIGINS", ""),
|
||||||
},
|
},
|
||||||
Database: DatabaseConfig{
|
Database: DatabaseConfig{
|
||||||
|
Type: getEnv("DB_TYPE", "mysql"),
|
||||||
Host: getEnv("DB_HOST", "localhost"),
|
Host: getEnv("DB_HOST", "localhost"),
|
||||||
Port: getEnv("DB_PORT", "3306"),
|
Port: getEnv("DB_PORT", "3306"),
|
||||||
User: getEnv("DB_USER", "root"),
|
User: getEnv("DB_USER", "root"),
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
|
|
||||||
"gorm.io/driver/mysql"
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/driver/sqlite"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"github.com/gouki/lunar-server/internal/model"
|
"github.com/gouki/lunar-server/internal/model"
|
||||||
)
|
)
|
||||||
@@ -13,16 +14,27 @@ var DB *gorm.DB
|
|||||||
|
|
||||||
// InitDB 初始化数据库连接
|
// InitDB 初始化数据库连接
|
||||||
func InitDB(cfg *Config) error {
|
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
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to connect database: %w", err)
|
return fmt.Errorf("failed to connect database: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user