编程

Open-IM-Server:开源即时通讯应用 Open-IM 的服务端安装部署

4070 2023-05-29 12:13:00

Open-IM-Server 是一款即时通讯服务器,使用纯 Golang 开发,采用 JSON over WebSocket 传输协议。在 Open-IM-Server 中,所有东西都是消息,因此您可以轻松扩展自定义消息,而无需修改服务器代码。使用微服务架构,Open-IM-Server 可以使用集群进行部署。通过在服务器上部署 Open-IM-Server,开发人员可以快速地将即时通讯和实时网络功能集成到自己的应用程序中,并确保业务数据的安全性和隐私性。

Open-IM-Server并不是一个独立的产品,本身不包含账号的注册和登录服务。 为方便大家测试,我们开源了包括登录注册功能的 chat 仓库,chat 业务服务端和 Open-IM-Server 一起部署,即可搭建一个聊天产品。

特点

  • 开源
  • 易于集成
  • 良好的可扩展性
  • 高性能
  • 轻量级
  • 支持多种协议

社区

快速开始

使用 docker-compose 部署

  1. 克隆项目
git clone https://github.com/OpenIMSDK/Open-IM-Server 
cd Open-IM-Server
git checkout release-v3.0 #or other release branch
  1. 修改 .env
此处主要修改相关组件密码
USER=root #不用修改
PASSWORD=openIM123  #8位以上的数字和字母组合密码,密码对redis mysql mongo生效,以及config/config.yaml中的accessSecret
ENDPOINT=http://127.0.0.1:10005 #minio对外服务的ip和端口,或用域名storage.xx.xx,app要能访问到此ip和端口或域名,
API_URL=http://127.0.0.1:10002/object/ #app要能访问到此ip和端口或域名,
DATA_DIR=./  #指定大磁盘目录
  1. 部署和启动

注意:此命令只能执行一次,它会根据 .env 中的 PASSWORD 变量修改 docker-compose 中组件密码,并修改 config/config.yaml 中的组件密码 如果 .env 中的密码变了,需要先 docker-compose down; rm components -rf 后再执行此命令。

chmod +x install_im_server.sh;
./install_im_server.sh;
  1. 检查服务
cd scripts;
./docker_check_service.sh

使用源码编译

Go 1.18 或更高版本。

克隆

git clone https://github.com/OpenIMSDK/Open-IM-Server 
cd Open-IM-Server
git checkout release-v3.0 #or other release branch

编译

cd Open-IM-server/scripts
chmod +x *.sh
./build_all_service.sh

所有服务已成功构建如图所示

组件配置说明

config/config.yaml 中针对存储组件有详细的配置说明

Zookeeper

用于 RPC 服务发现和注册,支持集群。

```
zookeeper:
  schema: openim                          #不建议修改
  address: [ 127.0.0.1:2181 ]             #地址
  username:                               #用户名
  password:                               #密码
```

MySQL

用于存储用户、关系链、群组,支持数据库主备。

mysql:
  address: [ 127.0.0.1:13306 ]            #地址
  username: root                          #用户名
  password: openIM123                     #密码
  database: openIM_v2                     #不建议修改
  maxOpenConn: 1000                       #最大连接数
  maxIdleConn: 100                        #最大空闲连接数
  maxLifeTime: 60                         #连接可以重复使用的最长时间(秒)
  logLevel: 4                             #日志级别 1=slient 2=error 3=warn 4=info
  slowThreshold: 500                      #慢语句阈值 (毫秒)

Mongo

用于存储离线消息,支持 mongo 分片集群。

mongo:
  uri:                                    #不为空则直接使用该值
  address: [ 127.0.0.1:37017 ]            #地址
  database: openIM                        #mongo db 默认即可
  username: root                          #用户名
  password: openIM123                     #密码
  maxPoolSize: 100                        #最大连接数

Redis

用于存储消息序列号、最新消息、用户 token 及 mysql 缓存,支持集群部署。

redis:
  address: [ 127.0.0.1:16379 ]            #地址
  username:                               #用户名
  password: openIM123                     #密码

Kafka

用于消息队列,用于消息解耦,支持集群部署。

kafka:
  username:                               #用户名
  password:                               #密码
  addr: [ 127.0.0.1:9092 ]                #地址
  latestMsgToRedis:
    topic: "latestMsgToRedis"
  offlineMsgToMongo:
    topic: "offlineMsgToMongoMysql"
  msgToPush:
    topic: "msqToPush"
  msgToModify:
    topic: "msgToModify"
  consumerGroupID:
    msgToRedis: redis
    msgToMongo: mongo
    msgToMySql: mysql
    msgToPush: push
    msgToModify: modify

启停服务

启动服务

./start_all.sh;

检查服务

./check_all.sh

停止服务

./stop_all.sh

开放 IM 端口

TCP 端口说明操作
TCP:10001ws 协议,消息端口,如消息发送、推送等,用于客户端 SDK端口放行或 nginx 反向代理,并关闭防火墙
TCP:10002api 端口,如用户、好友、群组、消息等接口。端口放行或 nginx 反向代理,并关闭防火墙
TCP:10005选择 minio 存储时需要(openIM 默认使用 minio 存储)端口放行或 nginx 反向代理,并关闭防火墙

开放 Chat 端口

TCP 端口说明操作
TCP:10008业务系统,如注册、登录等端口放行或 nginx 反向代理,并关闭防火墙
TCP:10009管理后台,如统计、封号等端口放行或 nginx 反向代理,并关闭防火墙

APP 和 OpenIM 关系

OpenIM 是开源的即时通讯组件,它并不是一个独立的产品,此图展示了 AppServer、AppClient、Open-IM-Server 以及 Open-IM-SDK 之间的关系

整体架构

许可证

Open-IM-Server 使用 Apache 2.0 许可证