import (
"fmt"
- "net"
"net/http"
- "net/http/fcgi"
_ "net/http/pprof" // Used for debugging if enabled and a web server is running
"os"
"strings"
err = runHTTPS("tcp", listenAddr, setting.CertFile, setting.KeyFile, context2.ClearHandler(m))
case setting.FCGI:
NoHTTPRedirector()
- // FCGI listeners are provided as stdin - this is orthogonal to the LISTEN_FDS approach
- // in graceful and systemD
- NoMainListener()
- var listener net.Listener
- listener, err = net.Listen("tcp", listenAddr)
- if err != nil {
- log.Fatal("Failed to bind %s: %v", listenAddr, err)
- }
- defer func() {
- if err := listener.Close(); err != nil {
- log.Fatal("Failed to stop server: %v", err)
- }
- }()
- err = fcgi.Serve(listener, context2.ClearHandler(m))
+ err = runFCGI(listenAddr, context2.ClearHandler(m))
case setting.UnixSocket:
NoHTTPRedirector()
err = runHTTP("unix", listenAddr, context2.ClearHandler(m))
import (
"crypto/tls"
+ "net"
"net/http"
+ "net/http/fcgi"
"code.gitea.io/gitea/modules/graceful"
+ "code.gitea.io/gitea/modules/log"
)
func runHTTP(network, listenAddr string, m http.Handler) error {
func NoMainListener() {
graceful.Manager.InformCleanup()
}
+
+func runFCGI(listenAddr string, m http.Handler) error {
+ // This needs to handle stdin as fcgi point
+ fcgiServer := graceful.NewServer("tcp", listenAddr)
+
+ err := fcgiServer.ListenAndServe(func(listener net.Listener) error {
+ return fcgi.Serve(listener, m)
+ })
+ if err != nil {
+ log.Fatal("Failed to start FCGI main server: %v", err)
+ }
+ log.Info("FCGI Listener: %s Closed", listenAddr)
+ return err
+}