From 947c1f0abed7a92626c8eb5d86a91a20fdad9e8f Mon Sep 17 00:00:00 2001 From: chao <48119764+withchao@users.noreply.github.com> Date: Tue, 23 Apr 2024 19:35:41 +0800 Subject: [PATCH 01/15] fix: gin log and rpc mw (#499) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: ptr * feat: go 1.19 * fix: config get env * test log * fix; login * fix: update grpc version. * fix: update grpc version. * fix: bug --------- Co-authored-by: Xinwei Xiong <3293172751NSS@gmail.com> Co-authored-by: Gordon <46924906+FGadvancer@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- internal/api/admin/start.go | 4 ++-- internal/api/chat/start.go | 4 ++-- internal/rpc/admin/start.go | 3 ++- internal/rpc/chat/start.go | 3 ++- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 1357fd854..b11884c0e 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/openimsdk/gomake v0.0.6 github.com/openimsdk/protocol v0.0.63 - github.com/openimsdk/tools v0.0.48 + github.com/openimsdk/tools v0.0.49-alpha.1 github.com/redis/go-redis/v9 v9.5.1 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.2 diff --git a/go.sum b/go.sum index d4c9121bb..b0867c341 100644 --- a/go.sum +++ b/go.sum @@ -182,8 +182,8 @@ github.com/openimsdk/gomake v0.0.6 h1:bJmQWDHBj8PQ7oGJ2SL3Gsx0k5CdI/BPfGzlGcV105 github.com/openimsdk/gomake v0.0.6/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/protocol v0.0.63 h1:9DnweZe9nEYDFa4fGTbC9Cqi0gLUdtBhRo1NRP2X3WQ= github.com/openimsdk/protocol v0.0.63/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= -github.com/openimsdk/tools v0.0.48 h1:GgRtYtMNlJ0PzCR9XQzMVDv7O+Sp8Hg9Grrlnh8HFGE= -github.com/openimsdk/tools v0.0.48/go.mod h1:P4oGP1Pd+d4ctbLD5U/XQTgl8yu8Hd3skx640Fr69ko= +github.com/openimsdk/tools v0.0.49-alpha.1 h1:LtlKh5t/1b1tNikR9LWwV9PIJclUNsVqpEzEke4CMtk= +github.com/openimsdk/tools v0.0.49-alpha.1/go.mod h1:P4oGP1Pd+d4ctbLD5U/XQTgl8yu8Hd3skx640Fr69ko= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= diff --git a/internal/api/admin/start.go b/internal/api/admin/start.go index 08bcce51c..ce30a64b8 100644 --- a/internal/api/admin/start.go +++ b/internal/api/admin/start.go @@ -60,8 +60,8 @@ func Start(ctx context.Context, index int, config *Config) error { adminApi := New(chatClient, adminClient, im, &base) mwApi := chatmw.New(adminClient) gin.SetMode(gin.ReleaseMode) - engine := gin.Default() - engine.Use(mw.CorsHandler(), mw.GinParseOperationID()) + engine := gin.New() + engine.Use(gin.Recovery(), mw.CorsHandler(), mw.GinParseOperationID()) SetAdminRoute(engine, adminApi, mwApi) return engine.Run(fmt.Sprintf(":%d", apiPort)) } diff --git a/internal/api/chat/start.go b/internal/api/chat/start.go index 6b30d235e..d5291c6ad 100644 --- a/internal/api/chat/start.go +++ b/internal/api/chat/start.go @@ -59,8 +59,8 @@ func Start(ctx context.Context, index int, config *Config) error { adminApi := New(chatClient, adminClient, im, &base) mwApi := chatmw.New(adminClient) gin.SetMode(gin.ReleaseMode) - engine := gin.Default() - engine.Use(mw.CorsHandler(), mw.GinParseOperationID()) + engine := gin.New() + engine.Use(gin.Recovery(), mw.CorsHandler(), mw.GinParseOperationID()) SetChatRoute(engine, adminApi, mwApi) return engine.Run(fmt.Sprintf(":%d", apiPort)) } diff --git a/internal/rpc/admin/start.go b/internal/rpc/admin/start.go index c8ed81ea6..36ac9801a 100644 --- a/internal/rpc/admin/start.go +++ b/internal/rpc/admin/start.go @@ -17,6 +17,7 @@ import ( "github.com/openimsdk/tools/db/redisutil" "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" + "github.com/openimsdk/tools/mw" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "math/rand" @@ -49,7 +50,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg if err != nil { return err } - conn, err := client.GetConn(ctx, config.Share.RpcRegisterName.Chat, grpc.WithTransportCredentials(insecure.NewCredentials())) + conn, err := client.GetConn(ctx, config.Share.RpcRegisterName.Chat, grpc.WithTransportCredentials(insecure.NewCredentials()), mw.GrpcClient()) if err != nil { return err } diff --git a/internal/rpc/chat/start.go b/internal/rpc/chat/start.go index 7a4a3e7dc..ed62eaeaa 100644 --- a/internal/rpc/chat/start.go +++ b/internal/rpc/chat/start.go @@ -9,6 +9,7 @@ import ( "github.com/openimsdk/tools/db/mongoutil" "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" + "github.com/openimsdk/tools/mw" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "time" @@ -52,7 +53,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg if err != nil { return err } - conn, err := client.GetConn(ctx, config.Share.RpcRegisterName.Admin, grpc.WithTransportCredentials(insecure.NewCredentials())) + conn, err := client.GetConn(ctx, config.Share.RpcRegisterName.Admin, grpc.WithTransportCredentials(insecure.NewCredentials()), mw.GrpcClient()) if err != nil { return err } From 74f8d1afebfc8890024c653430933d36aaf10960 Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Tue, 23 Apr 2024 19:41:40 +0800 Subject: [PATCH 02/15] Optimize the Dockerfile. (#502) * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile * refactor dockerFile --- .dockerignore | 4 +-- .gitignore | 1 - Dockerfile | 83 ++++++++++++++++++++++++------------------------ go.mod | 2 +- go.sum | 4 +-- start-config.yml | 8 +++++ 6 files changed, 54 insertions(+), 48 deletions(-) create mode 100644 start-config.yml diff --git a/.dockerignore b/.dockerignore index a118b899f..b52db5740 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,8 +4,8 @@ .dockerignore # Ignore build artifacts -_output/ logs/ +_output/ # Ignore non-essential documentation README.md @@ -17,8 +17,6 @@ CHANGELOG/ # Ignore testing and linting configuration .golangci.yml -# Ignore deployment-related files -docker-compose.yaml # Ignore assets assets/ diff --git a/.gitignore b/.gitignore index ea171e8a3..811715820 100644 --- a/.gitignore +++ b/.gitignore @@ -374,4 +374,3 @@ dist # config files, may contain sensitive informatio config/config.yaml -start-config.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 2ecf60a70..52e184104 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,48 +1,49 @@ -# Copyright © 2023 OpenIM open source community. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -ARG GOARCH -ARG GOOS - -# Use golang as the builder stage -FROM golang:1.21 AS builder - -ARG GO111MODULE=on -ARG GOPROXY=https://goproxy.io,direct - -WORKDIR /openim/openim-chat - -ENV GO111MODULE=$GO111MODULE -ENV GOPROXY=$GOPROXY - -COPY go.mod go.sum ./ +# Use Go 1.21 Alpine as the base image for building the application +FROM golang:1.21-alpine as builder + +# Define the base directory for the application as an environment variable +ENV SERVER_DIR=/openim-chat + +# Set the working directory inside the container based on the environment variable +WORKDIR $SERVER_DIR + +# Set the Go proxy to improve dependency resolution speed +ENV GOPROXY=https://goproxy.io,direct + +# Copy all files from the current directory into the container +COPY . . + RUN go mod download -# Copy all files to the container -ADD . . +# Install Mage to use for building the application +RUN go install github.com/magefile/mage@v1.15.0 + +# Optionally build your application if needed +RUN mage build + +# Using Alpine Linux with Go environment for the final image +FROM golang:1.21-alpine + +# Install necessary packages, such as bash +RUN apk add --no-cache bash -RUN make clean -RUN make build +# Set the environment and work directory +ENV SERVER_DIR=/openim-chat +WORKDIR $SERVER_DIR -# Build the runtime stage -FROM ghcr.io/openim-sigs/openim-ubuntu-image:latest -WORKDIR ${CHAT_WORKDIR} +# Copy the compiled binaries and mage from the builder image to the final image +COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output +COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config +COPY --from=builder /go/bin/mage /usr/local/bin/mage +COPY --from=builder $SERVER_DIR/magefile_windows.go $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/magefile_unix.go $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/magefile.go $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/start-config.yml $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/go.mod $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/go.sum $SERVER_DIR/ -COPY --from=builder ${OPENIM_CHAT_BINDIR} /openim/openim-chat/_output/bin -COPY --from=builder ${CHAT_WORKDIR}/config /openim/openim-chat/config -COPY --from=builder ${CHAT_WORKDIR}/scripts /openim/openim-chat/scripts -COPY --from=builder ${CHAT_WORKDIR}/deployments /openim/openim-chat/deployments +RUN go get github.com/openimsdk/gomake@v0.0.9-alpha.3 -CMD ["/openim/openim-chat/scripts/docker-start-all.sh"] +# Set the command to run when the container starts +ENTRYPOINT ["sh", "-c", "mage start && tail -f /dev/null"] diff --git a/go.mod b/go.mod index b11884c0e..f85546e2b 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( require ( github.com/livekit/protocol v1.10.1 github.com/mitchellh/mapstructure v1.5.0 - github.com/openimsdk/gomake v0.0.6 + github.com/openimsdk/gomake v0.0.9-alpha.3 github.com/openimsdk/protocol v0.0.63 github.com/openimsdk/tools v0.0.49-alpha.1 github.com/redis/go-redis/v9 v9.5.1 diff --git a/go.sum b/go.sum index b0867c341..ffb87ecec 100644 --- a/go.sum +++ b/go.sum @@ -178,8 +178,8 @@ github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADym github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/openimsdk/gomake v0.0.6 h1:bJmQWDHBj8PQ7oGJ2SL3Gsx0k5CdI/BPfGzlGcV105s= -github.com/openimsdk/gomake v0.0.6/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= +github.com/openimsdk/gomake v0.0.9-alpha.3 h1:KO3stbmiTksnnx2o2Lh8/FkKXc7qiF4rwPnr01WO7aM= +github.com/openimsdk/gomake v0.0.9-alpha.3/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/protocol v0.0.63 h1:9DnweZe9nEYDFa4fGTbC9Cqi0gLUdtBhRo1NRP2X3WQ= github.com/openimsdk/protocol v0.0.63/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= github.com/openimsdk/tools v0.0.49-alpha.1 h1:LtlKh5t/1b1tNikR9LWwV9PIJclUNsVqpEzEke4CMtk= diff --git a/start-config.yml b/start-config.yml new file mode 100644 index 000000000..b5b8ddc55 --- /dev/null +++ b/start-config.yml @@ -0,0 +1,8 @@ +serviceBinaries: + chat-api: 1 + chat-rpc: 1 + admin-api: 1 + admin-rpc: 1 +toolBinaries: + - check-component +maxFileDescriptors: 10000 From 7f78020911924228712b91b9f2e6ee7faf0ab427 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 23 Apr 2024 19:45:05 +0800 Subject: [PATCH 03/15] update go mod --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f85546e2b..c27621cd4 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/openimsdk/gomake v0.0.9-alpha.3 github.com/openimsdk/protocol v0.0.63 - github.com/openimsdk/tools v0.0.49-alpha.1 + github.com/openimsdk/tools v0.0.49-alpha.3 github.com/redis/go-redis/v9 v9.5.1 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.2 diff --git a/go.sum b/go.sum index ffb87ecec..322597b3f 100644 --- a/go.sum +++ b/go.sum @@ -182,8 +182,8 @@ github.com/openimsdk/gomake v0.0.9-alpha.3 h1:KO3stbmiTksnnx2o2Lh8/FkKXc7qiF4rwP github.com/openimsdk/gomake v0.0.9-alpha.3/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/protocol v0.0.63 h1:9DnweZe9nEYDFa4fGTbC9Cqi0gLUdtBhRo1NRP2X3WQ= github.com/openimsdk/protocol v0.0.63/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= -github.com/openimsdk/tools v0.0.49-alpha.1 h1:LtlKh5t/1b1tNikR9LWwV9PIJclUNsVqpEzEke4CMtk= -github.com/openimsdk/tools v0.0.49-alpha.1/go.mod h1:P4oGP1Pd+d4ctbLD5U/XQTgl8yu8Hd3skx640Fr69ko= +github.com/openimsdk/tools v0.0.49-alpha.3 h1:mXKU09asKTLjj0yCsfqqMizs3ibl1vLimW7ZYzAMw44= +github.com/openimsdk/tools v0.0.49-alpha.3/go.mod h1:P4oGP1Pd+d4ctbLD5U/XQTgl8yu8Hd3skx640Fr69ko= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= From bf781afcebd4840b3bef6e3e51f23d9ca7bc1161 Mon Sep 17 00:00:00 2001 From: chao <48119764+withchao@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:46:27 +0800 Subject: [PATCH 04/15] feat: chat admin config (#508) --- config/share.yml | 4 +--- internal/api/admin/start.go | 2 +- internal/api/chat/start.go | 2 +- internal/rpc/admin/start.go | 14 +++++++------- pkg/common/config/config.go | 10 ++-------- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/config/share.yml b/config/share.yml index 76e1b4427..2eed7bd71 100644 --- a/config/share.yml +++ b/config/share.yml @@ -9,8 +9,6 @@ openIM: adminUserID: imAdmin chatAdmin: - - adminID: chatAdmin - imUserID: imAdmin - nickname: chatAdmin + - "chatAdmin" #proxyHeader: "X-Forwarded-For" \ No newline at end of file diff --git a/internal/api/admin/start.go b/internal/api/admin/start.go index ce30a64b8..aef4602c3 100644 --- a/internal/api/admin/start.go +++ b/internal/api/admin/start.go @@ -55,7 +55,7 @@ func Start(ctx context.Context, index int, config *Config) error { base := util.Api{ ImUserID: config.Share.OpenIM.AdminUserID, ProxyHeader: config.Share.ProxyHeader, - ChatAdminUserID: config.Share.ChatAdmin[0].AdminID, + ChatAdminUserID: config.Share.ChatAdmin[0], } adminApi := New(chatClient, adminClient, im, &base) mwApi := chatmw.New(adminClient) diff --git a/internal/api/chat/start.go b/internal/api/chat/start.go index d5291c6ad..30ea80ffd 100644 --- a/internal/api/chat/start.go +++ b/internal/api/chat/start.go @@ -54,7 +54,7 @@ func Start(ctx context.Context, index int, config *Config) error { base := util.Api{ ImUserID: config.Share.OpenIM.AdminUserID, ProxyHeader: config.Share.ProxyHeader, - ChatAdminUserID: config.Share.ChatAdmin[0].AdminID, + ChatAdminUserID: config.Share.ChatAdmin[0], } adminApi := New(chatClient, adminClient, im, &base) mwApi := chatmw.New(adminClient) diff --git a/internal/rpc/admin/start.go b/internal/rpc/admin/start.go index 36ac9801a..8d46bf6f1 100644 --- a/internal/rpc/admin/start.go +++ b/internal/rpc/admin/start.go @@ -59,7 +59,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg Expires: time.Duration(config.RpcConfig.TokenPolicy.Expire) * time.Hour * 24, Secret: config.RpcConfig.Secret, } - if err := srv.initAdmin(ctx, config.Share.ChatAdmin); err != nil { + if err := srv.initAdmin(ctx, config.Share.ChatAdmin, config.Share.OpenIM.AdminUserID); err != nil { return err } pbadmin.RegisterAdminServer(server, &srv) @@ -72,17 +72,17 @@ type adminServer struct { Token *tokenverify.Token } -func (o *adminServer) initAdmin(ctx context.Context, users []config.AdminUser) error { - for _, user := range users { - if _, err := o.Database.GetAdmin(ctx, user.AdminID); err == nil { +func (o *adminServer) initAdmin(ctx context.Context, admins []string, imUserID string) error { + for _, account := range admins { + if _, err := o.Database.GetAdmin(ctx, account); err == nil { continue } else if !dbutil.IsDBNotFound(err) { return err } - sum := md5.Sum([]byte(user.AdminID)) + sum := md5.Sum([]byte(account)) a := admin.Admin{ - Account: user.AdminID, - UserID: user.IMUserID, + Account: account, + UserID: imUserID, Password: hex.EncodeToString(sum[:]), Level: constant.DefaultAdminLevel, CreateTime: time.Now(), diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index f08734c34..1412f0e4e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -21,14 +21,8 @@ type Share struct { Secret string `mapstructure:"secret"` AdminUserID string `mapstructure:"adminUserID"` } `mapstructure:"openIM"` - ChatAdmin []AdminUser `mapstructure:"chatAdmin"` - ProxyHeader string `mapstructure:"proxyHeader"` -} - -type AdminUser struct { - AdminID string `mapstructure:"adminID"` - IMUserID string `mapstructure:"imUserID"` - Nickname string `mapstructure:"nickname"` + ChatAdmin []string `mapstructure:"chatAdmin"` + ProxyHeader string `mapstructure:"proxyHeader"` } type RpcRegisterName struct { From f321a14130cb953534ec46175e4a44d29bd138e7 Mon Sep 17 00:00:00 2001 From: xuan <146319162+wxuanF@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:56:56 +0800 Subject: [PATCH 05/15] Update action (#514) * Update chatci.yml * Rename docker-buildx.yml to docker-buildx.bak * Update scripts-test.yml --- .github/workflows/chatci.yml | 31 ++++++----------- .../{docker-buildx.yml => docker-buildx.bak} | 0 .github/workflows/scripts-test.yml | 34 ++++--------------- 3 files changed, 17 insertions(+), 48 deletions(-) rename .github/workflows/{docker-buildx.yml => docker-buildx.bak} (100%) diff --git a/.github/workflows/chatci.yml b/.github/workflows/chatci.yml index 2a612cb5c..e7210eaa1 100644 --- a/.github/workflows/chatci.yml +++ b/.github/workflows/chatci.yml @@ -60,29 +60,18 @@ jobs: - name: Check out code into the Go module directory uses: actions/checkout@v4 - - name: Code Typecheck Detector - uses: kubecub/typecheck@main - - - name: Run go modules tidy - run: | - sudo make tidy - - - name: Run go format - run: | - sudo make format - echo "Run go format successfully" - continue-on-error: true - - - name: Generate all necessary files, such as error code files + - name: init run: | - make generate + sudo bash bootstrap.sh + echo "init successfully" - - name: Run unit test and get test coverage + - name: build and start run: | - make cover - continue-on-error: true + mage start + mage check - - name: Build source code for host platform + - name: restart run: | - sudo make build - echo "Build source code for host platform successfully" + mage stop + mage start + mage check diff --git a/.github/workflows/docker-buildx.yml b/.github/workflows/docker-buildx.bak similarity index 100% rename from .github/workflows/docker-buildx.yml rename to .github/workflows/docker-buildx.bak diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index 5f9d4263b..34be2029e 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -71,21 +71,22 @@ jobs: - name: Build Chat run: | - make build - chmod +x ./scripts/build-all-service.sh - ./scripts/build-all-service.sh + sudo bash bootstrap.sh + sudo mage + sudo mage start shell: bash - name: deploy all services run: | git clone https://github.com/openimsdk/open-im-server.git cd open-im-server - sudo make init sudo docker compose up -d sudo sleep 30 - sudo make start - sudo make check + sudo bash bootstrap.sh + sudo mage + sudo mage start + sudo mage check sudo cat _output/logs/chat_$(date '+%Y%m%d').log 2>/dev/null echo "pwd = $(pwd)" @@ -94,27 +95,6 @@ jobs: shell: bash continue-on-error: true - - name: start all services - run: | - sudo make init && \ - sudo make start || \ - (echo "An error occurred, printing logs:" && sudo cat ./_output/logs/* 2>/dev/null) - shell: bash - - - name: Check all services - run: | - sudo make check || \ - (echo "An error occurred, printing logs:" && sudo cat ./_output/logs/* 2>/dev/null) - shell: bash - - - name: Stop chat - run: | - sudo make stop - - - name: Reinstall chat - run: | - sudo make install - - name: Print chat_$(date '+%Y%m%d').log run: | ls -al && echo "pwd = $(pwd)" From 0df840f77c3d9f5d8b20b5d038f2f94ec56a668a Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:03:16 +0800 Subject: [PATCH 06/15] Add comments (#515) * refactor dockerFile * Add comments to the configuration file * feat: chat admin config (#509) * Add comments to the configuration file * Remove comments --------- Co-authored-by: chao <48119764+withchao@users.noreply.github.com> --- Dockerfile | 2 +- config/chat-api-admin.yml | 2 ++ config/chat-api-chat.yml | 2 ++ config/chat-rpc-admin.yml | 3 ++ config/chat-rpc-chat.yml | 3 ++ config/log.yml | 7 ++++- config/mongodb.yml | 9 +++++- config/redis.yml | 9 +++++- config/share.yml | 5 +++- config/zookeeper.yml | 5 +++- go.mod | 2 +- go.sum | 4 +-- pkg/common/db/model/admin/ip_forbidden.go | 1 - pkg/common/db/table/admin/admin.go | 2 +- pkg/common/db/table/admin/client_config.go | 2 +- .../db/table/admin/forbidden_account.go | 2 +- .../db/table/admin/invitation_register.go | 1 - pkg/common/db/table/admin/ip_forbidden.go | 1 - .../db/table/admin/limit_user_login_ip.go | 1 - .../db/table/admin/register_add_friend.go | 1 - .../db/table/admin/register_add_group.go | 1 - pkg/common/db/table/chat/account.go | 1 - pkg/common/db/table/chat/attribute.go | 1 - pkg/common/db/table/chat/register.go | 1 - pkg/common/db/table/chat/user_login_record.go | 1 - pkg/common/xlsx/main.go | 8 +++--- pkg/common/xlsx/utils.go | 13 ++++----- pkg/eerrs/predefine.go | 28 +++++++++---------- pkg/email/mail.go | 2 +- 29 files changed, 72 insertions(+), 48 deletions(-) diff --git a/Dockerfile b/Dockerfile index 52e184104..ed17db92e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,7 +43,7 @@ COPY --from=builder $SERVER_DIR/start-config.yml $SERVER_DIR/ COPY --from=builder $SERVER_DIR/go.mod $SERVER_DIR/ COPY --from=builder $SERVER_DIR/go.sum $SERVER_DIR/ -RUN go get github.com/openimsdk/gomake@v0.0.9-alpha.3 +RUN go get github.com/openimsdk/gomake@v0.0.9 # Set the command to run when the container starts ENTRYPOINT ["sh", "-c", "mage start && tail -f /dev/null"] diff --git a/config/chat-api-admin.yml b/config/chat-api-admin.yml index dfc773c9f..e03ee18cf 100644 --- a/config/chat-api-admin.yml +++ b/config/chat-api-admin.yml @@ -1,4 +1,6 @@ api: + # Listening IP; 0.0.0.0 means both internal and external IPs are listened to, default is recommended listenIP: 0.0.0.0 + # Listening ports; if multiple are configured, multiple instances will be launched ports: [ 10009 ] diff --git a/config/chat-api-chat.yml b/config/chat-api-chat.yml index 4c86fed55..c563647de 100644 --- a/config/chat-api-chat.yml +++ b/config/chat-api-chat.yml @@ -1,4 +1,6 @@ api: + # Listening IP; 0.0.0.0 means both internal and external IPs are listened to, default is recommended listenIP: 0.0.0.0 + # Listening ports; if multiple are configured, multiple instances will be launched ports: [ 10008 ] diff --git a/config/chat-rpc-admin.yml b/config/chat-rpc-admin.yml index fb25d131a..7494356fa 100644 --- a/config/chat-rpc-admin.yml +++ b/config/chat-rpc-admin.yml @@ -1,6 +1,9 @@ rpc: + # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP registerIP: '' + # IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP listenIP: 0.0.0.0 + # List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. ports: [ 30200 ] tokenPolicy: diff --git a/config/chat-rpc-chat.yml b/config/chat-rpc-chat.yml index 264759c61..d015ad63f 100644 --- a/config/chat-rpc-chat.yml +++ b/config/chat-rpc-chat.yml @@ -1,6 +1,9 @@ rpc: + # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP registerIP: '' + # IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP listenIP: 0.0.0.0 + # List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. ports: [ 30300 ] verifyCode: diff --git a/config/log.yml b/config/log.yml index 081393902..44ff3ee71 100644 --- a/config/log.yml +++ b/config/log.yml @@ -1,7 +1,12 @@ +# Log storage path, default is acceptable, change to a full path if modification is needed storageLocation: ../../../../logs/ +# Log rotation period (in hours), default is acceptable rotationTime: 24 +# Number of log files to retain, default is acceptable remainRotationCount: 2 +# Log level settings: 3 for production environment; 6 for more verbose logging in debugging environments remainLogLevel: 6 +# Whether to output to standard output, default is acceptable isStdout: false +# Whether to log in JSON format, default is acceptable isJson: false -withStack: false diff --git a/config/mongodb.yml b/config/mongodb.yml index 12f1f66a5..98f5694e4 100644 --- a/config/mongodb.yml +++ b/config/mongodb.yml @@ -1,7 +1,14 @@ +# URI for database connection, leave empty if using address and credential settings directly uri: '' +# List of MongoDB server addresses address: [ localhost:37017 ] +# Name of the database database: openim_v3 +# Username for database authentication username: openIM +# Password for database authentication password: openIM123 +# Maximum number of connections in the connection pool maxPoolSize: 100 -maxRetry: 10 \ No newline at end of file +# Maximum number of retry attempts for a failed database connection +maxRetry: 10 diff --git a/config/redis.yml b/config/redis.yml index 26becd887..27361ba92 100644 --- a/config/redis.yml +++ b/config/redis.yml @@ -1,7 +1,14 @@ +# List of Redis server addresses address: [ localhost:16379 ] +# Username for Redis authentication (leave blank if not used) username: '' +# Password for Redis authentication password: openIM123 +# Enable or disable pipeline processing enablePipeline: false +# Enable or disable cluster mode clusterMode: false +# Database index to be used db: 0 -maxRetry: 10 \ No newline at end of file +# Maximum number of retry attempts for a failed connection +maxRetry: 10 diff --git a/config/share.yml b/config/share.yml index 2eed7bd71..6b1bab178 100644 --- a/config/share.yml +++ b/config/share.yml @@ -4,11 +4,14 @@ rpcRegisterName: admin: admin openIM: + # OpenIM API address apiURL: http://127.0.0.1:10002 + # OpenIM secret key, must be consistent with OpenIM secret: openIM123 + # OpenIM administrator userID, must be consistent with OpenIM adminUserID: imAdmin chatAdmin: + # Default username and password for the admin - "chatAdmin" -#proxyHeader: "X-Forwarded-For" \ No newline at end of file diff --git a/config/zookeeper.yml b/config/zookeeper.yml index 73c76e79c..7b7557c93 100644 --- a/config/zookeeper.yml +++ b/config/zookeeper.yml @@ -1,5 +1,8 @@ +# Database schema name schema: openim +# List of server addresses address: [ localhost:12181 ] +# Username for authentication (leave blank if not used) username: '' +# Password for authentication (leave blank if not used) password: '' - diff --git a/go.mod b/go.mod index c27621cd4..f8caab7db 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( require ( github.com/livekit/protocol v1.10.1 github.com/mitchellh/mapstructure v1.5.0 - github.com/openimsdk/gomake v0.0.9-alpha.3 + github.com/openimsdk/gomake v0.0.9 github.com/openimsdk/protocol v0.0.63 github.com/openimsdk/tools v0.0.49-alpha.3 github.com/redis/go-redis/v9 v9.5.1 diff --git a/go.sum b/go.sum index 322597b3f..9052f235d 100644 --- a/go.sum +++ b/go.sum @@ -178,8 +178,8 @@ github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADym github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/openimsdk/gomake v0.0.9-alpha.3 h1:KO3stbmiTksnnx2o2Lh8/FkKXc7qiF4rwPnr01WO7aM= -github.com/openimsdk/gomake v0.0.9-alpha.3/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= +github.com/openimsdk/gomake v0.0.9 h1:ouf25ygN2PMQ68Gfgns/EQRPiLPnp+77SIr68GfE+n4= +github.com/openimsdk/gomake v0.0.9/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/protocol v0.0.63 h1:9DnweZe9nEYDFa4fGTbC9Cqi0gLUdtBhRo1NRP2X3WQ= github.com/openimsdk/protocol v0.0.63/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= github.com/openimsdk/tools v0.0.49-alpha.3 h1:mXKU09asKTLjj0yCsfqqMizs3ibl1vLimW7ZYzAMw44= diff --git a/pkg/common/db/model/admin/ip_forbidden.go b/pkg/common/db/model/admin/ip_forbidden.go index 97431e9c3..09fd33c2f 100644 --- a/pkg/common/db/model/admin/ip_forbidden.go +++ b/pkg/common/db/model/admin/ip_forbidden.go @@ -62,7 +62,6 @@ func (o *IPForbidden) Search(ctx context.Context, keyword string, state int32, p switch state { case constant.LimitNil: - // 不添加额外的过滤条件 case constant.LimitEmpty: filter = bson.M{"limit_register": 0, "limit_login": 0} case constant.LimitOnlyRegisterIP: diff --git a/pkg/common/db/table/admin/admin.go b/pkg/common/db/table/admin/admin.go index 059976b5f..4773e2761 100644 --- a/pkg/common/db/table/admin/admin.go +++ b/pkg/common/db/table/admin/admin.go @@ -20,7 +20,7 @@ import ( "time" ) -// Admin 后台管理员. +// Admin user type Admin struct { Account string `bson:"account"` Password string `bson:"password"` diff --git a/pkg/common/db/table/admin/client_config.go b/pkg/common/db/table/admin/client_config.go index 930066839..4b941001c 100644 --- a/pkg/common/db/table/admin/client_config.go +++ b/pkg/common/db/table/admin/client_config.go @@ -16,7 +16,7 @@ package admin import "context" -// ClientConfig 客户端相关配置项. +// ClientConfig config type ClientConfig struct { Key string `bson:"key"` Value string `bson:"value"` diff --git a/pkg/common/db/table/admin/forbidden_account.go b/pkg/common/db/table/admin/forbidden_account.go index 2e0e5abfd..fb3247618 100644 --- a/pkg/common/db/table/admin/forbidden_account.go +++ b/pkg/common/db/table/admin/forbidden_account.go @@ -20,7 +20,7 @@ import ( "time" ) -// ForbiddenAccount 封号表. +// ForbiddenAccount table type ForbiddenAccount struct { UserID string `bson:"user_id"` Reason string `bson:"reason"` diff --git a/pkg/common/db/table/admin/invitation_register.go b/pkg/common/db/table/admin/invitation_register.go index 40155f453..4970b4adf 100644 --- a/pkg/common/db/table/admin/invitation_register.go +++ b/pkg/common/db/table/admin/invitation_register.go @@ -20,7 +20,6 @@ import ( "time" ) -// 邀请码被注册使用. type InvitationRegister struct { InvitationCode string `bson:"invitation_code"` UsedByUserID string `bson:"used_by_user_id"` diff --git a/pkg/common/db/table/admin/ip_forbidden.go b/pkg/common/db/table/admin/ip_forbidden.go index 39577a9a6..15e299d15 100644 --- a/pkg/common/db/table/admin/ip_forbidden.go +++ b/pkg/common/db/table/admin/ip_forbidden.go @@ -20,7 +20,6 @@ import ( "time" ) -// 禁止ip登录 注册. type IPForbidden struct { IP string `bson:"ip"` LimitRegister bool `bson:"limit_register"` diff --git a/pkg/common/db/table/admin/limit_user_login_ip.go b/pkg/common/db/table/admin/limit_user_login_ip.go index e167f6334..b3413f272 100644 --- a/pkg/common/db/table/admin/limit_user_login_ip.go +++ b/pkg/common/db/table/admin/limit_user_login_ip.go @@ -20,7 +20,6 @@ import ( "time" ) -// 限制userID只能在某些ip登录. type LimitUserLoginIP struct { UserID string `bson:"user_id"` IP string `bson:"ip"` diff --git a/pkg/common/db/table/admin/register_add_friend.go b/pkg/common/db/table/admin/register_add_friend.go index bd864805b..b0888e74c 100644 --- a/pkg/common/db/table/admin/register_add_friend.go +++ b/pkg/common/db/table/admin/register_add_friend.go @@ -20,7 +20,6 @@ import ( "time" ) -// RegisterAddFriend 注册时默认好友. type RegisterAddFriend struct { UserID string `bson:"user_id"` CreateTime time.Time `bson:"create_time"` diff --git a/pkg/common/db/table/admin/register_add_group.go b/pkg/common/db/table/admin/register_add_group.go index 1b7f4d12b..ebfd4a011 100644 --- a/pkg/common/db/table/admin/register_add_group.go +++ b/pkg/common/db/table/admin/register_add_group.go @@ -20,7 +20,6 @@ import ( "time" ) -// RegisterAddGroup 注册时默认群组. type RegisterAddGroup struct { GroupID string `bson:"group_id"` CreateTime time.Time `bson:"create_time"` diff --git a/pkg/common/db/table/chat/account.go b/pkg/common/db/table/chat/account.go index 414a03266..dba6d68d1 100644 --- a/pkg/common/db/table/chat/account.go +++ b/pkg/common/db/table/chat/account.go @@ -19,7 +19,6 @@ import ( "time" ) -// Account 账号密码表. type Account struct { UserID string `bson:"user_id"` Password string `bson:"password"` diff --git a/pkg/common/db/table/chat/attribute.go b/pkg/common/db/table/chat/attribute.go index 1b7ba29b4..57f62f7ef 100644 --- a/pkg/common/db/table/chat/attribute.go +++ b/pkg/common/db/table/chat/attribute.go @@ -20,7 +20,6 @@ import ( "time" ) -// Attribute 用户属性表. type Attribute struct { UserID string `bson:"user_id"` Account string `bson:"account"` diff --git a/pkg/common/db/table/chat/register.go b/pkg/common/db/table/chat/register.go index 72d514360..647037ef4 100644 --- a/pkg/common/db/table/chat/register.go +++ b/pkg/common/db/table/chat/register.go @@ -19,7 +19,6 @@ import ( "time" ) -// Register 注册信息表. type Register struct { UserID string `bson:"user_id"` DeviceID string `bson:"device_id"` diff --git a/pkg/common/db/table/chat/user_login_record.go b/pkg/common/db/table/chat/user_login_record.go index 6c3a8eda9..0b2b65aa2 100644 --- a/pkg/common/db/table/chat/user_login_record.go +++ b/pkg/common/db/table/chat/user_login_record.go @@ -19,7 +19,6 @@ import ( "time" ) -// 用户登录信息表. type UserLoginRecord struct { UserID string `bson:"user_id"` LoginTime time.Time `bson:"login_time"` diff --git a/pkg/common/xlsx/main.go b/pkg/common/xlsx/main.go index c170bd195..3606d8bc1 100644 --- a/pkg/common/xlsx/main.go +++ b/pkg/common/xlsx/main.go @@ -38,7 +38,7 @@ func ParseSheet(file *excelize.File, v interface{}) error { } else if sheetIndex < 0 { return nil } - fieldIndex := make(map[string]int) // 结构体对应的下标 + fieldIndex := make(map[string]int) for i := 0; i < itemType.NumField(); i++ { field := itemType.Field(i) alias := field.Tag.Get("column") @@ -54,8 +54,8 @@ func ParseSheet(file *excelize.File, v interface{}) error { if len(fieldIndex) == 0 { return errors.New("empty column struct") } - sheetIndex := make(map[string]int) // sheet 对应的下标 - for i := 1; ; i++ { // 第一行 + sheetIndex := make(map[string]int) + for i := 1; ; i++ { name, err := file.GetCellValue(sheetName, GetAxis(i, 1)) if err != nil { return err @@ -88,7 +88,7 @@ func ParseSheet(file *excelize.File, v interface{}) error { return err } } - if notEmpty > 0 { // 空行表示结束 + if notEmpty > 0 { putItem(item) } else { break diff --git a/pkg/common/xlsx/utils.go b/pkg/common/xlsx/utils.go index 885bb9625..fea67dced 100644 --- a/pkg/common/xlsx/utils.go +++ b/pkg/common/xlsx/utils.go @@ -22,22 +22,21 @@ func Num2AZ(num int) string { var ( str string k int - temp []int //保存转化后每一位数据的值,然后通过索引的方式匹配A-Z + temp []int ) - //用来匹配的字符A-Z slices := []string{"", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} - if num > 26 { //数据大于26需要进行拆分 + if num > 26 { for { - k = num % 26 //从个位开始拆分,如果求余为0,说明末尾为26,也就是Z,如果是转化为26进制数,则末尾是可以为0的,这里必须为A-Z中的一个 + k = num % 26 if k == 0 { temp = append(temp, 26) k = 26 } else { temp = append(temp, k) } - num = (num - k) / 26 //减去num最后一位数的值,因为已经记录在temp中 - if num <= 26 { //小于等于26直接进行匹配,不需要进行数据拆分 + num = (num - k) / 26 + if num <= 26 { temp = append(temp, num) break } @@ -46,7 +45,7 @@ func Num2AZ(num int) string { return slices[num] } for _, value := range temp { - str = slices[value] + str //因为数据切分后存储顺序是反的,所以str要放在后面 + str = slices[value] + str } return str } diff --git a/pkg/eerrs/predefine.go b/pkg/eerrs/predefine.go index 621cba723..6546d53ab 100644 --- a/pkg/eerrs/predefine.go +++ b/pkg/eerrs/predefine.go @@ -17,18 +17,18 @@ package eerrs import "github.com/openimsdk/tools/errs" var ( - ErrPassword = errs.NewCodeError(20001, "PasswordError") // 密码错误 - ErrAccountNotFound = errs.NewCodeError(20002, "AccountNotFound") // 账号不存在 - ErrPhoneAlreadyRegister = errs.NewCodeError(20003, "PhoneAlreadyRegister") // 手机号已经注册 - ErrAccountAlreadyRegister = errs.NewCodeError(20004, "AccountAlreadyRegister") // 账号已经注册 - ErrVerifyCodeSendFrequently = errs.NewCodeError(20005, "VerifyCodeSendFrequently") // 频繁获取验证码 - ErrVerifyCodeNotMatch = errs.NewCodeError(20006, "VerifyCodeNotMatch") // 验证码错误 - ErrVerifyCodeExpired = errs.NewCodeError(20007, "VerifyCodeExpired") // 验证码过期 - ErrVerifyCodeMaxCount = errs.NewCodeError(20008, "VerifyCodeMaxCount") // 验证码失败次数过多 - ErrVerifyCodeUsed = errs.NewCodeError(20009, "VerifyCodeUsed") // 已经使用 - ErrInvitationCodeUsed = errs.NewCodeError(20010, "InvitationCodeUsed") // 邀请码已经使用 - ErrInvitationNotFound = errs.NewCodeError(20011, "InvitationNotFound") // 邀请码不存在 - ErrForbidden = errs.NewCodeError(20012, "Forbidden") // 限制登录注册 - ErrRefuseFriend = errs.NewCodeError(20013, "RefuseFriend") // 拒绝添加好友 - ErrEmailAlreadyRegister = errs.NewCodeError(20014, "EmailAlreadyRegister") // 邮箱已经注册 + ErrPassword = errs.NewCodeError(20001, "PasswordError") + ErrAccountNotFound = errs.NewCodeError(20002, "AccountNotFound") + ErrPhoneAlreadyRegister = errs.NewCodeError(20003, "PhoneAlreadyRegister") + ErrAccountAlreadyRegister = errs.NewCodeError(20004, "AccountAlreadyRegister") + ErrVerifyCodeSendFrequently = errs.NewCodeError(20005, "VerifyCodeSendFrequently") + ErrVerifyCodeNotMatch = errs.NewCodeError(20006, "VerifyCodeNotMatch") + ErrVerifyCodeExpired = errs.NewCodeError(20007, "VerifyCodeExpired") + ErrVerifyCodeMaxCount = errs.NewCodeError(20008, "VerifyCodeMaxCount") + ErrVerifyCodeUsed = errs.NewCodeError(20009, "VerifyCodeUsed") + ErrInvitationCodeUsed = errs.NewCodeError(20010, "InvitationCodeUsed") + ErrInvitationNotFound = errs.NewCodeError(20011, "InvitationNotFound") + ErrForbidden = errs.NewCodeError(20012, "Forbidden") + ErrRefuseFriend = errs.NewCodeError(20013, "RefuseFriend") + ErrEmailAlreadyRegister = errs.NewCodeError(20014, "EmailAlreadyRegister") ) diff --git a/pkg/email/mail.go b/pkg/email/mail.go index 42194b6c0..1c1d2d1d4 100644 --- a/pkg/email/mail.go +++ b/pkg/email/mail.go @@ -50,6 +50,6 @@ func (m *mail) SendMail(ctx context.Context, mail string, verifyCode string) err msg.SetHeader(`From`, m.senderMail) msg.SetHeader(`To`, []string{mail}...) msg.SetHeader(`Subject`, m.title) - msg.SetBody(`text/html`, fmt.Sprintf("您的验证码为:%s,该验证码5分钟内有效,请勿泄露于他人。", verifyCode)) + msg.SetBody(`text/html`, fmt.Sprintf("Your verification code is: %s. This code is valid for 5 minutes and should not be shared with others", verifyCode)) return errs.Wrap(m.dail.DialAndSend(msg)) } From b82381f2f7d68c86023245a43b28f33fa1de5413 Mon Sep 17 00:00:00 2001 From: xuan <146319162+wxuanF@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:23:54 +0800 Subject: [PATCH 07/15] Updata action (#518) * Update scripts-test.yml * Update chatci.yml --- .github/workflows/chatci.yml | 11 ----------- .github/workflows/scripts-test.yml | 25 +++++++------------------ 2 files changed, 7 insertions(+), 29 deletions(-) diff --git a/.github/workflows/chatci.yml b/.github/workflows/chatci.yml index e7210eaa1..c54e08219 100644 --- a/.github/workflows/chatci.yml +++ b/.github/workflows/chatci.yml @@ -64,14 +64,3 @@ jobs: run: | sudo bash bootstrap.sh echo "init successfully" - - - name: build and start - run: | - mage start - mage check - - - name: restart - run: | - mage stop - mage start - mage check diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index 34be2029e..b66e8a9b1 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -43,17 +43,6 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Set up environment - run: | - if [ "$RUNNER_OS" == "Linux" ]; then - sudo apt-get update - # Add other Linux specific setup here - elif [ "$RUNNER_OS" == "macOS" ]; then - # Add macOS specific setup here - brew update - fi - shell: bash - # - name: Install latest Bash (macOS only) # if: runner.os == 'macOS' # run: | @@ -69,13 +58,6 @@ jobs: # brew install --cask docker # open /Applications/Docker.app - - name: Build Chat - run: | - sudo bash bootstrap.sh - sudo mage - sudo mage start - shell: bash - - name: deploy all services run: | git clone https://github.com/openimsdk/open-im-server.git @@ -95,6 +77,13 @@ jobs: shell: bash continue-on-error: true + - name: Build Chat + run: | + sudo bash bootstrap.sh + sudo mage + sudo mage start + shell: bash + - name: Print chat_$(date '+%Y%m%d').log run: | ls -al && echo "pwd = $(pwd)" From c12a3cae0ddb4bbc0ee77b017d43e4fc799f33ec Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:48:06 +0800 Subject: [PATCH 08/15] Update CODEOWNERS --- docs/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS index 0242ac0ea..f3a3a550d 100644 --- a/docs/CODEOWNERS +++ b/docs/CODEOWNERS @@ -1 +1 @@ -* @openimsdk/go-code-review @openimsdk/bot @cubxxw +* @openimsdk/go-code-review @skiffer-git @withchao From f60a82f29e7f23e0ef01a75e79295d33ecb0971d Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:57:00 +0800 Subject: [PATCH 09/15] code reviewer (#522) * refactor dockerFile * Add comments to the configuration file * feat: chat admin config (#509) * Add comments to the configuration file * Remove comments * add withchao as code reviewer * add withchao as code reviewer --------- Co-authored-by: chao <48119764+withchao@users.noreply.github.com> From 43cb62ee8a4028cf73ab9359f10d5747c67ddaca Mon Sep 17 00:00:00 2001 From: xuan <146319162+wxuanF@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:57:54 +0800 Subject: [PATCH 10/15] Update config.yaml (#519) * Update config.yaml * Update admin.pb.go * Update config.yaml * Update scripts-test.yml --- .github/workflows/scripts-test.yml | 3 -- deployments/helm-charts/config.yaml | 50 ++++++++++++++--------------- pkg/protocol/admin/admin.pb.go | 8 ++--- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index b66e8a9b1..7da773adb 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -70,7 +70,6 @@ jobs: sudo mage start sudo mage check - sudo cat _output/logs/chat_$(date '+%Y%m%d').log 2>/dev/null echo "pwd = $(pwd)" cd .. ls -al && pwd @@ -87,7 +86,5 @@ jobs: - name: Print chat_$(date '+%Y%m%d').log run: | ls -al && echo "pwd = $(pwd)" - sudo cat ./_output/logs/* 2>/dev/null - sudo cat ./_output/logs/* 2>/dev/null >> "$GITHUB_OUTPUT" shell: bash continue-on-error: true diff --git a/deployments/helm-charts/config.yaml b/deployments/helm-charts/config.yaml index ee50fa60a..6be98c93f 100644 --- a/deployments/helm-charts/config.yaml +++ b/deployments/helm-charts/config.yaml @@ -51,8 +51,8 @@ config: listenIP: rpc: - registerIP: #作为rpc启动时,注册到zookeeper的IP,api/gateway能访问到此ip和对应的rpcPort中的端口 - listenIP: #默认为0.0.0.0 + registerIP: + listenIP: rpcPort: openImAdminPort: [ 80 ] @@ -61,25 +61,25 @@ config: openImAdminName: openimchat-admin-rpc:80 openImChatName: openimchat-chat-rpc:80 - # 没有配置表示和OpenIM一致 + mysql: - address: [ im-mysql:3306 ] #目前仅支持单机 - username: root #用户名 - password: openIM123 #密码 - #database: openIM_v2 #不建议修改 - maxOpenConn: 1000 #最大连接数 - maxIdleConn: 100 #最大空闲连接数 - maxLifeTime: 60 #连接可以重复使用的最长时间(秒) - logLevel: 4 #日志级别 1=slient 2=error 3=warn 4=info - slowThreshold: 500 #慢语句阈值 (毫秒) + address: [ im-mysql:3306 ] + username: root + password: openIM123 + #database: openIM_v2 + maxOpenConn: 1000 + maxIdleConn: 100 + maxLifeTime: 60 + logLevel: 4 + slowThreshold: 500 database: openim_enterprise - # 没有配置表示和OpenIM一致 + log: - storageLocation: ../_output/logs/ #存放目录 - rotationTime: 24 #日志旋转时间 - remainRotationCount: 2 #日志数量 - remainLogLevel: 6 #日志级别 6表示全都打印, + storageLocation: ../_output/logs/ + rotationTime: 24 + remainRotationCount: 2 + remainLogLevel: 6 isStdout: true isJson: false withStack: false @@ -91,13 +91,13 @@ config: expire: 86400 verifyCode: - validTime: 300 # 验证码有效时间 - validCount: 5 # 验证码有效次数 - uintTime: 86400 # 单位时间间隔 - maxCount: 10 # 单位时间内最大获取次数 - superCode: "666666" # 超级验证码(只有use为空时使用) - len: 6 # 验证码长度 - use: "" # 使用的验证码服务(use: "ali") + validTime: 300 + validCount: 5 + uintTime: 86400 + maxCount: 10 + superCode: "666666" + len: 6 + use: "" ali: endpoint: "dysmsapi.aliyuncs.com" accessKeyId: "" @@ -105,7 +105,7 @@ config: signName: "" verificationCodeTemplateCode: "" - # 获取ip的header,没有配置直接获取远程地址 + #proxyHeader: "X-Forwarded-For" adminList: diff --git a/pkg/protocol/admin/admin.pb.go b/pkg/protocol/admin/admin.pb.go index b2b7b48a2..30df0d2f6 100644 --- a/pkg/protocol/admin/admin.pb.go +++ b/pkg/protocol/admin/admin.pb.go @@ -41,7 +41,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// 登录 +// login type LoginReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3288,7 +3288,7 @@ func (*DelIPForbiddenResp) Descriptor() ([]byte, []int) { return file_admin_admin_proto_rawDescGZIP(), []int{62} } -// ################### 用户限制 ################### +// ################### user limit ################### type CheckRegisterForbiddenReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3467,7 +3467,7 @@ func (*CheckLoginForbiddenResp) Descriptor() ([]byte, []int) { return file_admin_admin_proto_rawDescGZIP(), []int{66} } -// ################### 注销 ################### +// ################### logout ################### type CancellationUserReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3561,7 +3561,7 @@ func (*CancellationUserResp) Descriptor() ([]byte, []int) { return file_admin_admin_proto_rawDescGZIP(), []int{68} } -// ################### 封号、解封 ################### + type BlockUserReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache From 028afccbea2f760682623d4e0f6691f77852783a Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Thu, 25 Apr 2024 19:51:01 +0800 Subject: [PATCH 11/15] Update slack invite link --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index ab0f301ae..9e466965c 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,8 @@ You may use the OpenIM source code to create compiled versions not originally pr ## :busts_in_silhouette: Community + 💬 [Follow our Twitter account](https://twitter.com/founder_im63606) -+ 👫 [Join our Reddit](https://www.reddit.com/r/OpenIMessaging) -+ 🚀 [Join our Slack community](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) ++ 🚀 [Join our Slack community](https://join.slack.com/t/openimsdk/shared_invite/zt-2hljfom5u-9ZuzP3NfEKW~BJKbpLm0Hw) + :eyes: [Join our WeChat group](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg) -+ 📚 [OpenIM Community](https://github.com/openimsdk/community) -+ 💕 [OpenIM Interest Groups](https://github.com/Openim-sigs) ## 🛫 Quick Start From 997f23fd2f2ceab5f7ba7ba7429d5771c27cdb9e Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Thu, 25 Apr 2024 19:51:51 +0800 Subject: [PATCH 12/15] Update slack invite link --- README_zh_CN.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README_zh_CN.md b/README_zh_CN.md index fb190a1f0..3b5694bec 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -24,11 +24,8 @@ ## :busts_in_silhouette: 社区 + 💬 [关注我们的 Twitter 账户](https://twitter.com/founder_im63606) -+ 👫 [加入我们的 Reddit](https://www.reddit.com/r/OpenIMessaging) -+ 🚀 [加入我们的 Slack 社区](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) ++ 🚀 [加入我们的 Slack 社区](https://join.slack.com/t/openimsdk/shared_invite/zt-2hljfom5u-9ZuzP3NfEKW~BJKbpLm0Hw) + :eyes: [加入我们的微信群](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg) -+ 📚 [OpenIM 社区](https://github.com/openimsdk/community) -+ 💕 [OpenIM 兴趣小组](https://github.com/Openim-sigs) ## 🛫 快速开始 From 6ce4881986ba15c56194d37157bfe3c3860715c7 Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Tue, 14 May 2024 18:21:56 +0800 Subject: [PATCH 13/15] Etcd naming and discovery (#540) * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery * etcd naming and discovery --- config/discovery.yml | 13 +++++++++ config/zookeeper.yml | 8 ----- go.mod | 12 ++++++-- go.sum | 42 ++++++++++++++++++++++----- internal/api/admin/start.go | 13 ++++----- internal/api/chat/start.go | 11 +++---- internal/rpc/admin/start.go | 10 +++---- internal/rpc/chat/start.go | 10 +++---- pkg/common/cmd/admin_api.go | 2 +- pkg/common/cmd/admin_rpc.go | 4 +-- pkg/common/cmd/chat_api.go | 2 +- pkg/common/cmd/chat_rpc.go | 4 +-- pkg/common/cmd/constant.go | 4 +-- pkg/common/config/config.go | 13 +++++++++ pkg/common/kdisc/discoveryregister.go | 24 +++++++++------ pkg/common/startrpc/start.go | 4 +-- tools/check-component/main.go | 32 +++++++++++++++----- 17 files changed, 138 insertions(+), 70 deletions(-) create mode 100644 config/discovery.yml delete mode 100644 config/zookeeper.yml diff --git a/config/discovery.yml b/config/discovery.yml new file mode 100644 index 000000000..3d96ff9b6 --- /dev/null +++ b/config/discovery.yml @@ -0,0 +1,13 @@ +enable: "etcd" +etcd: + rootDirectory: openim + address: [ localhost:12379 ] + username: '' + password: '' + +zookeeper: + schema: openim + address: [ localhost:12181 ] + username: '' + password: '' + diff --git a/config/zookeeper.yml b/config/zookeeper.yml deleted file mode 100644 index 7b7557c93..000000000 --- a/config/zookeeper.yml +++ /dev/null @@ -1,8 +0,0 @@ -# Database schema name -schema: openim -# List of server addresses -address: [ localhost:12181 ] -# Username for authentication (leave blank if not used) -username: '' -# Password for authentication (leave blank if not used) -password: '' diff --git a/go.mod b/go.mod index f8caab7db..53142888e 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21.2 require ( github.com/gin-gonic/gin v1.9.1 github.com/golang-jwt/jwt/v4 v4.5.0 - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/uuid v1.6.0 github.com/jinzhu/copier v0.4.0 // indirect github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect @@ -27,7 +27,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/openimsdk/gomake v0.0.9 github.com/openimsdk/protocol v0.0.63 - github.com/openimsdk/tools v0.0.49-alpha.3 + github.com/openimsdk/tools v0.0.49-alpha.18 github.com/redis/go-redis/v9 v9.5.1 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.2 @@ -48,6 +48,8 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/clbanning/mxj/v2 v2.5.6 // indirect + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect @@ -59,6 +61,7 @@ require ( github.com/go-playground/validator/v10 v10.18.0 // indirect github.com/go-zookeeper/zk v1.0.3 // indirect github.com/goccy/go-json v0.10.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -100,6 +103,9 @@ require ( github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.etcd.io/etcd/api/v3 v3.5.13 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect + go.etcd.io/etcd/client/v3 v3.5.13 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/arch v0.3.0 // indirect @@ -109,6 +115,8 @@ require ( golang.org/x/sync v0.6.0 // indirect golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/go.sum b/go.sum index 9052f235d..97b72ffb3 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,10 @@ github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583j github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/clbanning/mxj/v2 v2.5.6 h1:Jm4VaCI/+Ug5Q57IzEoZbwx4iQFA6wkXv72juUSeK+g= github.com/clbanning/mxj/v2 v2.5.6/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -88,14 +92,15 @@ github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -122,6 +127,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jxskiss/base62 v1.1.0 h1:A5zbF8v8WXx2xixnAKD2w+abC+sIzYJX+nxmhA6HWFw= github.com/jxskiss/base62 v1.1.0/go.mod h1:HhWAlUXvxKThfOlZbcuFzsqwtF5TcqS9ru3y5GfjWAc= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -182,8 +189,8 @@ github.com/openimsdk/gomake v0.0.9 h1:ouf25ygN2PMQ68Gfgns/EQRPiLPnp+77SIr68GfE+n github.com/openimsdk/gomake v0.0.9/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/protocol v0.0.63 h1:9DnweZe9nEYDFa4fGTbC9Cqi0gLUdtBhRo1NRP2X3WQ= github.com/openimsdk/protocol v0.0.63/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= -github.com/openimsdk/tools v0.0.49-alpha.3 h1:mXKU09asKTLjj0yCsfqqMizs3ibl1vLimW7ZYzAMw44= -github.com/openimsdk/tools v0.0.49-alpha.3/go.mod h1:P4oGP1Pd+d4ctbLD5U/XQTgl8yu8Hd3skx640Fr69ko= +github.com/openimsdk/tools v0.0.49-alpha.18 h1:ARQeCiRmExvtB6XYItegThuV63JGOTxddwhSLHYXd78= +github.com/openimsdk/tools v0.0.49-alpha.18/go.mod h1:g7mkHXYUPi0/8aAX8VPMHpnb3hqdV69Jph+bXOGvvNM= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= @@ -308,11 +315,18 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.etcd.io/etcd/api/v3 v3.5.13 h1:8WXU2/NBge6AUF1K1gOexB6e07NgsN1hXK0rSTtgSp4= +go.etcd.io/etcd/api/v3 v3.5.13/go.mod h1:gBqlqkcMMZMVTMm4NDZloEVJzxQOQIls8splbqBDa0c= +go.etcd.io/etcd/client/pkg/v3 v3.5.13 h1:RVZSAnWWWiI5IrYAXjQorajncORbS0zI48LQlE2kQWg= +go.etcd.io/etcd/client/pkg/v3 v3.5.13/go.mod h1:XxHT4u1qU12E2+po+UVPrEeL94Um6zL58ppuJWXSAB8= +go.etcd.io/etcd/client/v3 v3.5.13 h1:o0fHTNJLeO0MyVbc7I3fsCf6nrOqn5d+diSarKnB2js= +go.etcd.io/etcd/client/v3 v3.5.13/go.mod h1:cqiAeY8b5DEEcpxvgWKsbLIWNM/8Wy2xJSDMtioMcoI= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= @@ -330,6 +344,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= @@ -342,6 +357,7 @@ golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8 golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8= golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -349,6 +365,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -360,6 +377,7 @@ golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= @@ -369,6 +387,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -403,17 +422,22 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= @@ -429,6 +453,8 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/api/admin/start.go b/internal/api/admin/start.go index aef4602c3..05a1799b3 100644 --- a/internal/api/admin/start.go +++ b/internal/api/admin/start.go @@ -19,9 +19,10 @@ import ( ) type Config struct { - ApiConfig config.API - ZookeeperConfig config.ZooKeeper - Share config.Share + ApiConfig config.API + + Discovery config.Discovery + Share config.Share } func Start(ctx context.Context, index int, config *Config) error { @@ -32,15 +33,11 @@ func Start(ctx context.Context, index int, config *Config) error { if err != nil { return err } - client, err := kdisc.NewDiscoveryRegister(&config.ZookeeperConfig, &config.Share) + client, err := kdisc.NewDiscoveryRegister(&config.Discovery) if err != nil { return err } - if err = client.CreateRpcRootNodes(config.Share.RpcRegisterName.GetServiceNames()); err != nil { - return errs.WrapMsg(err, "failed to create RPC root nodes") - } - chatConn, err := client.GetConn(ctx, config.Share.RpcRegisterName.Chat, grpc.WithTransportCredentials(insecure.NewCredentials()), mw.GrpcClient()) if err != nil { return err diff --git a/internal/api/chat/start.go b/internal/api/chat/start.go index 30ea80ffd..71a3d4834 100644 --- a/internal/api/chat/start.go +++ b/internal/api/chat/start.go @@ -19,9 +19,9 @@ import ( ) type Config struct { - ApiConfig config.API - ZookeeperConfig config.ZooKeeper - Share config.Share + ApiConfig config.API + Discovery config.Discovery + Share config.Share } func Start(ctx context.Context, index int, config *Config) error { @@ -32,14 +32,11 @@ func Start(ctx context.Context, index int, config *Config) error { if err != nil { return err } - client, err := kdisc.NewDiscoveryRegister(&config.ZookeeperConfig, &config.Share) + client, err := kdisc.NewDiscoveryRegister(&config.Discovery) if err != nil { return err } - if err = client.CreateRpcRootNodes(config.Share.RpcRegisterName.GetServiceNames()); err != nil { - return errs.WrapMsg(err, "failed to create RPC root nodes") - } chatConn, err := client.GetConn(ctx, config.Share.RpcRegisterName.Chat, grpc.WithTransportCredentials(insecure.NewCredentials()), mw.GrpcClient()) if err != nil { return err diff --git a/internal/rpc/admin/start.go b/internal/rpc/admin/start.go index 8d46bf6f1..bc597f58c 100644 --- a/internal/rpc/admin/start.go +++ b/internal/rpc/admin/start.go @@ -25,11 +25,11 @@ import ( ) type Config struct { - RpcConfig config.Admin - RedisConfig config.Redis - MongodbConfig config.Mongo - ZookeeperConfig config.ZooKeeper - Share config.Share + RpcConfig config.Admin + RedisConfig config.Redis + MongodbConfig config.Mongo + Discovery config.Discovery + Share config.Share } func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { diff --git a/internal/rpc/chat/start.go b/internal/rpc/chat/start.go index ed62eaeaa..fd14fe7cc 100644 --- a/internal/rpc/chat/start.go +++ b/internal/rpc/chat/start.go @@ -22,11 +22,11 @@ import ( ) type Config struct { - RpcConfig config.Chat - RedisConfig config.Redis - MongodbConfig config.Mongo - ZookeeperConfig config.ZooKeeper - Share config.Share + RpcConfig config.Chat + RedisConfig config.Redis + MongodbConfig config.Mongo + Discovery config.Discovery + Share config.Share } func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { diff --git a/pkg/common/cmd/admin_api.go b/pkg/common/cmd/admin_api.go index 56a1fbf14..47b2469f9 100644 --- a/pkg/common/cmd/admin_api.go +++ b/pkg/common/cmd/admin_api.go @@ -20,7 +20,7 @@ func NewAdminApiCmd() *AdminApiCmd { ret.configMap = map[string]any{ ShareFileName: &ret.apiConfig.Share, ChatAPIAdminCfgFileName: &ret.apiConfig.ApiConfig, - ZookeeperConfigFileName: &ret.apiConfig.ZookeeperConfig, + DiscoveryConfigFileName: &ret.apiConfig.Discovery, } ret.RootCmd = NewRootCmd(program.GetProcessName(), WithConfigMap(ret.configMap)) ret.ctx = context.WithValue(context.Background(), "version", config.Version) diff --git a/pkg/common/cmd/admin_rpc.go b/pkg/common/cmd/admin_rpc.go index 384c0be51..92a9b3491 100644 --- a/pkg/common/cmd/admin_rpc.go +++ b/pkg/common/cmd/admin_rpc.go @@ -35,7 +35,7 @@ func NewAdminRpcCmd() *AdminRpcCmd { ret.configMap = map[string]any{ ChatRPCAdminCfgFileName: &ret.adminConfig.RpcConfig, RedisConfigFileName: &ret.adminConfig.RedisConfig, - ZookeeperConfigFileName: &ret.adminConfig.ZookeeperConfig, + DiscoveryConfigFileName: &ret.adminConfig.Discovery, MongodbConfigFileName: &ret.adminConfig.MongodbConfig, ShareFileName: &ret.adminConfig.Share, } @@ -52,7 +52,7 @@ func (a *AdminRpcCmd) Exec() error { } func (a *AdminRpcCmd) runE() error { - return startrpc.Start(a.ctx, &a.adminConfig.ZookeeperConfig, a.adminConfig.RpcConfig.RPC.ListenIP, + return startrpc.Start(a.ctx, &a.adminConfig.Discovery, a.adminConfig.RpcConfig.RPC.ListenIP, a.adminConfig.RpcConfig.RPC.RegisterIP, a.adminConfig.RpcConfig.RPC.Ports, a.Index(), a.adminConfig.Share.RpcRegisterName.Admin, &a.adminConfig.Share, &a.adminConfig, admin.Start) } diff --git a/pkg/common/cmd/chat_api.go b/pkg/common/cmd/chat_api.go index 11e3de7b8..5e85f11c2 100644 --- a/pkg/common/cmd/chat_api.go +++ b/pkg/common/cmd/chat_api.go @@ -20,7 +20,7 @@ func NewChatApiCmd() *ChatApiCmd { ret.configMap = map[string]any{ ShareFileName: &ret.apiConfig.Share, ChatAPIChatCfgFileName: &ret.apiConfig.ApiConfig, - ZookeeperConfigFileName: &ret.apiConfig.ZookeeperConfig, + DiscoveryConfigFileName: &ret.apiConfig.Discovery, } ret.RootCmd = NewRootCmd(program.GetProcessName(), WithConfigMap(ret.configMap)) ret.ctx = context.WithValue(context.Background(), "version", config.Version) diff --git a/pkg/common/cmd/chat_rpc.go b/pkg/common/cmd/chat_rpc.go index cb025c820..92520d928 100644 --- a/pkg/common/cmd/chat_rpc.go +++ b/pkg/common/cmd/chat_rpc.go @@ -35,7 +35,7 @@ func NewChatRpcCmd() *ChatRpcCmd { ret.configMap = map[string]any{ ChatRPCChatCfgFileName: &ret.chatConfig.RpcConfig, RedisConfigFileName: &ret.chatConfig.RedisConfig, - ZookeeperConfigFileName: &ret.chatConfig.ZookeeperConfig, + DiscoveryConfigFileName: &ret.chatConfig.Discovery, MongodbConfigFileName: &ret.chatConfig.MongodbConfig, ShareFileName: &ret.chatConfig.Share, } @@ -52,7 +52,7 @@ func (a *ChatRpcCmd) Exec() error { } func (a *ChatRpcCmd) runE() error { - return startrpc.Start(a.ctx, &a.chatConfig.ZookeeperConfig, a.chatConfig.RpcConfig.RPC.ListenIP, + return startrpc.Start(a.ctx, &a.chatConfig.Discovery, a.chatConfig.RpcConfig.RPC.ListenIP, a.chatConfig.RpcConfig.RPC.RegisterIP, a.chatConfig.RpcConfig.RPC.Ports, a.Index(), a.chatConfig.Share.RpcRegisterName.Chat, &a.chatConfig.Share, &a.chatConfig, chat.Start) } diff --git a/pkg/common/cmd/constant.go b/pkg/common/cmd/constant.go index 75115d642..b07147d69 100644 --- a/pkg/common/cmd/constant.go +++ b/pkg/common/cmd/constant.go @@ -21,7 +21,7 @@ import ( var ( ShareFileName = "share.yml" RedisConfigFileName = "redis.yml" - ZookeeperConfigFileName = "zookeeper.yml" + DiscoveryConfigFileName = "discovery.yml" MongodbConfigFileName = "mongodb.yml" LogConfigFileName = "log.yml" ChatAPIAdminCfgFileName = "chat-api-admin.yml" @@ -37,7 +37,7 @@ func init() { fileNames := []string{ ShareFileName, RedisConfigFileName, - ZookeeperConfigFileName, + DiscoveryConfigFileName, MongodbConfigFileName, LogConfigFileName, ChatAPIAdminCfgFileName, diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 1412f0e4e..6f926660a 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -94,6 +94,19 @@ type ZooKeeper struct { Password string `mapstructure:"password"` } +type Discovery struct { + Enable string `mapstructure:"enable"` + Etcd Etcd `mapstructure:"etcd"` + ZooKeeper ZooKeeper `mapstructure:"zooKeeper"` +} + +type Etcd struct { + RootDirectory string `mapstructure:"rootDirectory"` + Address []string `mapstructure:"address"` + Username string `mapstructure:"username"` + Password string `mapstructure:"password"` +} + type Chat struct { RPC struct { RegisterIP string `mapstructure:"registerIP"` diff --git a/pkg/common/kdisc/discoveryregister.go b/pkg/common/kdisc/discoveryregister.go index eb5bbdcc0..06e2148f1 100644 --- a/pkg/common/kdisc/discoveryregister.go +++ b/pkg/common/kdisc/discoveryregister.go @@ -17,6 +17,7 @@ package kdisc import ( "github.com/openimsdk/chat/pkg/common/config" "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/discovery/etcd" "github.com/openimsdk/tools/discovery/zookeeper" "github.com/openimsdk/tools/errs" "time" @@ -29,20 +30,25 @@ const ( ) // NewDiscoveryRegister creates a new service discovery and registry client based on the provided environment type. -func NewDiscoveryRegister(zookeeperConfig *config.ZooKeeper, share *config.Share) (discovery.SvcDiscoveryRegistry, error) { - switch share.Env { - case zookeeperConst: +func NewDiscoveryRegister(discovery *config.Discovery) (discovery.SvcDiscoveryRegistry, error) { + switch discovery.Enable { + case "zookeeper": return zookeeper.NewZkClient( - zookeeperConfig.Address, - zookeeperConfig.Schema, + discovery.ZooKeeper.Address, + discovery.ZooKeeper.Schema, zookeeper.WithFreq(time.Hour), - zookeeper.WithUserNameAndPassword(zookeeperConfig.Username, zookeeperConfig.Password), + zookeeper.WithUserNameAndPassword(discovery.ZooKeeper.Username, discovery.ZooKeeper.Password), zookeeper.WithRoundRobin(), zookeeper.WithTimeout(10), ) - //case directConst: - // return direct.NewConnDirect(config) + case "etcd": + return etcd.NewSvcDiscoveryRegistry( + discovery.Etcd.RootDirectory, + discovery.Etcd.Address, + etcd.WithDialTimeout(10*time.Second), + etcd.WithMaxCallSendMsgSize(20*1024*1024), + etcd.WithUsernameAndPassword(discovery.Etcd.Username, discovery.Etcd.Password)) default: - return nil, errs.New("unsupported discovery type", "type", share.Env).Wrap() + return nil, errs.New("unsupported discovery type", "type", discovery.Enable).Wrap() } } diff --git a/pkg/common/startrpc/start.go b/pkg/common/startrpc/start.go index 6556f89ce..ca394c694 100644 --- a/pkg/common/startrpc/start.go +++ b/pkg/common/startrpc/start.go @@ -39,7 +39,7 @@ import ( ) // Start rpc server. -func Start[T any](ctx context.Context, zookeeperConfig *config.ZooKeeper, listenIP, +func Start[T any](ctx context.Context, discovery *config.Discovery, listenIP, registerIP string, rpcPorts []int, index int, rpcRegisterName string, share *config.Share, config T, rpcFn func(ctx context.Context, config T, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error, options ...grpc.ServerOption) error { @@ -58,7 +58,7 @@ func Start[T any](ctx context.Context, zookeeperConfig *config.ZooKeeper, listen } defer listener.Close() - client, err := kdisc.NewDiscoveryRegister(zookeeperConfig, share) + client, err := kdisc.NewDiscoveryRegister(discovery) if err != nil { return err } diff --git a/tools/check-component/main.go b/tools/check-component/main.go index f0719943e..131da4c9b 100644 --- a/tools/check-component/main.go +++ b/tools/check-component/main.go @@ -24,6 +24,7 @@ import ( "github.com/openimsdk/protocol/constant" "github.com/openimsdk/tools/db/mongoutil" "github.com/openimsdk/tools/db/redisutil" + "github.com/openimsdk/tools/discovery/etcd" "github.com/openimsdk/tools/discovery/zookeeper" "github.com/openimsdk/tools/mcontext" "github.com/openimsdk/tools/system/program" @@ -38,6 +39,14 @@ func CheckZookeeper(ctx context.Context, config *config.ZooKeeper) error { return zookeeper.Check(ctx, config.Address, config.Schema, zookeeper.WithUserNameAndPassword(config.Username, config.Password)) } +func CheckEtcd(ctx context.Context, config *config.Etcd) error { + return etcd.Check(ctx, config.Address, "/check_chat_component", + true, + etcd.WithDialTimeout(10*time.Second), + etcd.WithMaxCallSendMsgSize(20*1024*1024), + etcd.WithUsernameAndPassword(config.Username, config.Password)) +} + func CheckMongo(ctx context.Context, config *config.Mongo) error { return mongoutil.Check(ctx, config.Build()) } @@ -52,11 +61,11 @@ func CheckOpenIM(ctx context.Context, apiURL, secret, adminUserID string) error return err } -func initConfig(configDir string) (*config.Mongo, *config.Redis, *config.ZooKeeper, *config.Share, error) { +func initConfig(configDir string) (*config.Mongo, *config.Redis, *config.Discovery, *config.Share, error) { var ( mongoConfig = &config.Mongo{} redisConfig = &config.Redis{} - zookeeperConfig = &config.ZooKeeper{} + discoveryConfig = &config.Discovery{} shareConfig = &config.Share{} ) err := config.LoadConfig(filepath.Join(configDir, cmd.MongodbConfigFileName), cmd.ConfigEnvPrefixMap[cmd.MongodbConfigFileName], mongoConfig) @@ -69,7 +78,7 @@ func initConfig(configDir string) (*config.Mongo, *config.Redis, *config.ZooKeep return nil, nil, nil, nil, err } - err = config.LoadConfig(filepath.Join(configDir, cmd.ZookeeperConfigFileName), cmd.ConfigEnvPrefixMap[cmd.ZookeeperConfigFileName], zookeeperConfig) + err = config.LoadConfig(filepath.Join(configDir, cmd.DiscoveryConfigFileName), cmd.ConfigEnvPrefixMap[cmd.DiscoveryConfigFileName], discoveryConfig) if err != nil { return nil, nil, nil, nil, err } @@ -78,7 +87,7 @@ func initConfig(configDir string) (*config.Mongo, *config.Redis, *config.ZooKeep return nil, nil, nil, nil, err } - return mongoConfig, redisConfig, zookeeperConfig, shareConfig, nil + return mongoConfig, redisConfig, discoveryConfig, shareConfig, nil } func main() { @@ -105,13 +114,10 @@ func main() { } } -func performChecks(ctx context.Context, mongoConfig *config.Mongo, redisConfig *config.Redis, zookeeperConfig *config.ZooKeeper, shareConfig *config.Share, maxRetry int) error { +func performChecks(ctx context.Context, mongoConfig *config.Mongo, redisConfig *config.Redis, discovery *config.Discovery, shareConfig *config.Share, maxRetry int) error { checksDone := make(map[string]bool) checks := map[string]func(ctx context.Context) error{ - "Zookeeper": func(ctx context.Context) error { - return CheckZookeeper(ctx, zookeeperConfig) - }, "Mongo": func(ctx context.Context) error { return CheckMongo(ctx, mongoConfig) }, @@ -123,6 +129,16 @@ func performChecks(ctx context.Context, mongoConfig *config.Mongo, redisConfig * }, } + if discovery.Enable == "etcd" { + checks["Etcd"] = func(ctx context.Context) error { + return CheckEtcd(ctx, &discovery.Etcd) + } + } else if discovery.Enable == "zookeeper" { + checks["Zookeeper"] = func(ctx context.Context) error { + return CheckZookeeper(ctx, &discovery.ZooKeeper) + } + } + for i := 0; i < maxRetry; i++ { allSuccess := true for name, check := range checks { From 67b3aed1b55e621df6930dddbf07603b6108f37b Mon Sep 17 00:00:00 2001 From: skiffer-git <72860476+skiffer-git@users.noreply.github.com> Date: Wed, 15 May 2024 15:42:59 +0800 Subject: [PATCH 14/15] Delete .github/dependabot.yml --- .github/dependabot.yml | 59 ------------------------------------------ 1 file changed, 59 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index d05322f18..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright © 2023 OpenIM open source community. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "gomod" - directory: "/" - schedule: - interval: "daily" - time: "08:00" - labels: - - "dependencies" - commit-message: - prefix: "feat" - include: "scope" - groups: - gomod-deps: - patterns: - - "*" - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" - time: "08:00" - labels: - - "dependencies" - commit-message: - prefix: "chore" - include: "scope" - groups: - github-actions: - patterns: - - "*" - - package-ecosystem: "docker" - directory: "/" - schedule: - interval: "daily" - time: "08:00" - labels: - - "dependencies" - commit-message: - prefix: "feat" - include: "scope" \ No newline at end of file From 1a4af90da7c8b1b0dfc9cfdbe9a7b1257917f61f Mon Sep 17 00:00:00 2001 From: blooming <37789413+Bloomingg@users.noreply.github.com> Date: Mon, 20 May 2024 10:49:55 +0800 Subject: [PATCH 15/15] docs: livekit quick start (#543) * docs: livekit quick start * Update CODEOWNERS --- HOW_TO_SETUP_LIVEKIT_SERVER.md | 63 +++++++++++++++------------------- docs/CODEOWNERS | 2 +- livekit/livekit.yaml | 9 +++++ 3 files changed, 37 insertions(+), 37 deletions(-) create mode 100644 livekit/livekit.yaml diff --git a/HOW_TO_SETUP_LIVEKIT_SERVER.md b/HOW_TO_SETUP_LIVEKIT_SERVER.md index cf4c8c85a..c8c6dd23e 100644 --- a/HOW_TO_SETUP_LIVEKIT_SERVER.md +++ b/HOW_TO_SETUP_LIVEKIT_SERVER.md @@ -1,54 +1,45 @@ -# How to setup LiveKit server +# Setting Up LiveKit Server for OpenIM Chat -OpenIM Chat uses LiveKit server as the media server to support video call and video meeting services. +OpenIM Chat uses the LiveKit server as the media server to support video calls and video meeting services. +## About LiveKit -## Something about LiveKit +[LiveKit](https://github.com/livekit/livekit-server) is an open-source WebRTC SFU written in Go, built on top of the excellent [Pion](https://github.com/pion) project. For more information, visit the [LiveKit website](https://livekit.io/). -[Livekit](https://github.com/livekit/livekit-server) is an open source WebRTC SFU written in go, built on top of the excellent [Pion](https://github.com/pion) project. You can get more information about it on its website [livekit.io](https://livekit.io/). +## Quick Start - -## Setup LiveKit server on Linux - -Please follow the following instructions to setup a LiveKit server to work with OpenIM Chat and OpenIM server on Linux server. - -### Docker installation - -For self hosting user, we suggest you install LiveKit server by docker pull. You can get a server ready for use in a short time. +To self-host LiveKit, start the server with the following Docker command: ```bash -sudo docker pull livekit/livekit-server +docker run -d \ + -p 7880:7880 \ + -p 7881:7881 \ + -p 7882:7882/udp \ + -v $PWD/livekit/livekit.yaml:/livekit.yaml \ + livekit/livekit-server \ + --config /livekit.yaml \ + --bind 0.0.0.0 ``` -For cloud deployment, you may follow the [Deploy to a VM](https://docs.livekit.io/realtime/self-hosting/vm/#Deploy-to-a-VM) on [livekit.io](https://docs.livekit.io/). - -### Generate configuration +## Viewing Logs -To generate configuration file for LiveKit server, please refer to [Generate configuration](https://docs.livekit.io/realtime/self-hosting/vm/#Generate-configuration). +To check the server logs and ensure everything is running correctly, use the following command: -The keys section of the generated .yaml file is the "apiKey: apiSecret" pair. This key pair should be set to the LiveKit section as the value of key and secret arguments. - -### Generate access token for video call participant - -Please refer to [Generating tokens](https://docs.livekit.io/realtime/server/generating-tokens/) on [livekit.io](https://docs.livekit.io/). +```bash +docker logs livekit/livekit-server +``` -### Run it +## Configuring the LiveKit Address in OpenIM Chat -For self hosting user, you may start LiveKit with: +Update the `config/chat-rpc-chat.yml` file to configure the LiveKit server address: -```bash -docker run --rm \ - -p 7880:7880 \ - -p 7881:7881 \ - -p 7882:7882/udp \ - -v $PWD/livekit.yaml:/livekit.yaml \ - livekit/livekit-server \ - --config /livekit.yaml \ - --bind 0.0.0.0 +```yaml +liveKit: + url: "ws://127.0.0.1:7880" # LIVEKIT_URL, LiveKit server address and port ``` -For cloud deployment user, you may follow the [Deploy to a VM](https://docs.livekit.io/realtime/self-hosting/vm/#Deploy-to-a-VM) on [livekit.io](https://docs.livekit.io/). +By following these steps, you can set up and configure the LiveKit server for use with OpenIM Chat. -## More about Deploying LiveKit +## More about Deploying LiveKi -Please refer to the self hosting [Deploying LiveKit](https://docs.livekit.io/realtime/self-hosting/deployment/) documentation. +For detailed instructions on deploying LiveKit, refer to the self-hosting [deployment documentation](https://docs.livekit.io/realtime/self-hosting/deployment/). diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS index f3a3a550d..015466d02 100644 --- a/docs/CODEOWNERS +++ b/docs/CODEOWNERS @@ -1 +1 @@ -* @openimsdk/go-code-review @skiffer-git @withchao +* @Bloomingg @FGadvancer @skiffer-git @withchao diff --git a/livekit/livekit.yaml b/livekit/livekit.yaml new file mode 100644 index 000000000..5d1f955f4 --- /dev/null +++ b/livekit/livekit.yaml @@ -0,0 +1,9 @@ +port: 7880 +rtc: + tcp_port: 7881 + port_range_start: 50000 + port_range_end: 60000 + use_external_ip: true + enable_loopback_candidate: false +keys: + APIftrpEkL9x2pa: 23ztfSqsfQ8hKkHzHTl3Z4bvaxro0snjk5jwbp5p6Q3 \ No newline at end of file