Open-IM-Server:开源即时通讯应用 Open-IM 的服务端安装部署
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 部署
- 克隆项目
git clone https://github.com/OpenIMSDK/Open-IM-Server
cd Open-IM-Server
git checkout release-v3.0 #or other release branch
- 修改
.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=./ #指定大磁盘目录
- 部署和启动
注意:此命令只能执行一次,它会根据 .env
中的 PASSWORD 变量修改 docker-compose 中组件密码,并修改 config/config.yaml
中的组件密码 如果 .env
中的密码变了,需要先 docker-compose down; rm components -rf
后再执行此命令。
chmod +x install_im_server.sh;
./install_im_server.sh;
- 检查服务
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:10001 | ws 协议,消息端口,如消息发送、推送等,用于客户端 SDK | 端口放行或 nginx 反向代理,并关闭防火墙 |
TCP:10002 | api 端口,如用户、好友、群组、消息等接口。 | 端口放行或 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 许可证