server.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package server
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/internal/analytic"
  4. "github.com/0xJacky/Nginx-UI/server/internal/cert"
  5. "github.com/0xJacky/Nginx-UI/server/internal/nginx"
  6. "github.com/0xJacky/Nginx-UI/server/model"
  7. "github.com/0xJacky/Nginx-UI/server/query"
  8. "github.com/0xJacky/Nginx-UI/server/router"
  9. "github.com/0xJacky/Nginx-UI/server/settings"
  10. "github.com/go-co-op/gocron"
  11. "github.com/jpillora/overseer"
  12. "log"
  13. "mime"
  14. "net/http"
  15. "time"
  16. )
  17. func Program(state overseer.State) {
  18. // Hack: fix wrong Content Type of .js file on some OS platforms
  19. // See https://github.com/golang/go/issues/32350
  20. _ = mime.AddExtensionType(".js", "text/javascript; charset=utf-8")
  21. log.Printf("Nginx config dir path: %s", nginx.GetConfPath())
  22. if "" != settings.ServerSettings.JwtSecret {
  23. db := model.Init()
  24. query.Init(db)
  25. }
  26. s := gocron.NewScheduler(time.UTC)
  27. job, err := s.Every(30).Minute().SingletonMode().Do(cert.AutoObtain)
  28. if err != nil {
  29. log.Fatalf("AutoCert Job: %v, Err: %v\n", job, err)
  30. }
  31. s.StartAsync()
  32. go analytic.RecordServerAnalytic()
  33. err = http.Serve(state.Listener, router.InitRouter())
  34. if err != nil {
  35. log.Fatalln(err)
  36. }
  37. log.Println("[Nginx UI] server exiting")
  38. }