From 035b2c022bfd2b98f13355ec7a126e0f1ab3ebd8 Mon Sep 17 00:00:00 2001 From: Mr Snake Date: Fri, 6 Jun 2025 15:01:19 +0800 Subject: [PATCH] feat: add unix socket support (#615) --- backend/internal/bootstrap/router_bootstrap.go | 14 ++++++++++---- backend/internal/common/env_config.go | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/internal/bootstrap/router_bootstrap.go b/backend/internal/bootstrap/router_bootstrap.go index 4993079c..5f20e53f 100644 --- a/backend/internal/bootstrap/router_bootstrap.go +++ b/backend/internal/bootstrap/router_bootstrap.go @@ -101,21 +101,27 @@ func initRouterInternal(db *gorm.DB, svc *services) (utils.Service, error) { // Set up the server srv := &http.Server{ - Addr: net.JoinHostPort(common.EnvConfig.Host, common.EnvConfig.Port), MaxHeaderBytes: 1 << 20, ReadHeaderTimeout: 10 * time.Second, Handler: r, } // Set up the listener - listener, err := net.Listen("tcp", srv.Addr) + network := "tcp" + addr := net.JoinHostPort(common.EnvConfig.Host, common.EnvConfig.Port) + if common.EnvConfig.UnixSocket != "" { + network = "unix" + addr = common.EnvConfig.UnixSocket + } + + listener, err := net.Listen(network, addr) if err != nil { - return nil, fmt.Errorf("failed to create TCP listener: %w", err) + return nil, fmt.Errorf("failed to create %s listener: %w", network, err) } // Service runner function runFn := func(ctx context.Context) error { - log.Printf("Server listening on %s", srv.Addr) + log.Printf("Server listening on %s", addr) // Start the server in a background goroutine go func() { diff --git a/backend/internal/common/env_config.go b/backend/internal/common/env_config.go index 00d69175..65b8a918 100644 --- a/backend/internal/common/env_config.go +++ b/backend/internal/common/env_config.go @@ -32,6 +32,7 @@ type EnvConfigSchema struct { KeysPath string `env:"KEYS_PATH"` Port string `env:"PORT"` Host string `env:"HOST"` + UnixSocket string `env:"UNIX_SOCKET"` MaxMindLicenseKey string `env:"MAXMIND_LICENSE_KEY"` GeoLiteDBPath string `env:"GEOLITE_DB_PATH"` GeoLiteDBUrl string `env:"GEOLITE_DB_URL"` @@ -51,6 +52,7 @@ var EnvConfig = &EnvConfigSchema{ AppURL: "http://localhost:1411", Port: "1411", Host: "0.0.0.0", + UnixSocket: "", MaxMindLicenseKey: "", GeoLiteDBPath: "data/GeoLite2-City.mmdb", GeoLiteDBUrl: MaxMindGeoLiteCityUrl,