即时通讯IM
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
pluto 4d816978ec
Resolving code conflicts after project directory changes and Add user subscription to the operation from rpc to db layer (#684)
1 year ago
.docker-compose_cfg feat: add license 1 year ago
.github Feat/develop test (#687) 1 year ago
CHANGELOG feat: add test format (#657) 1 year ago
assets fix: delete batch build all file (#561) 1 year ago
build/docker feat: add test format (#657) 1 year ago
cmd Feat: Refactor project's references to shared modules (#672) 1 year ago
config Feat/develop test (#687) 1 year ago
deployments feat: add deployments readme file 1 year ago
docs Update CODEOWNERS (#670) 1 year ago
internal Resolving code conflicts after project directory changes and Add user subscription to the operation from rpc to db layer (#684) 1 year ago
pkg Resolving code conflicts after project directory changes and Add user subscription to the operation from rpc to db layer (#684) 1 year ago
scripts feat: config env optimize (#683) 1 year ago
test fix: delete batch build all file (#561) 1 year ago
.dockerignore feat: add test file 1 year ago
.env feat: config env optimize (#680) 1 year ago
.gitignore fix: delete batch build all file (#561) 1 year ago
.golangci.yml fix: actions milestones auto (#642) 1 year ago
.goreleaser.yaml Feat/develop test (#687) 1 year ago
CHANGELOG.md feat: add link file 1 year ago
CONTRIBUTING.md docs: fix lint update CONTRIBUTING.md (#632) 1 year ago
Dockerfile feat: Add light mode and dark mode.(#89) (#558) 1 year ago
LICENSE v3 - main to cut out 2 years ago
Makefile feat: add openim log (#679) 1 year ago
README-zh_CN.md update readme: With the release of the new system, the readme is also updated accordingly. 1 year ago
README.md docs: update README.md install (#673) 1 year ago
docker-compose.yaml Feat: Refactor project's references to shared modules (#672) 1 year ago
go.mod Resolving code conflicts after project directory changes and Add user subscription to the operation from rpc to db layer (#684) 1 year ago
go.sum Resolving code conflicts after project directory changes and Add user subscription to the operation from rpc to db layer (#684) 1 year ago
init_docker.sh fix: delete batch build all file (#561) 1 year ago
install.sh feat: config env optimize (#680) 1 year ago
install_guide.sh fix: script v3.0 1 year ago

README.md

Open source Instant Messaging Server

A+ good first

English 中文

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

Quick Start

Deploying with docker-compose

  1. 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
  1. 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
  1. 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
  1. Check the service
make check

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.

# 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

Successful Compilation

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.

https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/open-im-server.png

Overall Architecture

https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/Architecture.jpg

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.

avatar

License

Open-IM-Server is under the Apache 2.0 license. See the LICENSE file for details