50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"cloudnest/internal/bootstrap"
|
|
"cloudnest/internal/config"
|
|
"cloudnest/internal/di"
|
|
"cloudnest/internal/pkg/logger"
|
|
)
|
|
|
|
func main() {
|
|
// Step 1: Initialize logger FIRST to prevent nil pointer panics
|
|
// 第一步:先初始化日志记录器以防止空指针 panic
|
|
// Using a default level until we can read config
|
|
// 使用默认级别直到读取配置
|
|
logger.Init("info")
|
|
|
|
// Step 2: Load configuration
|
|
// 第二步:加载配置
|
|
cfg := config.Load()
|
|
|
|
// Step 3: Re-initialize logger with the configured log level
|
|
// 第三步:使用配置的日志级别重新初始化日志记录器
|
|
logger.Init(cfg.App.LogLevel)
|
|
|
|
// Step 4: Initialize services
|
|
// 第四步:初始化服务
|
|
c := di.New()
|
|
if err := c.InitializeServices(); err != nil {
|
|
logger.Fatal("failed to initialize services", "error", err)
|
|
}
|
|
|
|
// Step 5: Build the HTTP engine (file service only registers file routes)
|
|
// 第五步:构建 HTTP 引擎(文件服务只注册文件路由)
|
|
engine, err := c.BuildFileEngine()
|
|
if err != nil {
|
|
logger.Fatal("failed to build engine", "error", err)
|
|
}
|
|
|
|
// Step 6: Create server with lifecycle management
|
|
// 第六步:创建带生命周期管理的服务器
|
|
srv := bootstrap.NewServer(cfg, engine)
|
|
if err := srv.Run(); err != nil {
|
|
if err == bootstrap.ErrReloadRequested {
|
|
logger.Info("exiting for reload, supervisor should restart")
|
|
} else {
|
|
logger.Error("server exited with error", "error", err)
|
|
}
|
|
}
|
|
}
|