|
1 year ago | |
---|---|---|
.docker-compose_cfg | 1 year ago | |
.github | 1 year ago | |
CHANGELOG | 1 year ago | |
assets | 1 year ago | |
build/docker | 1 year ago | |
cmd | 1 year ago | |
config | 1 year ago | |
deployments | 1 year ago | |
docs | 1 year ago | |
internal | 1 year ago | |
pkg | 1 year ago | |
scripts | 1 year ago | |
test | 1 year ago | |
.dockerignore | 1 year ago | |
.env | 1 year ago | |
.gitignore | 1 year ago | |
.golangci.yml | 1 year ago | |
.goreleaser.yaml | 1 year ago | |
CHANGELOG.md | 1 year ago | |
CODE_OF_CONDUCT.md | 1 year ago | |
CONTRIBUTING.md | 1 year ago | |
Dockerfile | 1 year ago | |
LICENSE | 1 year ago | |
Makefile | 1 year ago | |
README-zh_CN.md | 1 year ago | |
README.md | 1 year ago | |
docker-compose.yaml | 1 year ago | |
go.mod | 1 year ago | |
go.sum | 1 year ago | |
install.sh | 1 year ago | |
install_guide.sh | 1 year ago |
README.md
⭐️ Open source Instant Messaging Server ⭐️
What is Open-IM-Server
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.
Whether you're looking to integrate instant messaging or real-time networking into your applications, Open-IM-Server is your go-to solution! 🚀
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 that includes login and registration features. Deploying the chat business server alongside Open-IM-Server quickly sets up a comprehensive chat product. 👥
🌟 Why OpenIM
-
Comprehensive Message Type Support 💬 ✅ Supports almost all types of messages, including text, images, emojis, voice, video, geographical location, files, quotes, business cards, system notifications, custom messages and more 📬
✅ Supports one-on-one and multi-person audio and video calls 📞
✅ Provides terminal support for multiple platforms such as iOS, Android, Flutter, uni-app, ReactNative, Electron, Web, H5 📱
-
Efficient Meetings Anytime, Anywhere 🌎
✅ Based on IM (Instant Messaging) with 100% reliable forced signaling capabilities, it paves the way for IM systems, deeply integrated with chat applications 🔗
✅ Supports hundreds of people in a single meeting, with subscription numbers reaching thousands, and server-side audio and video recording 📹
-
One-on-one and Group Chats for Various Social Scenarios 👥
✅ OpenIM has four roles: application administrator, group owner, group administrator, and regular member 👨🏫
✅ Powerful group features such as muting, group announcements, group validation, unlimited group members, and loading group messages as needed 📢
-
Unique Features 🌟
✅ Supports read-and-burn private chats, customizable duration 🔥
✅ Message editing function broadens social scenarios, making instant communication more diverse and interesting ✏️
-
Open Source 👐
✅ 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 🌐
✅ Based on open source Server, many excellent open source projects have been developed, such as OpenKF (Open source AI customer service system) ✨
-
Easy to Expand 🔧
✅ 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 💻
-
High Performance 🏎️
✅ 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 🚀
-
Full Platform Support 📺
✅ 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 🖥️
-
The ultimate deployment experience 🤖
✅ Supports cluster deployment
✅ Supports multi-architecture mirroring
-
A large ecosystem of open source communities 🤲
👥 Community
Explore our OpenIM Developer Documentation for more details.
🚀 Quick Start
Deploying with Docker Compose
- Clone the project
# 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
- 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 inconfig/config.yaml
. If the password in.env
changes, you need to first executedocker-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
.
Version Details: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md
# 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
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
./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 |
🔗 Relationship Between APP and OpenIM
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
Delve into the heart of Open-IM-Server's functionality with our architecture diagram.
🛠️ To start developing OpenIM
The community repository hosts all the information you need to start contributing to OpenIM.
❤️ Contributing
We welcome all contributions to the project! For more details, please see CONTRIBUTING.md.
📆 Community Meetings
We love community involvement! Join us for our biweekly meetings every Thursday night. We even offer gifts and rewards! 🎁
You can find the meeting minutes on GitHub discussions and our Google Docs.
👀 Who are using Open-IM-Server
Check out our user case studies page for a list of the project users. Don't hesitate to leave a 📝comment and share your use case.
📄 License
Open-IM-Server is licensed under the Apache 2.0 license. See the LICENSE file for details.
☁️ Docker Images
Our Docker images are hosted not only on GitHub but also on Alibaba Cloud and Docker Hub supporting multiple architectures. Visit our GitHub packages and read our version management document for more information.