diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 18d210b58..48eff076d 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -178,7 +178,7 @@ func main() { } go apiThird.MinioInit() - ginPort := flag.Int("port", 10002, "get ginServerPort from cmd,default 10000 as port") + ginPort := flag.Int("port", 10002, "get ginServerPort from cmd,default 10002 as port") flag.Parse() fmt.Println("start api server, port: ", *ginPort) err := r.Run(":" + strconv.Itoa(*ginPort)) diff --git a/config/config.yaml b/config/config.yaml index b545fcce9..c212a7002 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -59,6 +59,11 @@ kafka: #如果是单机模式,用0.0.0.0或者不填,默认即可 serverip: 0.0.0.0 +rpcRegisterIP: 127.0.0.1 +listenIP: 0.0.0.0 + + + # endpoints 内部组件间访问的端点host名称,访问时,可以内部直接访问 host:port 来访问 endpoints: api: openim_api diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 9e738d1a0..ad3a2c4d4 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -11,9 +11,9 @@ import ( "bytes" "context" "encoding/gob" - "fmt" "github.com/golang/protobuf/proto" "net" + "strconv" "strings" "github.com/gorilla/websocket" @@ -34,24 +34,37 @@ func (r *RPCServer) onInit(rpcPort int) { r.etcdAddr = config.Config.Etcd.EtcdAddr } func (r *RPCServer) run() { - ip := utils.ServerIP - registerAddress := ip + ":" + utils.IntToString(r.rpcPort) - listener, err := net.Listen("tcp", registerAddress) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(r.rpcPort) + listener, err := net.Listen("tcp", address) if err != nil { - log.ErrorByArgs(fmt.Sprintf("fail to listening consumer, err:%v\n", err)) + log.Error("", "fail to listening consumer failed ", err.Error(), address) return } defer listener.Close() srv := grpc.NewServer() defer srv.GracefulStop() pbRelay.RegisterOnlineMessageRelayServiceServer(srv, r) - err = getcdv3.RegisterEtcd4Unique(r.etcdSchema, strings.Join(r.etcdAddr, ","), ip, r.rpcPort, r.rpcRegisterName, 10) + + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd4Unique(r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName, 10) if err != nil { - log.ErrorByKv("register push message rpc to etcd err", "", "err", err.Error()) + log.Error("", "register push message rpc to etcd err", "", "err", err.Error(), r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName) } err = srv.Serve(listener) if err != nil { - log.ErrorByKv("push message rpc listening err", "", "err", err.Error()) + log.Error("", "push message rpc listening err", "", "err", err.Error()) return } } diff --git a/internal/push/logic/push_rpc_server.go b/internal/push/logic/push_rpc_server.go index b622ba721..a33ba68b5 100644 --- a/internal/push/logic/push_rpc_server.go +++ b/internal/push/logic/push_rpc_server.go @@ -9,6 +9,7 @@ import ( "context" "google.golang.org/grpc" "net" + "strconv" "strings" ) @@ -26,24 +27,38 @@ func (r *RPCServer) Init(rpcPort int) { r.etcdAddr = config.Config.Etcd.EtcdAddr } func (r *RPCServer) run() { - ip := utils.ServerIP - registerAddress := ip + ":" + utils.IntToString(r.rpcPort) - listener, err := net.Listen("tcp", registerAddress) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(r.rpcPort) + + listener, err := net.Listen("tcp", address) if err != nil { - log.ErrorByKv("push module rpc listening port err", "", "err", err.Error()) + log.Error("", "push module rpc listening port err", err.Error(), address) return } defer listener.Close() srv := grpc.NewServer() defer srv.GracefulStop() pbPush.RegisterPushMsgServiceServer(srv, r) - err = getcdv3.RegisterEtcd(r.etcdSchema, strings.Join(r.etcdAddr, ","), ip, r.rpcPort, r.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + + err = getcdv3.RegisterEtcd(r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName, 10) if err != nil { - log.ErrorByKv("register push module rpc to etcd err", "", "err", err.Error()) + log.Error("", "register push module rpc to etcd err", err.Error(), r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName) } err = srv.Serve(listener) if err != nil { - log.ErrorByKv("push module rpc start err", "", "err", err.Error()) + log.Error("", "push module rpc start err", err.Error()) return } } diff --git a/internal/rpc/admin_cms/admin_cms.go b/internal/rpc/admin_cms/admin_cms.go index 156748bbc..3a3f7dffd 100644 --- a/internal/rpc/admin_cms/admin_cms.go +++ b/internal/rpc/admin_cms/admin_cms.go @@ -35,22 +35,35 @@ func NewAdminCMSServer(port int) *adminCMSServer { func (s *adminCMSServer) Run() { log.NewInfo("0", "AdminCMS rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) + //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "Listen failed ", err.Error(), registerAddress) + log.NewError("0", "Listen failed ", err.Error(), address) return } - log.NewInfo("0", "listen network success, ", registerAddress, listener) + log.NewInfo("0", "listen network success, ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd pbAdminCMS.RegisterAdminCMSServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) return diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 15927bf5b..1de8f16c7 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -79,7 +79,13 @@ func (rpc *rpcAuth) Run() { operationID := utils.OperationIDGenerator() log.NewInfo(operationID, "rpc auth start...") - address := utils.ServerIP + ":" + strconv.Itoa(rpc.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(rpc.rpcPort) listener, err := net.Listen("tcp", address) if err != nil { log.NewError(operationID, "listen network failed ", err.Error(), address) @@ -92,13 +98,21 @@ func (rpc *rpcAuth) Run() { //service registers with etcd pbAuth.RegisterAuthServer(srv, rpc) - err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + + err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { log.NewError(operationID, "RegisterEtcd failed ", err.Error(), - rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) + rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName) return } - log.NewInfo(operationID, "RegisterAuthServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) + log.NewInfo(operationID, "RegisterAuthServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName) err = srv.Serve(listener) if err != nil { log.NewError(operationID, "Serve failed ", err.Error()) diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go index 5fb32a2d3..4101f5d6a 100644 --- a/internal/rpc/cache/cache.go +++ b/internal/rpc/cache/cache.go @@ -37,15 +37,20 @@ func NewCacheServer(port int) *cacheServer { func (s *cacheServer) Run() { log.NewInfo("0", "cacheServer rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "Listen failed ", err.Error(), registerAddress) + log.NewError("0", "Listen failed ", err.Error(), address) return } - log.NewInfo("0", "listen network success, ", registerAddress, listener) + log.NewInfo("0", "listen network success, ", address, listener) defer listener.Close() //grpc server @@ -59,7 +64,16 @@ func (s *cacheServer) Run() { srv := grpc.NewServer() defer srv.GracefulStop() pbCache.RegisterCacheServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) return diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 7012e0924..eb08f74a4 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -138,7 +138,14 @@ func NewRpcConversationServer(port int) *rpcConversation { func (rpc *rpcConversation) Run() { log.NewInfo("0", "rpc conversation start...") - address := utils.ServerIP + ":" + strconv.Itoa(rpc.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(rpc.rpcPort) + listener, err := net.Listen("tcp", address) if err != nil { log.NewError("0", "listen network failed ", err.Error(), address) @@ -151,13 +158,20 @@ func (rpc *rpcConversation) Run() { //service registers with etcd pbConversation.RegisterConversationServer(srv, rpc) - err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error(), - rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) + rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName) return } - log.NewInfo("0", "RegisterConversationServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) + log.NewInfo("0", "RegisterConversationServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName) err = srv.Serve(listener) if err != nil { log.NewError("0", "Serve failed ", err.Error()) diff --git a/internal/rpc/friend/firend.go b/internal/rpc/friend/firend.go index 08d40a682..5941739c5 100644 --- a/internal/rpc/friend/firend.go +++ b/internal/rpc/friend/firend.go @@ -42,24 +42,38 @@ func NewFriendServer(port int) *friendServer { func (s *friendServer) Run() { log.NewInfo("0", "friendServer run...") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) + //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "Listen failed ", err.Error(), registerAddress) + log.NewError("0", "Listen failed ", err.Error(), address) return } - log.NewInfo("0", "listen ok ", registerAddress) + log.NewInfo("0", "listen ok ", address) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //User friend related services register to etcd pbFriend.RegisterFriendServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { - log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName) + log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName) return } err = srv.Serve(listener) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 4266631f8..2c072f7ad 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -44,22 +44,35 @@ func NewGroupServer(port int) *groupServer { func (s *groupServer) Run() { log.NewInfo("", "group rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("", "Listen failed ", err.Error(), registerAddress) + log.NewError("", "Listen failed ", err.Error(), address) return } - log.NewInfo("", "listen network success, ", registerAddress, listener) + log.NewInfo("", "listen network success, ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd pbGroup.RegisterGroupServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("", "RegisterEtcd failed ", err.Error()) return diff --git a/internal/rpc/message_cms/message_cms.go b/internal/rpc/message_cms/message_cms.go index 7f27e007a..40609de7c 100644 --- a/internal/rpc/message_cms/message_cms.go +++ b/internal/rpc/message_cms/message_cms.go @@ -6,6 +6,7 @@ import ( "Open_IM/pkg/common/db" errors "Open_IM/pkg/common/http" "context" + "strconv" "Open_IM/pkg/common/log" @@ -17,7 +18,6 @@ import ( "Open_IM/pkg/utils" "net" - "strconv" "strings" "google.golang.org/grpc" @@ -42,22 +42,36 @@ func NewMessageCMSServer(port int) *messageCMSServer { func (s *messageCMSServer) Run() { log.NewInfo("0", "messageCMS rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) + //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "Listen failed ", err.Error(), registerAddress) + log.NewError("0", "Listen failed ", err.Error(), address) return } - log.NewInfo("0", "listen network success, ", registerAddress, listener) + log.NewInfo("0", "listen network success, ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd pbMessageCMS.RegisterMessageCMSServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) return diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 82c4ad37b..e49d90a6d 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -35,33 +35,42 @@ func NewRpcChatServer(port int) *rpcChat { } func (rpc *rpcChat) Run() { - log.Info("", "", "rpc get_token init...") - - address := utils.ServerIP + ":" + strconv.Itoa(rpc.rpcPort) + log.Info("", "rpcChat init...") + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(rpc.rpcPort) listener, err := net.Listen("tcp", address) if err != nil { - log.Error("", "", "listen network failed, err = %s, address = %s", err.Error(), address) + log.Error("", "listen network failed ", err.Error(), address) return } - log.Info("", "", "listen network success, address = ", address) + log.Info("", "listen network success, address ", address) - //grpc server srv := grpc.NewServer() defer srv.GracefulStop() - //service registers with etcd - + rpcRegisterIP := "" pbChat.RegisterChatServer(srv, rpc) - err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName, 10) + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { - log.Error("", "", "register rpc get_token to etcd failed, err = %s", err.Error()) + log.Error("", "register rpcChat to etcd failed ", err.Error()) return } err = srv.Serve(listener) if err != nil { - log.Info("", "", "rpc get_token fail, err = %s", err.Error()) + log.Error("", "rpc rpcChat failed ", err.Error()) return } - log.Info("", "", "rpc get_token init success") + log.Info("", "rpc rpcChat init success") } diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index c51c5d37b..e08cf2794 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -39,22 +39,35 @@ func NewOfficeServer(port int) *officeServer { func (s *officeServer) Run() { log.NewInfo("0", "officeServer rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "Listen failed ", err.Error(), registerAddress) + log.NewError("0", "Listen failed ", err.Error(), address) return } - log.NewInfo("0", "listen network success, ", registerAddress, listener) + log.NewInfo("0", "listen network success, ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd pbOffice.RegisterOfficeServiceServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) return diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index d9f503d69..8dd512dcf 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -40,27 +40,39 @@ func NewServer(port int) *organizationServer { func (s *organizationServer) Run() { log.NewInfo("", "organization rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("", "Listen failed ", err.Error(), registerAddress) + log.NewError("", "Listen failed ", err.Error(), address) return } - log.NewInfo("", "listen network success, ", registerAddress, listener) + log.NewInfo("", "listen network success, ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd rpc.RegisterOrganizationServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("", "RegisterEtcd failed ", err.Error()) return } - log.NewInfo("", "organization rpc RegisterEtcd success", ip, s.rpcPort, s.rpcRegisterName, 10) + log.NewInfo("", "organization rpc RegisterEtcd success", rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) err = srv.Serve(listener) if err != nil { log.NewError("", "Serve failed ", err.Error()) diff --git a/internal/rpc/statistics/statistics.go b/internal/rpc/statistics/statistics.go index cda164332..d7100c50d 100644 --- a/internal/rpc/statistics/statistics.go +++ b/internal/rpc/statistics/statistics.go @@ -4,6 +4,7 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "context" + "strconv" "sync" "time" @@ -21,7 +22,6 @@ import ( //"context" errors "Open_IM/pkg/common/http" "net" - "strconv" "strings" "google.golang.org/grpc" @@ -46,22 +46,36 @@ func NewStatisticsServer(port int) *statisticsServer { func (s *statisticsServer) Run() { log.NewInfo("0", "Statistics rpc start ") - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) + //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "Listen failed ", err.Error(), registerAddress) + log.NewError("0", "Listen failed ", err.Error(), address) return } - log.NewInfo("0", "listen network success, ", registerAddress, listener) + log.NewInfo("0", "listen network success, ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd pbStatistics.RegisterUserServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) return diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 7ed1059ed..abb3b0a34 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -42,26 +42,39 @@ func NewUserServer(port int) *userServer { } func (s *userServer) Run() { - log.NewInfo("0", "", "rpc user start...") + log.NewInfo("0", "rpc user start...") + + listenIP := "" + if config.Config.ListenIP == "" { + listenIP = "0.0.0.0" + } else { + listenIP = config.Config.ListenIP + } + address := listenIP + ":" + strconv.Itoa(s.rpcPort) - ip := utils.ServerIP - registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) //listener network - listener, err := net.Listen("tcp", registerAddress) + listener, err := net.Listen("tcp", address) if err != nil { - log.NewError("0", "listen network failed ", err.Error(), registerAddress) + log.NewError("0", "listen network failed ", err.Error(), address) return } - log.NewInfo("0", "listen network success, address ", registerAddress, listener) + log.NewInfo("0", "listen network success, address ", address, listener) defer listener.Close() //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //Service registers with etcd pbUser.RegisterUserServer(srv, s) - err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + rpcRegisterIP := "" + if config.Config.RpcRegisterIP == "" { + rpcRegisterIP, err = utils.GetLocalIP() + if err != nil { + log.Error("", "GetLocalIP failed ", err.Error()) + } + } + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { - log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName) + log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName) return } err = srv.Serve(listener) diff --git a/internal/utils/get_server_ip_test.go b/internal/utils/get_server_ip_test.go index de15537cb..d4b585bf7 100644 --- a/internal/utils/get_server_ip_test.go +++ b/internal/utils/get_server_ip_test.go @@ -1,13 +1 @@ package utils - -import ( - "Open_IM/pkg/utils" - "net" - "testing" -) - -func TestServerIP(t *testing.T) { - if net.ParseIP(utils.ServerIP) == nil { - t.Fail() - } -} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 1ec02ddae..5067ba4ec 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -24,7 +24,11 @@ type callBackConfig struct { } type config struct { - ServerIP string `yaml:"serverip"` + ServerIP string `yaml:"serverip"` + + RpcRegisterIP string `yaml:"rpcRegisterIP"` + ListenIP string `yaml:"listenIP"` + ServerVersion string `yaml:"serverversion"` Api struct { GinPort []int `yaml:"openImApiPort"` diff --git a/pkg/utils/get_server_ip.go b/pkg/utils/get_server_ip.go index 239c75a19..63156f26f 100644 --- a/pkg/utils/get_server_ip.go +++ b/pkg/utils/get_server_ip.go @@ -1,26 +1,28 @@ package utils import ( - "Open_IM/pkg/common/config" + "errors" + "fmt" "net" ) var ServerIP = "" -func init() { - //fixme In the configuration file, ip takes precedence, if not, get the valid network card ip of the machine - if config.Config.ServerIP != "" { - ServerIP = config.Config.ServerIP - return - } - - // see https://gist.github.com/jniltinho/9787946#gistcomment-3019898 - conn, err := net.Dial("udp", "8.8.8.8:80") +func GetLocalIP() (string, error) { + addrs, err := net.InterfaceAddrs() if err != nil { - panic(err.Error()) + + return "", err + } + for _, address := range addrs { + + if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet.IP.To4() != nil { + fmt.Println(ipnet.IP.String()) + return ipnet.IP.String(), nil + } + } } - defer conn.Close() - localAddr := conn.LocalAddr().(*net.UDPAddr) - ServerIP = localAddr.IP.String() + return "", errors.New("no ip") }