89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
|
|
"filestoragesystem/internal/config"
|
|
"filestoragesystem/internal/model"
|
|
"filestoragesystem/internal/router"
|
|
"filestoragesystem/internal/service"
|
|
"filestoragesystem/internal/utils"
|
|
)
|
|
|
|
func main() {
|
|
// 1. 加载配置
|
|
cfg, err := config.Load("config.yaml")
|
|
if err != nil {
|
|
fmt.Println("加载配置失败:", err)
|
|
os.Exit(1)
|
|
}
|
|
if err := cfg.EnsureDirs(); err != nil {
|
|
fmt.Println("初始化目录失败:", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
// 2. 初始化日志
|
|
log, err := utils.InitLogger(cfg.Log.Level, cfg.Log.Dir)
|
|
if err != nil {
|
|
fmt.Println("初始化日志失败:", err)
|
|
os.Exit(1)
|
|
}
|
|
defer func() { _ = log.Sync() }()
|
|
zap.ReplaceGlobals(log)
|
|
|
|
// 3. 连接数据库
|
|
if cfg.Database.Driver != "sqlite" {
|
|
log.Warn("当前仅支持sqlite驱动,将按sqlite处理", zap.String("driver", cfg.Database.Driver))
|
|
}
|
|
db, err := gorm.Open(sqlite.Open(cfg.Database.Source), &gorm.Config{})
|
|
if err != nil {
|
|
log.Fatal("连接数据库失败", zap.Error(err))
|
|
}
|
|
sqlDB, err := db.DB()
|
|
if err == nil {
|
|
sqlDB.SetMaxOpenConns(10)
|
|
}
|
|
|
|
// 4. 迁移与种子数据
|
|
if err := model.AutoMigrate(db); err != nil {
|
|
log.Fatal("数据库迁移失败", zap.Error(err))
|
|
}
|
|
if err := model.SeedData(db); err != nil {
|
|
log.Fatal("初始化种子数据失败", zap.Error(err))
|
|
}
|
|
|
|
// 5. 系统日志异步落库
|
|
utils.InitSystemLog(db)
|
|
|
|
// 6. JWT参数
|
|
utils.InitJWT(cfg.JWT.Secret, cfg.JWT.Expire)
|
|
|
|
// 7. 服务与路由
|
|
svc := service.NewServices(cfg, db)
|
|
|
|
// 8. 引导管理员账户
|
|
if err := svc.Auth.BootstrapAdmin(); err != nil {
|
|
log.Error("初始化管理员账户失败", zap.Error(err))
|
|
}
|
|
|
|
// 9. 启动HTTP服务
|
|
r := router.New(cfg, db, svc)
|
|
addr := fmt.Sprintf(":%s", cfg.Server.Port)
|
|
absRoot, _ := filepath.Abs(cfg.Storage.Root)
|
|
log.Info("FileStorageSystem 启动",
|
|
zap.String("addr", addr),
|
|
zap.String("mode", cfg.Server.Mode),
|
|
zap.String("domain", cfg.Server.Domain),
|
|
zap.String("storage", absRoot),
|
|
)
|
|
if err := r.Run(addr); err != nil {
|
|
log.Fatal("服务启动失败", zap.Error(err))
|
|
}
|
|
}
|