10 KiB
⭐️ Open source Instant Messaging 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 not a standalone product and does not include account registration and login services. For your convenience, we have open-sourced the chat repository which includes login and registration functionality. By deploying the chat business server alongside Open-IM-Server, a chat product can be set up.
Features
- Open source
- Easy to integrate
- Excellent scalability
- High performance
- Lightweight
- Supports multiple protocols
Community
- Visit the official website: OpenIM Developer Documentation
Quick Start
Deploying with docker-compose
- Clone the project
# choose what you need
BRANCH=release-v3.0
git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build
- Modify .env
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
- 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.
make install
- Check the service
make check
Compile from source
Ur need Go 1.18
or higher version, and make
.
# choose what you need
BRANCH=release-v3.0
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
make help
to help you see the instructions supported by OpenIM.
All services have been successfully built as shown in the figure
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.
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.
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.
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.
redis: address: [ 127.0.0.1:16379 ] #address username: #username password: openIM123 #password
-
-
Kafka
-
Used for message queues, for message decoupling, supports cluster deployment.
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
./start_all.sh;
Check services
./check_all.sh
Stop services
./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
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 |
Relationship Between APP and OpenIM
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.
Overall Architecture
To start developing OpenIM
The community repository hosts all information about building Kubernetes from source, how to contribute code and documentation, who to contact about what, etc.
Contributing
Contributions to this project are welcome! Please see CONTRIBUTING.md for details.
Community Meetings
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 in GitHub discussions, and our minutes are written in Google Docs.
Who are using Open-IM-Server
The user case studies page includes the user list of the project. You can leave a 📝comment to let us know your use case.
License
Open-IM-Server is under the Apache 2.0 license. See the LICENSE file for details