Update README.md (#792)

pull/793/head
Xinwei Xiong 1 year ago committed by GitHub
parent ffa3b53065
commit d8fd4bfcf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -29,34 +29,86 @@
## What is Open-IM-Server ## What is Open-IM-Server
Open-IM-Server is an instant messaging server developed using pure Golang, adopting JSON over WebSocket as the communication protocol. In Open-IM-Server, everything is a message, so you can easily extend custom messages without modifying the server code. With a microservice architecture, Open-IM-Server can be deployed using clusters. By deploying Open-IM-Server on a server, developers can quickly integrate instant messaging and real-time networking features into their applications, ensuring the security and privacy of business data. Open-IM-Server is a robust instant messaging server engineered using pure Golang, leveraging JSON over WebSocket for communication. The server treats everything as a message, facilitating straightforward customization without modifying the server code. Its microservice architecture enables deployment using clusters, ensuring high performance and scalability.
Open-IM-Server is not a standalone product and does not include account registration and login services. For your convenience, we have open-sourced the [chat repository](https://github.com/OpenIMSDK/chat) which includes login and registration functionality. By deploying the chat business server alongside Open-IM-Server, a chat product can be set up. Whether you're looking to integrate instant messaging or real-time networking into your applications, Open-IM-Server is your go-to solution! :rocket:
## Features It's important to note that Open-IM-Server isn't a standalone product, and it doesn't include account registration and login services. However, we've made your life easier by open-sourcing the [chat repository](https://github.com/OpenIMSDK/chat) that includes login and registration features. Deploying the chat business server alongside Open-IM-Server quickly sets up a comprehensive chat product. :busts_in_silhouette:
- Open source ## :star2: Why OpenIM
- Easy to integrate
- Excellent scalability
- High performance
- Lightweight
- Supports multiple protocols
## Community 1. Comprehensive Message Type Support :speech_balloon:
- Visit the official website: [OpenIM Developer Documentation](https://www.openim.online/) ✅ Supports almost all types of messages, including text, images, emojis, voice, video, geographical location, files, quotes, business cards, system notifications, custom messages and more :mailbox_with_mail:
## Quick Start ✅ Supports one-on-one and multi-person audio and video calls :telephone_receiver:
### Deploying with docker-compose ✅ Provides terminal support for multiple platforms such as iOS, Android, Flutter, uni-app, ReactNative, Electron, Web, H5 :iphone:
2. Efficient Meetings Anytime, Anywhere :earth_americas:
✅ Based on IM (Instant Messaging) with 100% reliable forced signaling capabilities, it paves the way for IM systems, deeply integrated with chat applications :link:
✅ Supports hundreds of people in a single meeting, with subscription numbers reaching thousands, and server-side audio and video recording :video_camera:
3. One-on-one and Group Chats for Various Social Scenarios :busts_in_silhouette:
✅ OpenIM has four roles: application administrator, group owner, group administrator, and regular member :man_teacher:
✅ Powerful group features such as muting, group announcements, group validation, unlimited group members, and loading group messages as needed :loudspeaker:
4. Unique Features :star2:
✅ Supports read-and-burn private chats, customizable duration :fire:
✅ Message editing function broadens social scenarios, making instant communication more diverse and interesting :pencil2:
5. Open Source :open_hands:
✅ The code of OpenIM is open source, self-controlled data, aimed at building a globally leading IM open source community, including client SDK and server :globe_with_meridians:
✅ Based on open source Server, many excellent open source projects have been developed, such as [OpenKF](https://github.com/OpenIMSDK/OpenKF) (Open source AI customer service system) ✨
6. Easy to Expand :wrench:
✅ The OpenIM server is implemented in Golang, introducing an innovative "everything is a message" communication model, simplifying the implementation of custom messages and extended features :computer:
7. High Performance :racing_car:
✅ OpenIM supports a hierarchical governance architecture in the cluster, tested by a large number of users, and abstracts the storage model of online messages, offline messages, and historical messages :rocket:
8. Full Platform Support :tv:
✅ Supports native iOS, Android; cross-platform Flutter, uni-app, ReactNative; major web front-end frameworks such as React, Vue; applets; and PC platforms supported by Electron :desktop_computer:
9. The ultimate deployment experience 🤖
✅ Supports cluster deployment
✅ Supports multi-architecture mirroring
10. A large ecosystem of open source communities 🤲
## :busts_in_silhouette: Community
Explore our [OpenIM Developer Documentation](https://www.openim.online/) for more details.
## :rocket: Quick Start
<details> <summary>Deploying with Docker Compose</summary>
1. Clone the project 1. Clone the project
```bash ```bash
# choose what you need # choose what you need
BRANCH=release-v3.0 BRANCH=release-v3.1
git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build 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 2. Modify .env
```bash ```bash
@ -70,7 +122,7 @@ DATA_DIR=./ #designate large disk directory
3. Deploy and start 3. Deploy and start
> **Note** > **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. > 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.
``` ```
make install make install
@ -84,9 +136,9 @@ 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) ![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)
</details>
<details> <summary>Compile from Source</summary>
### Compile from source
Ur need `Go 1.18` or higher version, and `make`. Ur need `Go 1.18` or higher version, and `make`.
@ -97,6 +149,7 @@ Version Details: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conv
BRANCH=release-v3.1 BRANCH=release-v3.1
git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build 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) 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. `make help` to help you see the instructions supported by OpenIM.
@ -105,7 +158,9 @@ 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) ![Successful Compilation](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/build.png)
### Component Configuration Instructions </details>
<details> <summary>Component Configuration Instructions</summary>
The config/config.yaml file has detailed configuration instructions for the storage components. The config/config.yaml file has detailed configuration instructions for the storage components.
@ -113,7 +168,7 @@ The config/config.yaml file has detailed configuration instructions for the stor
- Used for RPC service discovery and registration, cluster support. - Used for RPC service discovery and registration, cluster support.
``` ```bash
zookeeper: zookeeper:
schema: openim #Not recommended to modify schema: openim #Not recommended to modify
address: [ 127.0.0.1:2181 ] #address address: [ 127.0.0.1:2181 ] #address
@ -125,7 +180,7 @@ The config/config.yaml file has detailed configuration instructions for the stor
- Used for storing users, relationships, and groups, supports master-slave database. - Used for storing users, relationships, and groups, supports master-slave database.
``` ```bash
mysql: mysql:
address: [ 127.0.0.1:13306 ] #address address: [ 127.0.0.1:13306 ] #address
username: root #username username: root #username
@ -142,7 +197,7 @@ The config/config.yaml file has detailed configuration instructions for the stor
- Used for storing offline messages, supports mongo sharded clusters. - Used for storing offline messages, supports mongo sharded clusters.
``` ```bash
mongo: mongo:
uri: #Use this value directly if not empty uri: #Use this value directly if not empty
address: [ 127.0.0.1:37017 ] #address address: [ 127.0.0.1:37017 ] #address
@ -156,7 +211,7 @@ The config/config.yaml file has detailed configuration instructions for the stor
- Used for storing message sequence numbers, latest messages, user tokens, and mysql cache, supports cluster deployment. - Used for storing message sequence numbers, latest messages, user tokens, and mysql cache, supports cluster deployment.
``` ```bash
redis: redis:
address: [ 127.0.0.1:16379 ] #address address: [ 127.0.0.1:16379 ] #address
username: #username username: #username
@ -167,7 +222,7 @@ The config/config.yaml file has detailed configuration instructions for the stor
- Used for message queues, for message decoupling, supports cluster deployment. - Used for message queues, for message decoupling, supports cluster deployment.
``` ```bash
kafka: kafka:
username: #username username: #username
password: #password password: #password
@ -188,27 +243,31 @@ The config/config.yaml file has detailed configuration instructions for the stor
msgToModify: modify msgToModify: modify
``` ```
### Start and Stop Services </details>
<details> <summary>Start and Stop Services</summary>
Start services Start services
``` ```
./start_all.sh; ./scripts/start_all.sh;
``` ```
Check services Check services
``` ```
./check_all.sh ./scripts/check_all.sh
``` ```
Stop services Stop services
``` ```
./stop_all.sh ./scripts/stop_all.sh
``` ```
### Open IM Ports </details>
<details> <summary>Open IM Ports</summary>
| TCP Port | Description | Operation | | TCP Port | Description | Operation |
| --------- | ------------------------------------------------------------ | ----------------------------------------------------- | | --------- | ------------------------------------------------------------ | ----------------------------------------------------- |
@ -216,42 +275,55 @@ Stop services
| TCP:10002 | api port, such as user, friend, group, message interfaces. | 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 | | 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 </details>
<details> <summary>Open Chat Ports</summary>
+ chat warehouse: https://github.com/OpenIMSDK/chat
| TCP Port | Description | Operation | | TCP Port | Description | Operation |
| --------- | --------------------------------------------------- | ----------------------------------------------------- | | --------- | --------------------------------------------------- | ----------------------------------------------------- |
| TCP:10008 | Business system, such as registration, login etc | Port release or nginx reverse proxy, and firewall off | | 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 | | TCP:10009 | Management backend, such as statistics, banning etc | Port release or nginx reverse proxy, and firewall off |
## Relationship Between APP and OpenIM </details>
OpenIM is an open source instant messaging component, it is not an independent product. This image shows the relationship between AppServer, AppClient, Open-IM-Server and Open-IM-SDK. ## :link: Relationship Between APP and OpenIM
![https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/open-im-server.png](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/open-im-server.png) OpenIM isn't just an open-source instant messaging component, it's an integral part of your application ecosystem. Check out this diagram to understand how AppServer, AppClient, Open-IM-Server, and Open-IM-SDK interact.
## Overall Architecture ![App-OpenIM Relationship](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/open-im-server.png)
![https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/Architecture.jpg](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/Architecture.jpg) ## :building_construction: Overall Architecture
## To start developing OpenIM Delve into the heart of Open-IM-Server's functionality with our architecture diagram.
The [community repository](https://github.com/OpenIMSDK/community) hosts all information about building Kubernetes from source, how to contribute code and documentation, who to contact about what, etc.
![Overall Architecture](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/Architecture.jpg)
## Contributing ## :hammer_and_wrench: To start developing OpenIM
Contributions to this project are welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for details. The [community repository](https://github.com/OpenIMSDK/community) hosts all the information you need to start contributing to OpenIM.
## Community Meetings ## :heart: Contributing
We want anyone to get involved in our community, we offer gifts and rewards, and we welcome you to join us every Thursday night.
We take notes of each [biweekly meeting](https://github.com/OpenIMSDK/Open-IM-Server/issues/381) in [GitHub discussions](https://github.com/OpenIMSDK/Open-IM-Server/discussions/categories/meeting), and our minutes are written in [Google Docs](https://docs.google.com/document/d/1nx8MDpuG74NASx081JcCpxPgDITNTpIIos0DS6Vr9GU/edit?usp=sharing). We welcome all contributions to the project! For more details, please see [CONTRIBUTING.md](./CONTRIBUTING.md).
## :calendar: Community Meetings
## Who are using Open-IM-Server We love community involvement! Join us for our biweekly meetings every Thursday night. We even offer gifts and rewards! :gift:
The [user case studies](https://github.com/OpenIMSDK/community/blob/main/ADOPTERS.md) page includes the user list of the project. You can leave a [📝comment](https://github.com/OpenIMSDK/Open-IM-Server/issues/379) to let us know your use case.
You can find the meeting minutes on [GitHub discussions](https://github.com/OpenIMSDK/Open-IM-Server/discussions/categories/meeting) and our [Google Docs](https://docs.google.com/document/d/1nx8MDpuG74NASx081JcCpxPgDITNTpIIos0DS6Vr9GU/edit?usp=sharing).
## :eyes: Who are using Open-IM-Server
Check out our [user case studies](https://github.com/OpenIMSDK/community/blob/main/ADOPTERS.md) page for a list of the project users. Don't hesitate to leave a [📝comment](https://github.com/OpenIMSDK/Open-IM-Server/issues/379) and share your use case.
![avatar](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg) ![avatar](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg)
## License ## :page_facing_up: License
Open-IM-Server is licensed under the Apache 2.0 license. See the [LICENSE](./LICENSE) file for details.
## :cloud: Docker Images
Open-IM-Server is under the Apache 2.0 license. See the [LICENSE](./LICENSE) file for details Our Docker images are hosted not only on GitHub but also on Alibaba Cloud and Docker Hub supporting multiple architectures. Visit [our GitHub packages](https://github.com/orgs/OpenIMSDK/packages?repo_name=Open-IM-Server) and read our [version management document](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md) for more information.

Loading…
Cancel
Save