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,