From a26723aa5f7318bb0bdda2a6df1e1662df20674e Mon Sep 17 00:00:00 2001 From: Mr Snake Date: Mon, 11 May 2026 02:22:23 +0800 Subject: [PATCH 1/2] Remove unused client_bundle/client_bundle symlink (#1976) --- client_bundle/client_bundle | 1 - 1 file changed, 1 deletion(-) delete mode 120000 client_bundle/client_bundle diff --git a/client_bundle/client_bundle b/client_bundle/client_bundle deleted file mode 120000 index 16bb0de8..00000000 --- a/client_bundle/client_bundle +++ /dev/null @@ -1 +0,0 @@ -../silverbullet/client_bundle \ No newline at end of file From 2bf105a1f0d67feac323164d1f625ebdeeefd155 Mon Sep 17 00:00:00 2001 From: Mr Snake Date: Mon, 11 May 2026 11:40:21 +0800 Subject: [PATCH 2/2] Add UNIX socket support for server (#1975) --- server/cmd/server.go | 4 ++++ server/server.go | 19 +++++++++++++++---- server/types.go | 1 + website/Install/Configuration.md | 1 + 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/server/cmd/server.go b/server/cmd/server.go index 9b982f83..27c09260 100644 --- a/server/cmd/server.go +++ b/server/cmd/server.go @@ -49,6 +49,10 @@ func buildConfig(bundledFiles fs.FS, args []string, buildTime string) *server.Se serverConfig.Port = int(port) } + if os.Getenv("SB_UNIX_SOCKET") != "" { + serverConfig.UnixSocket = os.Getenv("SB_UNIX_SOCKET") + } + if os.Getenv("SB_INDEX_PAGE") != "" { rootSpaceConfig.IndexPage = os.Getenv("SB_INDEX_PAGE") } diff --git a/server/server.go b/server/server.go index cfc6172d..c37ebb28 100644 --- a/server/server.go +++ b/server/server.go @@ -171,18 +171,29 @@ func RunServer(config *ServerConfig) error { r := Router(config) + network := "tcp" addr := fmt.Sprintf("%s:%d", config.BindHost, config.Port) - listener, err := net.Listen("tcp", addr) + + if config.UnixSocket != "" { + network = "unix" + addr = config.UnixSocket + } + + listener, err := net.Listen(network, addr) if err != nil { return fmt.Errorf("failed to listen on %s: %w", addr, err) } // Display the final server running message - visibleHostname := config.BindHost + visibleAddr := "http://" + addr if config.BindHost == "127.0.0.1" { - visibleHostname = "localhost" + visibleAddr = fmt.Sprintf("http://localhost:%d", config.Port) } - log.Printf("SilverBullet is now running: http://%s:%d", visibleHostname, config.Port) + + if config.UnixSocket != "" { + visibleAddr = "unix://" + config.UnixSocket + } + log.Printf("SilverBullet is now running: %s", visibleAddr) server := &http.Server{ Handler: r, diff --git a/server/types.go b/server/types.go index aaf07bc2..d6c62bee 100644 --- a/server/types.go +++ b/server/types.go @@ -12,6 +12,7 @@ type ServerConfig struct { BindHost string Port int + UnixSocket string MetricsPort int EnableHTTPLogging bool // TODO: Ideally this is configurable per space, but kinda hard diff --git a/website/Install/Configuration.md b/website/Install/Configuration.md index 7cb6a61a..7c094a64 100644 --- a/website/Install/Configuration.md +++ b/website/Install/Configuration.md @@ -12,6 +12,7 @@ SilverBullet is primarily configured via environment variables. This page gives # Network * `SB_HOSTNAME`: Set to the hostname to bind to (defaults to `127.0.0.0`, set to `0.0.0.0` to accept outside connections for the local setup, defaults to `0.0.0.0` for docker) * `SB_PORT`: Sets the port to listen to, e.g. `SB_PORT=1234`, default is `3000` +* `SB_UNIX_SOCKET`: Instead of listening to a TCP port, listen to a Unix socket at the specified path, e.g. `SB_UNIX_SOCKET=/tmp/silverbullet.sock`. Note: when this is set, `SB_HOSTNAME` and `SB_PORT` are ignored. * `SB_URL_PREFIX`: Host SilverBullet on a particular URL prefix, e.g. `SB_URL_PREFIX=/notes` # Authentication