main.go 2.2 KB

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