diff --git a/.github/workflows/openimci.yml b/.github/workflows/openimci.yml index a745de9cc..665e4edbb 100644 --- a/.github/workflows/openimci.yml +++ b/.github/workflows/openimci.yml @@ -84,12 +84,6 @@ jobs: echo "Generate all necessary files successfully" continue-on-error: true - - name: Run unit test and get test coverage - run: | - make cover - echo "Run unit test and get test coverage successfully" - continue-on-error: true - - name: Build source code for host platform run: | sudo make build diff --git a/README.md b/README.md index 0baef8b3a..f912fa268 100644 --- a/README.md +++ b/README.md @@ -109,199 +109,7 @@ Further enhancing your experience, we also provide an SDK client, wherein most c ✅ We have a large open source community called [OpenIMSDK](https://github.com/OpenIMSDK) that runs the core modules, we have an open source community called [openim-sigs](https://github.com/openim-sigs) to explore more IM-based infrastructure products. -## :rocket: Quick Start -
Deploying with Docker Compose - -1. Clone the project - -```bash -# choose what you need -BRANCH=release-v3.1 -git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build -``` - -> **Note** -> Read our release policy: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md - -2. Modify `.env` - -```bash -USER=root #no need to modify -PASSWORD=openIM123 #A combination of 8 or more numbers and letters, this password applies to redis, mysql, mongo, as well as accessSecret in config/config.yaml -ENDPOINT=http://127.0.0.1:10005 #minio's external service IP and port, or use the domain name storage.xx.xx, the app must be able to access this IP and port or domain, -API_URL=http://127.0.0.1:10002/object/ #the app must be able to access this IP and port or domain, -DATA_DIR=./ #designate large disk directory -``` - -3. Deploy and start - -> **Note** -> This command can only be executed once. It will modify the component passwords in docker-compose based on the `PASSWORD` variable in `.env`, and modify the component passwords in `config/config.yaml`. If the password in `.env` changes, you need to first execute `docker-compose down`; `rm components -rf` and then execute this command. - -```bash -make install -``` - -4. Check the service - -```bash -make check -``` - -![https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/docker_build.png](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/docker_build.png) - -
- -
Compile from Source - -Ur need `Go 1.18` or higher version, and `make`. - -Version Details: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md - -```bash -# choose what you need -BRANCH=release-v3.1 -git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build -``` - -Read about the [OpenIM Version Policy](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md) - -`make help` to help you see the instructions supported by OpenIM. - -All services have been successfully built as shown in the figure - -![Successful Compilation](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/build.png) - -
- -
Component Configuration Instructions - -The config/config.yaml file has detailed configuration instructions for the storage components. - -- Zookeeper - - - Used for RPC service discovery and registration, cluster support. - - ```bash - zookeeper: - schema: openim #Not recommended to modify - address: [ 127.0.0.1:2181 ] #address - username: #username - password: #password - ``` - -- MySQL - - - Used for storing users, relationships, and groups, supports master-slave database. - - ```bash - mysql: - address: [ 127.0.0.1:13306 ] #address - username: root #username - password: openIM123 #password - database: openIM_v2 #Not recommended to modify - maxOpenConn: 1000 #maximum connection - maxIdleConn: 100 #maximum idle connection - maxLifeTime: 60 #maximum time a connection can be reused (seconds) - logLevel: 4 #log level 1=slient 2=error 3=warn 4=info - slowThreshold: 500 #slow statement threshold (milliseconds) - ``` - -- Mongo - - - Used for storing offline messages, supports mongo sharded clusters. - - ```bash - mongo: - uri: #Use this value directly if not empty - address: [ 127.0.0.1:37017 ] #address - database: openIM #default mongo db - username: root #username - password: openIM123 #password - maxPoolSize: 100 #maximum connections - ``` - -- Redis - - - Used for storing message sequence numbers, latest messages, user tokens, and mysql cache, supports cluster deployment. - - ```bash - redis: - address: [ 127.0.0.1:16379 ] #address - username: #username - password: openIM123 #password - ``` - -- Kafka - - - Used for message queues, for message decoupling, supports cluster deployment. - - ```bash - kafka: - username: #username - password: #password - addr: [ 127.0.0.1:9092 ] #address - latestMsgToRedis: - topic: "latestMsgToRedis" - offlineMsgToMongo: - topic: "offlineMsgToMongoMysql" - msgToPush: - topic: "msqToPush" - msgToModify: - topic: "msgToModify" - consumerGroupID: - msgToRedis: redis - msgToMongo: mongo - msgToMySql: mysql - msgToPush: push - msgToModify: modify - ``` - -
- -
Start and Stop Services - -Start services - -``` -./scripts/start-all.sh; -``` - -Check services - -``` -./scripts/check_all.sh -``` - -Stop services - -``` -./scripts/stop-all.sh -``` - -
- -
Open IM Ports - -| TCP Port | Description | Operation | -| --------- | ------------------------------------------------------------ | ----------------------------------------------------- | -| TCP:10001 | ws protocol, message port such as message sending, pushing etc, used for client SDK | Port release or nginx reverse proxy, and firewall off | -| TCP:10002 | api port, such as user, friend, group, message interfaces. | Port release or nginx reverse proxy, and firewall off | -| TCP:10005 | Required when choosing minio storage (openIM uses minio storage by default) | Port release or nginx reverse proxy, and firewall off | - -
- -
Open Chat Ports - -+ chat warehouse: https://github.com/OpenIMSDK/chat - -| TCP Port | Description | Operation | -| --------- | --------------------------------------------------- | ----------------------------------------------------- | -| TCP:10008 | Business system, such as registration, login etc | Port release or nginx reverse proxy, and firewall off | -| TCP:10009 | Management backend, such as statistics, banning etc | Port release or nginx reverse proxy, and firewall off | - -
## :link: Relationship Between APP and OpenIM diff --git a/config/openim_config.yaml b/config/openim_config.yaml index c2f6b4330..b28354f7a 100644 --- a/config/openim_config.yaml +++ b/config/openim_config.yaml @@ -14,7 +14,7 @@ # ----------------------------------------------------------------- # TODO: This config file is the template file -# --| source: scripts/template/config-tmpl/openim_config.yaml +# --| source: scripts/template/config-tmpl/config.yaml # --| env: scripts/install/environment.sh # --| target: config/config.yaml # ----------------------------------------------------------------- diff --git a/deployments/templates/openim-crontask.yaml b/deployments/templates/openim-crontask.yaml index 98fd1dd2b..5cba94957 100644 --- a/deployments/templates/openim-crontask.yaml +++ b/deployments/templates/openim-crontask.yaml @@ -14,7 +14,7 @@ # ----------------------------------------------------------------- # This config file is the template file -# --| source: scripts/template/config-tmpl/openim_config.yaml +# --| source: scripts/template/config-tmpl/config.yaml # --| env: scripts/install/environment.sh # --| target: config/config.yaml # ----------------------------------------------------------------- diff --git a/deployments/templates/openim.yaml b/deployments/templates/openim.yaml index cc793e0eb..ec08a595a 100644 --- a/deployments/templates/openim.yaml +++ b/deployments/templates/openim.yaml @@ -14,8 +14,8 @@ # ----------------------------------------------------------------- # TODO: This config file is the template file -# --| source: scripts/template/config-tmpl/openim_config.yaml -# --| env: scripts/install/environment.sh +# --| source: deployments/templates/openim.yaml +# --| env: scripts/install/environment # --| target: config/config.yaml # ----------------------------------------------------------------- diff --git a/docker-compose.yaml b/docker-compose.yaml index ed22568e8..2fae9a29a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -98,86 +98,91 @@ 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:v3.2.1-beta.4 - # # image: openim/openim-server:latest - # # build: . - # container_name: openim-server - # volumes: - # - ./logs:/openim/openim-server/logs - # - ./config:/openim/openim-server/config - # - ./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 - # image: registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-chat:latest - # # image: openim/openim-chat:latest - # container_name: openim-chat - # healthcheck: - # test: ["CMD-SHELL", "./scripts/check_all.sh"] - # interval: 30s - # timeout: 10s - # retries: 5 - # volumes: - # - ${DATA_DIR}/_output/openim/openim-chat/logs:/openim/openim-chat/logs - # - ${DATA_DIR}/_output/openim/openim-chat/config:/openim/openim-chat/config - # - ${DATA_DIR}/_output/openim/openim-chat/scripts:/openim/openim-chat/scripts - # restart: always - # user: root:root - # depends_on: - # - mysql - # - mongodb - # - redis - # - minio - # - openim-server - # network_mode: "host" - # logging: - # driver: json-file - # options: - # max-size: "1g" - # max-file: "2" + openim-chat: + # image: ghcr.io/openimsdk/openim-chat:latest + image: registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-chat:latest + # image: openim/openim-chat:latest + container_name: openim-chat + healthcheck: + test: ["CMD-SHELL", "./scripts/check_all.sh"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - ${DATA_DIR}/_output/openim/openim-chat/logs:/openim/openim-chat/logs + - ${DATA_DIR}/_output/openim/openim-chat/config:/openim/openim-chat/config + - ${DATA_DIR}/_output/openim/openim-chat/scripts:/openim/openim-chat/scripts + restart: always + user: root:root + depends_on: + - mysql + - mongodb + - redis + - minio + - openim-server + network_mode: "host" + logging: + driver: json-file + options: + 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/init_config.md b/docs/contrib/init_config.md index acf4ae825..5e3139dea 100644 --- a/docs/contrib/init_config.md +++ b/docs/contrib/init_config.md @@ -24,7 +24,7 @@ In the `scripts/init_config.sh` file, we defined some template files. These temp # Defines an associative array where the keys are the template files and the values are the corresponding output files. declare -A TEMPLATES=( ["${OPENIM_ROOT}/scripts/template/config-tmpl/env.template"]="${OPENIM_OUTPUT_SUBPATH}/bin/.env" - ["${OPENIM_ROOT}/scripts/template/config-tmpl/openim_config.yaml"]="${OPENIM_OUTPUT_SUBPATH}/bin/openim_config.yaml" + ["${OPENIM_ROOT}/scripts/template/config-tmpl/config.yaml"]="${OPENIM_OUTPUT_SUBPATH}/bin/config.yaml" ) ``` diff --git a/scripts/demo.sh b/scripts/demo.sh index a9a976667..d074c2c43 100755 --- a/scripts/demo.sh +++ b/scripts/demo.sh @@ -24,6 +24,13 @@ openim::util::desc "========> Press Enter to continue...." openim::util::run "make advertise" clear +openim::util::desc "========> Initialize the project and generate configuration files" +openim::util::run "make init" + +openim::util::desc "========> You can look git diff" +openim::util::run "git diff" +clear + openim::util::desc "You can learn a lot about automation using make help" openim::util::run "make help" clear diff --git a/scripts/genconfig.sh b/scripts/genconfig.sh index 1c83be329..fef411446 100755 --- a/scripts/genconfig.sh +++ b/scripts/genconfig.sh @@ -14,7 +14,7 @@ # limitations under the License. # 本脚本功能:根据 scripts/environment.sh 配置,生成 OPENIM 组件 YAML 配置文件。 -# 示例:./scripts/genconfig.sh scripts/install/environment.sh scripts/template/openim_config.yaml +# 示例:./scripts/genconfig.sh scripts/install/environment.sh scripts/template/config.yaml # Read: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/contrib/init_config.md env_file="$1" diff --git a/scripts/init-config.sh b/scripts/init-config.sh index a1018b131..b10c75b78 100755 --- a/scripts/init-config.sh +++ b/scripts/init-config.sh @@ -30,7 +30,7 @@ readonly ENV_FILE=${ENV_FILE:-${OPENIM_ROOT}/scripts/install/environment.sh} # 定义关联数组,其中键是模板文件,值是对应的输出文件 (en: Defines an associative array where the keys are the template files and the values are the corresponding output files.) declare -A TEMPLATES=( ["${OPENIM_ROOT}/deployments/templates/env_template.yaml"]="${OPENIM_ROOT}/.env" - ["${OPENIM_ROOT}/deployments/templates/openim.yaml"]="${OPENIM_ROOT}/config/openim_config.yaml" + ["${OPENIM_ROOT}/deployments/templates/openim.yaml"]="${OPENIM_ROOT}/config/config.yaml" ) for template in "${!TEMPLATES[@]}"; do