main.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "github.com/0xJacky/Nginx-UI/internal/cmd"
  8. "github.com/0xJacky/Nginx-UI/internal/kernel"
  9. "github.com/0xJacky/Nginx-UI/internal/system"
  10. "github.com/0xJacky/Nginx-UI/model"
  11. "github.com/0xJacky/Nginx-UI/router"
  12. "github.com/0xJacky/Nginx-UI/settings"
  13. "github.com/gin-gonic/gin"
  14. "github.com/jpillora/overseer"
  15. "github.com/uozi-tech/cosy"
  16. cKernel "github.com/uozi-tech/cosy/kernel"
  17. "github.com/uozi-tech/cosy/logger"
  18. cRouter "github.com/uozi-tech/cosy/router"
  19. cSettings "github.com/uozi-tech/cosy/settings"
  20. )
  21. //go:generate go run cmd/version/generate.go
  22. func Program(confPath string) func(state overseer.State) {
  23. return func(state overseer.State) {
  24. defer logger.Sync()
  25. defer logger.Info("Server exited")
  26. cosy.RegisterModels(model.GenerateAllModel()...)
  27. cosy.RegisterInitFunc(kernel.Boot, router.InitRouter)
  28. // Initialize settings package
  29. settings.Init(confPath)
  30. // Set gin mode
  31. gin.SetMode(cSettings.ServerSettings.RunMode)
  32. // Initialize logger package
  33. logger.Init(cSettings.ServerSettings.RunMode)
  34. defer logger.Sync()
  35. if state.Listener == nil {
  36. return
  37. }
  38. // Gin router initialization
  39. cRouter.Init()
  40. // Kernel boot
  41. cKernel.Boot()
  42. addr := fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port)
  43. srv := &http.Server{
  44. Addr: addr,
  45. Handler: cRouter.GetEngine(),
  46. }
  47. var err error
  48. if cSettings.ServerSettings.EnableHTTPS {
  49. // Convert SSL certificate and key paths to absolute paths if they are relative
  50. sslCert := system.GetAbsolutePath(cSettings.ServerSettings.SSLCert)
  51. sslKey := system.GetAbsolutePath(cSettings.ServerSettings.SSLKey)
  52. logger.Info("Starting HTTPS server")
  53. err = srv.ServeTLS(state.Listener, sslCert, sslKey)
  54. } else {
  55. logger.Info("Starting HTTP server")
  56. err = srv.Serve(state.Listener)
  57. }
  58. if err != nil && !errors.Is(err, http.ErrServerClosed) {
  59. logger.Fatalf("listen: %s\n", err)
  60. }
  61. }
  62. }
  63. func main() {
  64. appCmd := cmd.NewAppCmd()
  65. confPath := appCmd.String("config")
  66. settings.Init(confPath)
  67. overseer.Run(overseer.Config{
  68. Program: Program(confPath),
  69. Address: fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port),
  70. TerminateTimeout: 5 * time.Second,
  71. })
  72. }