setup_server.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package http_server
  2. import (
  3. "fmt"
  4. "io/fs"
  5. "net/http"
  6. "pmail/config"
  7. "pmail/controllers"
  8. "time"
  9. )
  10. var ip string
  11. // 项目初始化引导用的服务,初始化引导结束后即退出
  12. var setupServer *http.Server
  13. func SetupStart() {
  14. mux := http.NewServeMux()
  15. fe, err := fs.Sub(local, "dist")
  16. if err != nil {
  17. panic(err)
  18. }
  19. mux.Handle("/", http.FileServer(http.FS(fe)))
  20. mux.HandleFunc("/api/", contextIterceptor(controllers.Setup))
  21. // 挑战请求类似这样 /.well-known/acme-challenge/QPyMAyaWw9s5JvV1oruyqWHG7OqkHMJEHPoUz2046KM
  22. mux.HandleFunc("/.well-known/", controllers.AcmeChallenge)
  23. HttpPort := 80
  24. if config.Instance != nil && config.Instance.HttpPort > 0 {
  25. HttpPort = config.Instance.HttpPort
  26. }
  27. setupServer = &http.Server{
  28. Addr: fmt.Sprintf(":%d", HttpPort),
  29. Handler: mux,
  30. ReadTimeout: time.Second * 60,
  31. WriteTimeout: time.Second * 60,
  32. }
  33. err = setupServer.ListenAndServe()
  34. if err != nil && err != http.ErrServerClosed {
  35. panic(err)
  36. }
  37. }
  38. func SetupStop() {
  39. err := setupServer.Close()
  40. if err != nil {
  41. panic(err)
  42. }
  43. }