From 1f25f7dc78173486e5c0c6fe67149930be26d357 Mon Sep 17 00:00:00 2001 From: "Xinwei Xiong(cubxxw-openim)" <3293172751nss@gmail.com> Date: Fri, 18 Aug 2023 14:49:50 +0000 Subject: [PATCH] feat: commit tag Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --- .env | 20 +- config/config_copy.yaml | 378 ----------------- config/openim_config.yaml | 387 ------------------ docker-compose.yaml | 112 ++--- docs/contrib/protoc_tools.md | 60 +++ install_guide.sh | 2 +- scripts/README.md | 2 +- scripts/check-all.sh | 2 +- ...eck_service.sh => docker-check-service.sh} | 2 - scripts/docker-start-all.sh | 2 + scripts/init-env.sh | 31 ++ scripts/install/install-protobuf.sh | 45 +- scripts/install_im_compose.sh | 2 +- scripts/install_im_server.sh | 2 +- scripts/lib/util.sh | 10 +- 15 files changed, 199 insertions(+), 858 deletions(-) delete mode 100644 config/config_copy.yaml delete mode 100644 config/openim_config.yaml create mode 100644 docs/contrib/protoc_tools.md rename scripts/{docker_check_service.sh => docker-check-service.sh} (99%) create mode 100755 scripts/init-env.sh diff --git a/.env b/.env index 9397d2b37..412b75076 100644 --- a/.env +++ b/.env @@ -1,19 +1,5 @@ -# Copyright © 2023 OpenIM. 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. - USER=root PASSWORD=openIM123 -MINIO_ENDPOINT=http://113.90.85.238:10005 -API_URL=http://113.90.85.238:10002/object/ -DATA_DIR=/root/workspaces/openim/openim-server +MINIO_ENDPOINT=http://127.0.0.1:10005 +API_URL=http://127.0.0.1:10002/object/ +DATA_DIR=./ \ No newline at end of file diff --git a/config/config_copy.yaml b/config/config_copy.yaml deleted file mode 100644 index 27f01fb8b..000000000 --- a/config/config_copy.yaml +++ /dev/null @@ -1,378 +0,0 @@ -# Copyright © 2023 OpenIM. 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. - -# ----------------------------------------------------------------- -# Infrastructural configurations, please modify based on your setup -# ----------------------------------------------------------------- - -###################### Zookeeper ###################### -# Zookeeper configuration -# It's not recommended to modify the schema -# -# Zookeeper address -# Zookeeper username -# Zookeeper password -zookeeper: - schema: openim - address: [ 127.0.0.1:2181 ] - username: - password: - -###################### Mysql ###################### -# MySQL configuration -# Currently, only single machine setup is supported -# -# Maximum number of open connections -# Maximum number of idle connections -# Maximum lifetime in seconds a connection can be reused -# Log level: 1=slient, 2=error, 3=warn, 4=info -# Slow query threshold in milliseconds -mysql: - address: [ 127.0.0.1:13306 ] - username: root - password: openIM123 - database: openIM_v3 - maxOpenConn: 1000 - maxIdleConn: 100 - maxLifeTime: 60 - logLevel: 4 - slowThreshold: 500 - -###################### Mongo ###################### -# MongoDB configuration -# If uri is not empty, it will be used directly -# -# MongoDB address for standalone setup, Mongos address for sharded cluster setup -# Default MongoDB database name -# Maximum connection pool size -mongo: - uri: - address: [ 127.0.0.1:37017 ] - database: openIM_v3 - username: root - password: openIM123 - maxPoolSize: 100 - -###################### Redis ###################### -# Redis configuration -# -# Username is required only for Redis version 6.0+ -redis: - address: [ 127.0.0.1:16379 ] - username: - password: openIM123 - -###################### Kafka ###################### -# Kafka configuration -# -# Kafka username -# Kafka password -# It's not recommended to modify this topic name -# Consumer group ID, it's not recommended to modify -kafka: - username: - password: - addr: [ 127.0.0.1:9092 ] - latestMsgToRedis: - topic: "latestMsgToRedis" - offlineMsgToMongo: - topic: "offlineMsgToMongoMysql" - msgToPush: - topic: "msgToPush" - consumerGroupID: - msgToRedis: redis - msgToMongo: mongo - msgToMySql: mysql - msgToPush: push - -###################### RPC ###################### -# RPC configuration -# -# IP address to register with zookeeper when starting RPC, the IP and corresponding rpcPort should be accessible by api/gateway -# Default listen IP is 0.0.0.0 -rpc: - registerIP: - listenIP: 0.0.0.0 - -###################### API ###################### -# API configuration -# -# API service port -# Default listen IP is 0.0.0.0 -api: - openImApiPort: [ 10002 ] - listenIP: 0.0.0.0 - -###################### Gateway ###################### -# Object storage configuration -# -# Use minio for object storage -# API URL should be accessible by the app -# It's not recommended to modify the bucket name -# Endpoint should be accessible by the app -# Session token -# Configuration for Tencent COS -# Configuration for Aliyun OSS -# apiURL is the address of the api, the access address of the app, use s3 must be configured -# minio.endpoint can be configured as an intranet address, -# minio.signEndpoint is minio public network address -object: - enable: "minio" - apiURL: "http://127.0.0.1:10002" - minio: - bucket: "openim" - endpoint: "http://127.0.0.1:10005" - accessKeyID: "root" - secretAccessKey: "openIM123" - sessionToken: "" - signEndpoint: "http://127.0.0.1:10005" - cos: - bucketURL: "https://temp-1252357374.cos.ap-chengdu.myqcloud.com" - secretID: "" - secretKey: "" - sessionToken: "" - oss: - endpoint: "https://oss-cn-chengdu.aliyuncs.com" - bucket: "demo-9999999" - bucketURL: "https://demo-9999999.oss-cn-chengdu.aliyuncs.com" - accessKeyID: "" - accessKeySecret: "" - sessionToken: "" - -# RPC service ports -# These ports are passed into the program by the script and are not recommended to modify -# For launching multiple programs, just fill in multiple ports separated by commas -# For example, [10110, 10111] -rpcPort: - openImUserPort: [ 10110 ] - openImFriendPort: [ 10120 ] - openImMessagePort: [ 10130 ] - openImMessageGatewayPort: [ 10140 ] - openImGroupPort: [ 10150 ] - openImAuthPort: [ 10160 ] - openImPushPort: [ 10170 ] - openImConversationPort: [ 10180 ] - openImThirdPort: [ 10190 ] - -# RPC service names for registration, it's not recommended to modify these -rpcRegisterName: - openImUserName: User - openImFriendName: Friend - openImMsgName: Msg - openImPushName: Push - openImMessageGatewayName: MessageGateway - openImGroupName: Group - openImAuthName: Auth - openImConversationName: Conversation - openImThirdName: Third - -# Log configuration -# -# Storage directory -# Log rotation time -# Maximum number of logs to retain -# Log level, 6 means all levels -# Whether to output to stdout -# Whether to output in json format -# Whether to include stack trace in logs -log: - storageLocation: ../../../../../logs/ - rotationTime: 24 - remainRotationCount: 2 - remainLogLevel: 6 - isStdout: false - isJson: false - withStack: false - -# Long connection server configuration -# -# Websocket port for msg_gateway -# Maximum number of websocket connections -# Maximum length of websocket request package -# Websocket connection handshake timeout -longConnSvr: - openImWsPort: [ 10001 ] - websocketMaxConnNum: 100000 - websocketMaxMsgLen: 4096 - websocketTimeout: 10 - -# Push notification service configuration -# -# Use GeTui for push notifications -# GeTui offline push configuration -# FCM offline push configuration -# Account file, place it in the config directory -# JPush configuration, modify these after applying in JPush backend -push: - enable: getui - geTui: - pushUrl: "https://restapi.getui.com/v2/$appId" - masterSecret: "" - appKey: "" - intent: "" - channelID: "" - channelName: "" - fcm: - serviceAccount: "x.json" - jpns: - appKey: - masterSecret: - pushUrl: - pushIntent: - -# App manager configuration -# -# Built-in app manager user IDs -# Built-in app manager nicknames -manager: - userID: [ "openIM123456","openIM654321","openIMAdmin" ] - nickname: [ "system1","system2", "system3" ] - -# Multi-platform login policy -# For each platform(Android, iOS, Windows, Mac, web), only one can be online at a time -multiLoginPolicy: 1 - -# Whether to store messages in MySQL, messages in MySQL are only used for management background -chatPersistenceMysql: true - -# Message cache timeout in seconds, it's not recommended to modify -msgCacheTimeout: 86400 - -# Whether to enable read receipts for group chat -groupMessageHasReadReceiptEnable: true - -# Whether to enable read receipts for single chat -singleMessageHasReadReceiptEnable: true - -# MongoDB offline message retention period in days -retainChatRecords: 365 - -# Schedule to clear expired messages(older than retainChatRecords days) in MongoDB every Wednesday at 2am -# This deletion is just for cleaning up disk usage according to previous configuration retainChatRecords, no notification will be sent -chatRecordsClearTime: "0 2 * * 3" - -# Schedule to auto delete messages every day at 2am -# This deletion is for messages that have been retained for more than msg_destruct_time (seconds) in the conversation field -msgDestructTime: "0 2 * * *" - -# Secret key -secret: openIM123 - -# Token policy -# -# Token expiration period in days -tokenPolicy: - expire: 90 - -# Message verification policy -# -# Whether to verify friendship when sending messages -messageVerify: - friendVerify: false - -# iOS push notification configuration -# -# iOS push notification sound -# Whether to count badge -# Whether it's production environment -iosPush: - pushSound: "xxx" - badgeCount: true - production: false - -# Callback configuration -# -# Callback URL -# Whether to enable this callback event -# Timeout in seconds -# Whether to continue execution if callback fails -callback: - url: - beforeSendSingleMsg: - enable: false - timeout: 5 - failedContinue: true - afterSendSingleMsg: - enable: false - timeout: 5 - beforeSendGroupMsg: - enable: false - timeout: 5 - failedContinue: true - afterSendGroupMsg: - enable: false - timeout: 5 - msgModify: - enable: false - timeout: 5 - failedContinue: true - userOnline: - enable: false - timeout: 5 - userOffline: - enable: false - timeout: 5 - userKickOff: - enable: false - timeout: 5 - offlinePush: - enable: false - timeout: 5 - failedContinue: true - onlinePush: - enable: false - timeout: 5 - failedContinue: true - superGroupOnlinePush: - enable: false - timeout: 5 - failedContinue: true - beforeAddFriend: - enable: false - timeout: 5 - failedContinue: true - beforeCreateGroup: - enable: false - timeout: 5 - failedContinue: true - beforeMemberJoinGroup: - enable: false - timeout: 5 - failedContinue: true - beforeSetGroupMemberInfo: - enable: false - timeout: 5 - failedContinue: true - setMessageReactionExtensions: - enable: false - timeout: 5 - failedContinue: true - -###################### Prometheus ###################### -# Prometheus configuration -# The number of Prometheus ports per service needs to correspond to rpcPort -# The number of ports needs to be consistent with msg_transfer_service_num in script/path_info.sh -prometheus: - enable: false - userPrometheusPort: [ 20110 ] - friendPrometheusPort: [ 20120 ] - messagePrometheusPort: [ 20130 ] - messageGatewayPrometheusPort: [ 20140 ] - groupPrometheusPort: [ 20150 ] - authPrometheusPort: [ 20160 ] - pushPrometheusPort: [ 20170 ] - conversationPrometheusPort: [ 20230 ] - rtcPrometheusPort: [ 21300 ] - thirdPrometheusPort: [ 21301 ] - messageTransferPrometheusPort: [ 21400, 21401, 21402, 21403 ] \ No newline at end of file diff --git a/config/openim_config.yaml b/config/openim_config.yaml deleted file mode 100644 index b28354f7a..000000000 --- a/config/openim_config.yaml +++ /dev/null @@ -1,387 +0,0 @@ -# Copyright © 2023 OpenIM. 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. - -# ----------------------------------------------------------------- -# TODO: This config file is the template file -# --| source: scripts/template/config-tmpl/config.yaml -# --| env: scripts/install/environment.sh -# --| target: config/config.yaml -# ----------------------------------------------------------------- - -###################### Zookeeper ###################### -# Zookeeper configuration -# It's not recommended to modify the schema -# -# Zookeeper address -# Zookeeper username -# Zookeeper password -zookeeper: - schema: openim - address: [ 127.0.0.1:2181 ] - username: '' - password: '' - -###################### Mysql ###################### -# MySQL configuration -# Currently, only single machine setup is supported -# -# Maximum number of open connections -# Maximum number of idle connections -# Maximum lifetime in seconds a connection can be reused -# Log level: 1=slient, 2=error, 3=warn, 4=info -# Slow query threshold in milliseconds -mysql: - address: [ 127.0.0.1:13306 ] - username: root - password: openIM123 - database: openIM_v3 - maxOpenConn: 1000 - maxIdleConn: 100 - maxLifeTime: 60 - logLevel: 4 - slowThreshold: 500 - -###################### Mongo ###################### -# MongoDB configuration -# If uri is not empty, it will be used directly -# -# MongoDB address for standalone setup, Mongos address for sharded cluster setup -# Default MongoDB database name -# Maximum connection pool size -mongo: - uri: '' - address: [ 127.0.0.1:37017 ] - database: openIM_v3 - username: root - password: openIM123 - maxPoolSize: 100 - -###################### Redis configuration information ###################### -# Redis configuration -# -# Username is required only for Redis version 6.0+ -redis: - address: [ 127.0.0.1:16379 ] - username: '' - password: openIM123 - -###################### Kafka configuration information ###################### -# Kafka configuration -# -# Kafka username -# Kafka password -# It's not recommended to modify this topic name -# Consumer group ID, it's not recommended to modify -kafka: - username: '' - password: '' - addr: [ 127.0.0.1:9092 ] - latestMsgToRedis: - topic: "latestMsgToRedis" - offlineMsgToMongo: - topic: "offlineMsgToMongoMysql" - msgToPush: - topic: "msgToPush" - consumerGroupID: - msgToRedis: redis - msgToMongo: mongo - msgToMySql: mysql - msgToPush: push - -###################### RPC configuration information ###################### -# RPC configuration -# -# IP address to register with zookeeper when starting RPC, the IP and corresponding rpcPort should be accessible by api/gateway -# Default listen IP is 0.0.0.0 -rpc: - registerIP: '' - listenIP: 0.0.0.0 - -###################### API configuration information ###################### -# API configuration -# -# API service port -# Default listen IP is 0.0.0.0 -api: - openImApiPort: [ 10002 ] - listenIP: 0.0.0.0 - -###################### Object configuration information ###################### -# Object storage configuration -# -# Use minio for object storage -# API URL should be accessible by the app -# It's not recommended to modify the bucket name -# Endpoint should be accessible by the app -# Session token -# Configuration for Tencent COS -# Configuration for Aliyun OSS -# apiURL is the address of the api, the access address of the app, use s3 must be configured -# minio.endpoint can be configured as an intranet address, -# minio.signEndpoint is minio public network address -object: - enable: "minio" - apiURL: "http://127.0.0.1:10002/object/" - minio: - bucket: "openim" - endpoint: "http://113.90.85.238:10005" - accessKeyID: "root" - secretAccessKey: "openIM123" - sessionToken: '' - signEndpoint: "http://113.90.85.238:10005" - cos: - bucketURL: https://temp-1252357374.cos.ap-chengdu.myqcloud.com - secretID: '' - secretKey: '' - sessionToken: '' - oss: - endpoint: "https://oss-cn-chengdu.aliyuncs.com" - bucket: "demo-9999999" - bucketURL: "https://demo-9999999.oss-cn-chengdu.aliyuncs.com" - accessKeyID: root - accessKeySecret: '' - sessionToken: '' - - -###################### RPC Port Configuration ###################### -# RPC service ports -# These ports are passed into the program by the script and are not recommended to modify -# For launching multiple programs, just fill in multiple ports separated by commas -# For example, [10110, 10111] -rpcPort: - openImUserPort: [ 10110 ] - openImFriendPort: [ 10120 ] - openImMessagePort: [ 10130 ] - openImMessageGatewayPort: [ 10140 ] - openImGroupPort: [ 10150 ] - openImAuthPort: [ 10160 ] - openImPushPort: [ 10170 ] - openImConversationPort: [ 10180 ] - openImThirdPort: [ 10190 ] - -###################### RPC Register Name Configuration ###################### -# RPC service names for registration, it's not recommended to modify these -rpcRegisterName: - openImUserName: User - openImFriendName: Friend - openImMsgName: Msg - openImPushName: Push - openImMessageGatewayName: MessageGateway - openImGroupName: Group - openImAuthName: Auth - openImConversationName: Conversation - openImThirdName: Third - -###################### Log Configuration ###################### -# Log configuration -# -# Storage directory -# Log rotation time -# Maximum number of logs to retain -# Log level, 6 means all levels -# Whether to output to stdout -# Whether to output in json format -# Whether to include stack trace in logs -log: - storageLocation: /root/workspaces/openim/openim-server/logs/ - rotationTime: 24 - remainRotationCount: 2 - remainLogLevel: 6 - isStdout: false - isJson: false - withStack: false - -###################### Variables definition ###################### -# Long connection server configuration -# -# Websocket port for msg_gateway -# Maximum number of websocket connections -# Maximum length of websocket request package -# Websocket connection handshake timeout -longConnSvr: - openImWsPort: [ 10001 ] - websocketMaxConnNum: 100000 - websocketMaxMsgLen: 4096 - websocketTimeout: 10 - -# Push notification service configuration -# -# Use GeTui for push notifications -# GeTui offline push configuration -# FCM offline push configuration -# Account file, place it in the config directory -# JPush configuration, modify these after applying in JPush backend -push: - enable: getui - geTui: - pushUrl: "https://restapi.getui.com/v2/$appId" - masterSecret: "" - appKey: "" - intent: "" - channelID: "" - channelName: "" - fcm: - serviceAccount: x.json - jpns: - appKey: - masterSecret: - pushUrl: - pushIntent: - -# App manager configuration -# -# Built-in app manager user IDs -# Built-in app manager nicknames -manager: - userID: [ "openIM123456", "openIM654321", "openIMAdmin" ] - nickname: [ "system1", "system2", "system3" ] - -# Multi-platform login policy -# For each platform(Android, iOS, Windows, Mac, web), only one can be online at a time -multiLoginPolicy: 1 - -# Whether to store messages in MySQL, messages in MySQL are only used for management background -chatPersistenceMysql: true - -# Message cache timeout in seconds, it's not recommended to modify -msgCacheTimeout: 86400 - -# Whether to enable read receipts for group chat -groupMessageHasReadReceiptEnable: true - -# Whether to enable read receipts for single chat -singleMessageHasReadReceiptEnable: true - -# MongoDB offline message retention period in days -retainChatRecords: 365 - -# Schedule to clear expired messages(older than retainChatRecords days) in MongoDB every Wednesday at 2am -# This deletion is just for cleaning up disk usage according to previous configuration retainChatRecords, no notification will be sent -chatRecordsClearTime: "0 2 * * 3" - -# Schedule to auto delete messages every day at 2am -# This deletion is for messages that have been retained for more than msg_destruct_time (seconds) in the conversation field -msgDestructTime: "0 2 * * *" - -# Secret key -secret: openIM123 - -# Token policy -# -# Token expiration period in days -tokenPolicy: - expire: 90 - -# Message verification policy -# -# Whether to verify friendship when sending messages -messageVerify: - friendVerify: false - -# iOS push notification configuration -# -# iOS push notification sound -# Whether to count badge -# Whether it's production environment -iosPush: - pushSound: "xxx" - badgeCount: true - production: false - -###################### Third-party service configuration ###################### -# Callback configuration -# -# Callback URL -# Whether to enable this callback event -# Timeout in seconds -# Whether to continue execution if callback fails -callback: - url: - beforeSendSingleMsg: - enable: false - timeout: 5 - failedContinue: true - afterSendSingleMsg: - enable: false - timeout: 5 - beforeSendGroupMsg: - enable: false - timeout: 5 - failedContinue: true - afterSendGroupMsg: - enable: false - timeout: 5 - msgModify: - enable: false - timeout: 5 - failedContinue: true - userOnline: - enable: false - timeout: 5 - userOffline: - enable: false - timeout: 5 - userKickOff: - enable: false - timeout: 5 - offlinePush: - enable: false - timeout: 5 - failedContinue: true - onlinePush: - enable: false - timeout: 5 - failedContinue: true - superGroupOnlinePush: - enable: false - timeout: 5 - failedContinue: true - beforeAddFriend: - enable: false - timeout: 5 - failedContinue: true - beforeCreateGroup: - enable: false - timeout: 5 - failedContinue: true - beforeMemberJoinGroup: - enable: false - timeout: 5 - failedContinue: true - beforeSetGroupMemberInfo: - enable: false - timeout: 5 - failedContinue: true - setMessageReactionExtensions: - enable: false - timeout: 5 - failedContinue: true - -###################### Prometheus ###################### -# Prometheus configuration for various services -# The number of Prometheus ports per service needs to correspond to rpcPort -# The number of ports needs to be consistent with msg_transfer_service_num in script/path_info.sh -prometheus: - enable: false - userPrometheusPort: [ 20110 ] - friendPrometheusPort: [ 20120 ] - messagePrometheusPort: [ 20130 ] - messageGatewayPrometheusPort: [ 20140 ] - groupPrometheusPort: [ 20150 ] - authPrometheusPort: [ 20160 ] - pushPrometheusPort: [ 20170 ] - conversationPrometheusPort: [ 20230 ] - rtcPrometheusPort: [ 21300 ] - thirdPrometheusPort: [ 21301 ] - messageTransferPrometheusPort: [ 21400, 21401, 21402, 21403 ] # List of ports diff --git a/docker-compose.yaml b/docker-compose.yaml index b1788e938..feb107da0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -98,35 +98,35 @@ services: restart: always command: minio server /data --console-address ':9090' - openim-server: - # image: ghcr.io/openimsdk/openim-server:latest - image: registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server:latest - # image: openim/openim-server:latest - # build: . - container_name: openim-server - # healthcheck: - # test: ["CMD-SHELL", "./scripts/check-all.sh"] - # interval: 30s - # timeout: 10s - # retries: 5 - volumes: - - ${DATA_DIR}/_output/openim/logs:/openim/openim-server/logs - - ${DATA_DIR}/config:/openim/openim-server/config - - ${DATA_DIR}/scripts:/openim/openim-server/scripts - restart: always - depends_on: - - zookeeper - - kafka - - mysql - - mongodb - - redis - - minio - network_mode: "host" - logging: - driver: json-file - options: - max-size: "1g" - max-file: "2" + # openim-server: + # # image: ghcr.io/openimsdk/openim-server:latest + # image: registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server:latest + # # image: openim/openim-server:latest + # # build: . + # container_name: openim-server + # # healthcheck: + # # test: ["CMD-SHELL", "./scripts/check-all.sh"] + # # interval: 30s + # # timeout: 10s + # # retries: 5 + # volumes: + # - ${DATA_DIR}/_output/openim/logs:/openim/openim-server/logs + # - ${DATA_DIR}/config:/openim/openim-server/config + # - ${DATA_DIR}/scripts:/openim/openim-server/scripts + # restart: always + # depends_on: + # - zookeeper + # - kafka + # - mysql + # - mongodb + # - redis + # - minio + # network_mode: "host" + # logging: + # driver: json-file + # options: + # max-size: "1g" + # max-file: "2" openim-chat: # image: ghcr.io/openimsdk/openim-chat:latest @@ -157,32 +157,32 @@ services: max-size: "1g" max-file: "2" - prometheus: - image: prom/prometheus - volumes: - - ./.docker-compose_cfg/prometheus-compose.yml:/etc/prometheus/prometheus.yml - container_name: prometheus - # ports: - # - 9091:9091 - depends_on: - - openim-server - command: --web.listen-address=:9091 --config.file="/etc/prometheus/prometheus.yml" - network_mode: "host" + # prometheus: + # image: prom/prometheus + # volumes: + # - ./.docker-compose_cfg/prometheus-compose.yml:/etc/prometheus/prometheus.yml + # container_name: prometheus + # # ports: + # # - 9091:9091 + # depends_on: + # - openim-server + # command: --web.listen-address=:9091 --config.file="/etc/prometheus/prometheus.yml" + # network_mode: "host" - grafana: - image: grafana/grafana - volumes: - - ./.docker-compose_cfg/datasource-compose.yaml:/etc/grafana/provisioning/datasources/datasource.yaml - - ./.docker-compose_cfg/grafana.ini:/etc/grafana/grafana.ini - - ./.docker-compose_cfg/node-exporter-full_rev1.json:/var/lib/grafana/dashboards/node-exporter-full_rev1.json - container_name: grafana - depends_on: - - prometheus - network_mode: "host" + # grafana: + # image: grafana/grafana + # volumes: + # - ./.docker-compose_cfg/datasource-compose.yaml:/etc/grafana/provisioning/datasources/datasource.yaml + # - ./.docker-compose_cfg/grafana.ini:/etc/grafana/grafana.ini + # - ./.docker-compose_cfg/node-exporter-full_rev1.json:/var/lib/grafana/dashboards/node-exporter-full_rev1.json + # container_name: grafana + # depends_on: + # - prometheus + # network_mode: "host" - node-exporter: - image: quay.io/prometheus/node-exporter - container_name: node-exporter - restart: always - ports: - - "9100:9100" + # node-exporter: + # image: quay.io/prometheus/node-exporter + # container_name: node-exporter + # restart: always + # ports: + # - "9100:9100" diff --git a/docs/contrib/protoc_tools.md b/docs/contrib/protoc_tools.md new file mode 100644 index 000000000..66f2e9dec --- /dev/null +++ b/docs/contrib/protoc_tools.md @@ -0,0 +1,60 @@ +# OpenIM Protoc Tool + +## Introduction + +OpenIM is passionate about ensuring that its suite of tools is custom-tailored to cater to the unique needs of its users. That commitment led us to develop and release our custom Protoc tool, version v1.0.0. + +### Why a Custom Version? + +There are several reasons to choose our custom Protoc tool over generic open-source versions: + +- **Specialized Features**: OpenIM's Protoc tool has been enriched with features and plugins that are optimized for the OpenIM ecosystem. This makes it more aligned with the needs of OpenIM users. +- **Optimized Performance**: Built from the ground up with OpenIM's infrastructure in mind, our tool guarantees faster and more efficient operations. +- **Enhanced Compatibility**: Our Protoc tool ensures full compatibility with OpenIM's offerings, minimizing potential conflicts and integration challenges. +- **Rich Output Support**: Unlike generic tools, our custom tool provides a wide array of output options including C++, C#, Java, Kotlin, Objective-C, PHP, Python, Ruby, and more. This allows developers to generate code for their preferred platform with ease. + +## Download + ++ https://github.com/OpenIMSDK/Open-IM-Protoc + +Access the official release of the Protoc tool on the OpenIM repository here: [OpenIM Protoc Tool v1.0.0 Release](https://github.com/OpenIMSDK/Open-IM-Protoc/releases/tag/v1.0.0) + +### Direct Download Links: + +- **Windows**: [Download for Windows](https://github.com/OpenIMSDK/Open-IM-Protoc/releases/download/v1.0.0/windows.zip) +- **Linux**: [Download for Linux](https://github.com/OpenIMSDK/Open-IM-Protoc/releases/download/v1.0.0/linux.zip) + +## Installation + +For Windows: + +1. Navigate to the Windows download link provided above and download the version suitable for your system. +2. Extract the contents of the zip file. +3. Add the path of the extracted tool to your `PATH` environment variable to run the Protoc tool directly from the command line. + +For Linux: + +1. Navigate to the Linux download link provided above and download the version suitable for your system. +2. Extract the contents of the zip file. +3. Use `chmod +x ./*` to make the extracted files executable. +4. Add the path of the extracted tool to your `PATH` environment variable to run the Protoc tool directly from the command line. + +## Usage + +The OpenIM Protoc tool provides a multitude of options for parsing `.proto` files and generating output: + +``` +bashCopy code +./protoc [OPTION] PROTO_FILES +``` + +Some of the key options include: + +- `--proto_path=PATH`: Specify the directory to search for imports. +- `--version`: Show version info. +- `--encode=MESSAGE_TYPE`: Convert a text-format message of a given type from standard input to binary on standard output. +- `--decode=MESSAGE_TYPE`: Convert a binary message of a given type from standard input to text format on standard output. +- `--cpp_out=OUT_DIR`: Generate C++ header and source. +- `--java_out=OUT_DIR`: Generate Java source file. + +... and many more. For a full list of options, run `./protoc --help` or refer to the official documentation. \ No newline at end of file diff --git a/install_guide.sh b/install_guide.sh index a32bd24f4..c6532feb8 100755 --- a/install_guide.sh +++ b/install_guide.sh @@ -152,7 +152,7 @@ EOF cd ..; docker-compose up -d; cd scripts; - ./docker_check_service.sh; + ./docker-check-service.sh; } read choice diff --git a/scripts/README.md b/scripts/README.md index ad7d5e760..6a4aec5b5 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -38,7 +38,7 @@ scripts/ ├── common.sh # Contains common functions used by other scripts ├── coverage.awk # AWK script for coverage report generation ├── coverage.sh # Script for generating coverage reports -├── docker_check_service.sh # Docker specific service check script +├── docker-check-service.sh # Docker specific service check script ├── docker-start-all-all.sh # Script to start all services in a docker environment ├── ensure_tag.sh # Script to ensure proper tagging of docker images ├── enterprise # Scripts specific to enterprise version diff --git a/scripts/check-all.sh b/scripts/check-all.sh index ea00db032..19beaa284 100755 --- a/scripts/check-all.sh +++ b/scripts/check-all.sh @@ -45,7 +45,7 @@ echo "++++ Check all OpenIM service ports" echo "+ The port being checked: ${OPENIM_SERVER_PORT_LISTARIES[@]}" openim::util::check_ports ${OPENIM_SERVER_PORT_LISTARIES[@]} if [[ $? -ne 0 ]]; then - echo "+++ cat openim log file >>> ${LOG_FILE}" + echo "+++ cat OpenIM Log file >>> ${LOG_FILE}" openim::log::error_exit "The service does not start properly, please check the port, query variable definition!" else echo "++++ Check all openim service ports successfully !" diff --git a/scripts/docker_check_service.sh b/scripts/docker-check-service.sh similarity index 99% rename from scripts/docker_check_service.sh rename to scripts/docker-check-service.sh index f6f0bdacf..5388a3c51 100755 --- a/scripts/docker_check_service.sh +++ b/scripts/docker-check-service.sh @@ -22,8 +22,6 @@ source "$SCRIPTS_ROOT/style_info.sh" echo -e "${GREEN_PREFIX}=========> Check docker-compose status ${COLOR_SUFFIX} \n" - - cd "$OPENIM_ROOT" if command -v docker-compose &> /dev/null; then diff --git a/scripts/docker-start-all.sh b/scripts/docker-start-all.sh index 673772fa7..b2e68ed7a 100755 --- a/scripts/docker-start-all.sh +++ b/scripts/docker-start-all.sh @@ -24,6 +24,8 @@ trap 'openim::util::onCtrlC' INT nohup ${OPENIM_ROOT}/scripts/start-all.sh > ${LOG_FILE} 2>&1 & +sleep 15 + nohup ${OPENIM_ROOT}/scripts/check-all.sh > ${LOG_FILE} 2>&1 & tail -f ${LOG_FILE} \ No newline at end of file diff --git a/scripts/init-env.sh b/scripts/init-env.sh new file mode 100755 index 000000000..f127a46f3 --- /dev/null +++ b/scripts/init-env.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# Copyright © 2023 OpenIM. 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. + +#FIXME This script is the startup script for multiple servers. +#FIXME The full names of the shell scripts that need to be started are placed in the `need_to_start_server_shell` array. + +set -o nounset +set -o pipefail + +OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd -P) +source "${OPENIM_ROOT}/scripts/install/common.sh" + +for file in "${OPENIM_SERVER_TARGETS[@]}"; do + VARNAME="$(echo $file | tr '[:lower:]' '[:upper:]' | tr '.' '_' | tr '-' '_')" + VARVALUE="$OPENIM_OUTPUT_HOSTBIN/$file" + # /etc/profile.d/openim-env.sh + echo "export $VARNAME=$VARVALUE" > /etc/profile.d/openim-env.sh + source /etc/profile.d/openim-env.sh +done diff --git a/scripts/install/install-protobuf.sh b/scripts/install/install-protobuf.sh index a9a1ef7a0..7d7d4dae0 100644 --- a/scripts/install/install-protobuf.sh +++ b/scripts/install/install-protobuf.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # -------------------------------------------------------------- # OpenIM Protoc Tool v1.0.0 @@ -19,6 +19,10 @@ # Note: The specific installation and usage instructions may vary based on the tool's actual implementation. It's advised to refer to official documentation. # -------------------------------------------------------------- +PROTOC_DOWNLOAD_URL="https://github.com/OpenIMSDK/Open-IM-Protoc/releases/download/v1.0.0/linux.zip" +DOWNLOAD_DIR="/tmp/openim-protoc" +INSTALL_DIR="/usr/local/bin" + function help_message { echo "Usage: ./install-protobuf.sh [option]" echo "Options:" @@ -31,14 +35,34 @@ function help_message { function install_protobuf { echo "Installing OpenIM Protoc tool..." - # Logic for installation based on the OS - # e.g., download, unzip, and add to PATH + + # Create temporary directory and download the zip file + mkdir -p $DOWNLOAD_DIR + wget $PROTOC_DOWNLOAD_URL -O $DOWNLOAD_DIR/linux.zip + + # Unzip the file + unzip -o $DOWNLOAD_DIR/linux.zip -d $DOWNLOAD_DIR + + # Move binaries to the install directory and make them executable + sudo cp $DOWNLOAD_DIR/linux/protoc $INSTALL_DIR/ + sudo cp $DOWNLOAD_DIR/linux/protoc-gen-go $INSTALL_DIR/ + sudo chmod +x $INSTALL_DIR/protoc + sudo chmod +x $INSTALL_DIR/protoc-gen-go + + # Clean up + rm -rf $DOWNLOAD_DIR + + echo "OpenIM Protoc tool installed successfully!" } function uninstall_protobuf { echo "Uninstalling OpenIM Protoc tool..." - # Logic for uninstallation - # e.g., remove from PATH and delete files + + # Removing binaries from the install directory + sudo rm -f $INSTALL_DIR/protoc + sudo rm -f $INSTALL_DIR/protoc-gen-go + + echo "OpenIM Protoc tool uninstalled successfully!" } function reinstall_protobuf { @@ -49,8 +73,13 @@ function reinstall_protobuf { function check_protobuf { echo "Checking for OpenIM Protoc tool installation..." - # Logic to check if the tool is installed - # e.g., which protoc or checking PATH + + which protoc > /dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "OpenIM Protoc tool is installed." + else + echo "OpenIM Protoc tool is not installed." + fi } while [ "$1" != "" ]; do @@ -70,4 +99,4 @@ while [ "$1" != "" ]; do exit 1 esac shift -done \ No newline at end of file +done diff --git a/scripts/install_im_compose.sh b/scripts/install_im_compose.sh index 9577e1f9f..04504089a 100755 --- a/scripts/install_im_compose.sh +++ b/scripts/install_im_compose.sh @@ -60,7 +60,7 @@ start_docker_compose() { docker compose up -d fi - ${OPENIM_ROOT}/scripts/docker_check_service.sh + ${OPENIM_ROOT}/scripts/docker-check-service.sh } main() { diff --git a/scripts/install_im_server.sh b/scripts/install_im_server.sh index 0961193f1..eab90831b 100755 --- a/scripts/install_im_server.sh +++ b/scripts/install_im_server.sh @@ -82,4 +82,4 @@ else docker compose up -d fi -${SCRIPTS_ROOT}/docker_check_service.sh +${SCRIPTS_ROOT}/docker-check-service.sh diff --git a/scripts/lib/util.sh b/scripts/lib/util.sh index 4c53ab397..72621f8a0 100755 --- a/scripts/lib/util.sh +++ b/scripts/lib/util.sh @@ -287,7 +287,7 @@ openim::util::check_ports() { if [[ ${#not_started[@]} -ne 0 ]]; then openim::log::info "### Not started ports:" for port in "${not_started[@]}"; do - openim::log::error "Port $port is not started. cat openim log >>> cat ${LOG_FILE}" + openim::log::error "Port $port is not started. OpenIM Log >>> cat ${LOG_FILE}" done fi @@ -352,7 +352,7 @@ openim::util::check_process_names() { if [[ ${#not_started[@]} -ne 0 ]]; then openim::log::info "Not started processes:" for process_name in "${not_started[@]}"; do - openim::log::error "Process $process_name is not started. cat openim log >>> cat ${LOG_FILE}" + openim::log::error "Process $process_name is not started. OpenIM Log >>> cat ${LOG_FILE}" done fi @@ -1201,11 +1201,11 @@ function openim::util::get_server_ip() { # Check if IP retrieval was successful if [[ -z "$IP" ]]; then # If not, get the internal IP address - IP=$(hostname -I | awk '{print $1}') + IP=$(ip addr show | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1 | head -n 1) fi else # If curl is not available, get the internal IP address - IP=$(hostname -I | awk '{print $1}') + IP=$(ip addr show | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1 | head -n 1) fi # Return the fetched IP address @@ -1280,4 +1280,4 @@ function openim::util::gen_os_arch() { echo -e "${RED_PREFIX}Unsupported OS: $OS${COLOR_SUFFIX}" exit 1 fi -} \ No newline at end of file +}