main.go 2.4 KB

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