setup_server.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package http_server
  2. import (
  3. "flag"
  4. "fmt"
  5. log "github.com/sirupsen/logrus"
  6. "io/fs"
  7. "net/http"
  8. "pmail/config"
  9. "pmail/controllers"
  10. "pmail/utils/ip"
  11. "time"
  12. )
  13. // 项目初始化引导用的服务,初始化引导结束后即退出
  14. var setupServer *http.Server
  15. func SetupStart() {
  16. mux := http.NewServeMux()
  17. fe, err := fs.Sub(local, "dist")
  18. if err != nil {
  19. panic(err)
  20. }
  21. mux.Handle("/", http.FileServer(http.FS(fe)))
  22. mux.HandleFunc("/api/", contextIterceptor(controllers.Setup))
  23. // 挑战请求类似这样 /.well-known/acme-challenge/QPyMAyaWw9s5JvV1oruyqWHG7OqkHMJEHPoUz2046KM
  24. mux.HandleFunc("/.well-known/", controllers.AcmeChallenge)
  25. HttpPort := 80
  26. flag.IntVar(&HttpPort, "p", 80, "初始化阶段Http服务端口")
  27. flag.Parse()
  28. config.Instance.SetSetupPort(HttpPort)
  29. log.Infof("HttpServer Start On Port :%d", HttpPort)
  30. if HttpPort == 80 {
  31. log.Infof("Please click http://%s to continue.\n", ip.GetIp())
  32. } else {
  33. log.Infof("Please click http://%s:%d to continue.", ip.GetIp(), HttpPort)
  34. }
  35. setupServer = &http.Server{
  36. Addr: fmt.Sprintf(":%d", HttpPort),
  37. Handler: mux,
  38. ReadTimeout: time.Second * 60,
  39. WriteTimeout: time.Second * 60,
  40. }
  41. err = setupServer.ListenAndServe()
  42. if err != nil && err != http.ErrServerClosed {
  43. panic(err)
  44. }
  45. }
  46. func SetupStop() {
  47. err := setupServer.Close()
  48. if err != nil {
  49. panic(err)
  50. }
  51. }