mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
feat: support listening on a UNIX socket (#4654)
This commit is contained in:
@@ -39,6 +39,7 @@ var (
|
|||||||
Mode: viper.GetString("mode"),
|
Mode: viper.GetString("mode"),
|
||||||
Addr: viper.GetString("addr"),
|
Addr: viper.GetString("addr"),
|
||||||
Port: viper.GetInt("port"),
|
Port: viper.GetInt("port"),
|
||||||
|
UNIXSock: viper.GetString("unix-sock"),
|
||||||
Data: viper.GetString("data"),
|
Data: viper.GetString("data"),
|
||||||
Driver: viper.GetString("driver"),
|
Driver: viper.GetString("driver"),
|
||||||
DSN: viper.GetString("dsn"),
|
DSN: viper.GetString("dsn"),
|
||||||
@@ -106,6 +107,7 @@ func init() {
|
|||||||
rootCmd.PersistentFlags().String("mode", "dev", `mode of server, can be "prod" or "dev" or "demo"`)
|
rootCmd.PersistentFlags().String("mode", "dev", `mode of server, can be "prod" or "dev" or "demo"`)
|
||||||
rootCmd.PersistentFlags().String("addr", "", "address of server")
|
rootCmd.PersistentFlags().String("addr", "", "address of server")
|
||||||
rootCmd.PersistentFlags().Int("port", 8081, "port of server")
|
rootCmd.PersistentFlags().Int("port", 8081, "port of server")
|
||||||
|
rootCmd.PersistentFlags().String("unix-sock", "", "path to the unix socket, overrides --addr and --port")
|
||||||
rootCmd.PersistentFlags().String("data", "", "data directory")
|
rootCmd.PersistentFlags().String("data", "", "data directory")
|
||||||
rootCmd.PersistentFlags().String("driver", "sqlite", "database driver")
|
rootCmd.PersistentFlags().String("driver", "sqlite", "database driver")
|
||||||
rootCmd.PersistentFlags().String("dsn", "", "database source name(aka. DSN)")
|
rootCmd.PersistentFlags().String("dsn", "", "database source name(aka. DSN)")
|
||||||
@@ -120,6 +122,9 @@ func init() {
|
|||||||
if err := viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port")); err != nil {
|
if err := viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port")); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
if err := viper.BindPFlag("unix-sock", rootCmd.PersistentFlags().Lookup("unix-sock")); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
if err := viper.BindPFlag("data", rootCmd.PersistentFlags().Lookup("data")); err != nil {
|
if err := viper.BindPFlag("data", rootCmd.PersistentFlags().Lookup("data")); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@@ -151,16 +156,21 @@ version: %s
|
|||||||
data: %s
|
data: %s
|
||||||
addr: %s
|
addr: %s
|
||||||
port: %d
|
port: %d
|
||||||
|
unix-sock: %s
|
||||||
mode: %s
|
mode: %s
|
||||||
driver: %s
|
driver: %s
|
||||||
---
|
---
|
||||||
`, profile.Version, profile.Data, profile.Addr, profile.Port, profile.Mode, profile.Driver)
|
`, profile.Version, profile.Data, profile.Addr, profile.Port, profile.UNIXSock, profile.Mode, profile.Driver)
|
||||||
|
|
||||||
print(greetingBanner)
|
print(greetingBanner)
|
||||||
if len(profile.Addr) == 0 {
|
if len(profile.UNIXSock) == 0 {
|
||||||
fmt.Printf("Version %s has been started on port %d\n", profile.Version, profile.Port)
|
if len(profile.Addr) == 0 {
|
||||||
|
fmt.Printf("Version %s has been started on port %d\n", profile.Version, profile.Port)
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Version %s has been started on address '%s' and port %d\n", profile.Version, profile.Addr, profile.Port)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("Version %s has been started on address '%s' and port %d\n", profile.Version, profile.Addr, profile.Port)
|
fmt.Printf("Version %s has been started on unix socket %s\n", profile.Version, profile.UNIXSock)
|
||||||
}
|
}
|
||||||
fmt.Printf(`---
|
fmt.Printf(`---
|
||||||
See more in:
|
See more in:
|
||||||
|
@@ -19,6 +19,8 @@ type Profile struct {
|
|||||||
Addr string
|
Addr string
|
||||||
// Port is the binding port for server
|
// Port is the binding port for server
|
||||||
Port int
|
Port int
|
||||||
|
// UNIXSock is the IPC binding path. Overrides Addr and Port
|
||||||
|
UNIXSock string
|
||||||
// Data is the data directory
|
// Data is the data directory
|
||||||
Data string
|
Data string
|
||||||
// DSN points to where memos stores its own data
|
// DSN points to where memos stores its own data
|
||||||
|
@@ -67,8 +67,14 @@ func NewAPIV1Service(secret string, profile *profile.Profile, store *store.Store
|
|||||||
|
|
||||||
// RegisterGateway registers the gRPC-Gateway with the given Echo instance.
|
// RegisterGateway registers the gRPC-Gateway with the given Echo instance.
|
||||||
func (s *APIV1Service) RegisterGateway(ctx context.Context, echoServer *echo.Echo) error {
|
func (s *APIV1Service) RegisterGateway(ctx context.Context, echoServer *echo.Echo) error {
|
||||||
|
var target string
|
||||||
|
if len(s.Profile.UNIXSock) == 0 {
|
||||||
|
target = fmt.Sprintf("%s:%d", s.Profile.Addr, s.Profile.Port)
|
||||||
|
} else {
|
||||||
|
target = fmt.Sprintf("unix:%s", s.Profile.UNIXSock)
|
||||||
|
}
|
||||||
conn, err := grpc.NewClient(
|
conn, err := grpc.NewClient(
|
||||||
fmt.Sprintf("%s:%d", s.Profile.Addr, s.Profile.Port),
|
target,
|
||||||
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
||||||
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)),
|
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)),
|
||||||
)
|
)
|
||||||
|
@@ -93,8 +93,15 @@ func NewServer(ctx context.Context, profile *profile.Profile, store *store.Store
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Start(ctx context.Context) error {
|
func (s *Server) Start(ctx context.Context) error {
|
||||||
address := fmt.Sprintf("%s:%d", s.Profile.Addr, s.Profile.Port)
|
var address, network string
|
||||||
listener, err := net.Listen("tcp", address)
|
if len(s.Profile.UNIXSock) == 0 {
|
||||||
|
address = fmt.Sprintf("%s:%d", s.Profile.Addr, s.Profile.Port)
|
||||||
|
network = "tcp"
|
||||||
|
} else {
|
||||||
|
address = s.Profile.UNIXSock
|
||||||
|
network = "unix"
|
||||||
|
}
|
||||||
|
listener, err := net.Listen(network, address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to listen")
|
return errors.Wrap(err, "failed to listen")
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user