由于 OpenIM 依赖的组件较多,开发者需求不一,导致 OpenIM 部署一直被人诟病,经过几次迭代优化,包括依赖的组件 compose 的一键部署,环境变量设置一次,全局生效,以及脚本重构,目前 OpenIM 部署比较丝滑,特写文章分享给大家。
OpenIM 是什么
OpenIM 不是一个独立的聊天产品,它不像 telegram、Signal、rocket.chat 那样是一个完全独立、可以直接安装使用的聊天应用程序。而是一个开源的即时通讯解决方案,为开发者提供了一系列的工具和服务,以便于他们在自己的应用程序中集成即时通讯功能。Telegram、Signal、rocket.chat 等是一些完全独立的聊天应用,用户可以直接下载安装使用,这些应用通常包含了完整的前端界面和后端服务。
OpenIM 是一个开源的即时通讯解决方案,包括 OpenIMSDK 和 OpenIMServer 两个主要部分。开发者可以使用这些工具和服务在自己的应用程序中实现消息的发送、接收、用户管理、群组管理等功能。
OpenIMSDK: 这是一个软件开发工具包,开发者可以使用这个工具包在自己的应用程序中集成即时通讯功能。OpenIMSDK 提供了一系列的 API 接口,使开发者能够方便地实现消息发送、接收、用户管理、群组管理等功能。该 SDK 通常包含不同的版本,以适应不同的平台和编程语言,例如 iOS、Android、Web、Windows 等。
OpenIMServer: 这是即时通讯的服务器端组件。它负责管理用户的连接、消息的转发、消息的存储等功能。OpenIMServer 通常部署在云端或者自有的服务器上。该组件通常包括了用户管理、消息存储、消息转发、消息推送、文件传输等模块。
OpenIM 的主要优势是它是开源的,这意味着开发者可以根据自身的需求对其进行定制和扩展。同时,OpenIM 也提供了一系列的文档和示例代码,帮助开发者更快地理解和使用这个解决方案。
此外,OpenIM 通常提供了一套完整的即时通讯解决方案,包括了客户端和服务器端,这使得开发者能够更加集中精力在自己的应用程序的开发上,而不需要花费太多时间在即时通讯功能的实现上。
开发者在 app client 中集成 OpenIMSDK,同时编写带有自身业务逻辑的 app Server 代码,通过 REST API 和 callback 和 OpenIMServer
源码部署
环境及系统要求
注意事项 详细说明
操作系统 linux 系统即可, Ubuntu 7.5.0-3ubuntu1~18.04 最优,root 用户
硬件资源 可用内存 2G 以上,用户量小于 10 万,可用单机部署,8C 16G 10Mb 1T 普通磁盘即可
golang 1.18 及以上
docker Docker version 24.0.5, build ced0996 及以上
git 2.17.1 及以上
存储组件
存储组件 建议版本
mongodb 6.0.2 及以上
redis 7.0.0 及以上
zookeeper latest
kafka latest
mysql 5.7 及以上
minio latest
OpenIM 不是一个完整的聊天软件,而是开源的即时通讯组件,包括 open-im-sdk 和 open-im-server ,本身不包含账号的注册和登录服务。 为方便大家测试,我们开源了包括登录注册功能的 chat 仓库,同时部署 chat 和 open-im-server,即可搭建一个完整的聊天产品。
一、先部署组件
clone 仓库并切换发布分支(release-v3.3 及之后的版本)
git clone https://github.com/openimsdk/open-im-server && cd open-im-server
设置环境变量
一般情况下只需要设置mysql/mongodb/redis/minio组件密码PASSWORD,如未设置,则为默认密码openIM123
export PASSWORD="openIM123" # 设置mysql/mongodb/redis/minio组件密码,至少8位,不能包含特殊字符,默认是openIM123
export USER="root" # 设置mysql/mongodb/redis/minio用户名,目前只支持root
export API_URL="http://127.0.0.1:10002" # 内网环境下,需设置 OpenIM Server API 提供服务的地址,外网环境下会自动获取
export DATA_DIR="./" #设置组件挂载的数据卷目录,默认为./
部署组件
make init && docker compose up -d
查看组件状态
docker ps
二、编译 / 启动 / 检测 / 停止 open-im-server
编译
./scripts/build-all-service.sh
2. 启动
./scripts/start-all.sh
检测
./scripts/check-all.sh
停止
./scripts/stop-all.sh
其它问题
如想使用某些外部组件,该如何修改
举例说明,如想使用外部的mysql,操作步骤如下:
1.编辑 docker-compose.yml 在此文件中注释掉mysql相关配置项
2.编辑scripts/install/environment.sh 修改mysql的ip port及密码等配置项
3.make init使配置生效
4.docker compose up -d启动组件
启动顺序
组件->open-im-server->chat 需按照这个顺序启动
docker 版本
新版docker已经整合docker dompose作为其核心功能的一部分,不需单独安装docker-compose
如果您的docker版本过低,建议升级到新版本,官方使用的是23.0.1版本
升级问题
如组件账号密码不做修改,则可以直接升级,升级前确保进程都被停止了
如组件启动后再修改组件密码
- 需先停掉组件docker
- 删除整个components目录(如数据不重要)
- export PASSWORD=newpassword
- 启动组件docker使密码生效
更多配置项
不要直接修改config/config.yaml文件,建议编辑scripts/install/environment.sh后 make init 使配置生效
日志查看
logs/OpenIM.log.all.*:记录运行时日志
_output/logs/openim_20230909.log:记录启动日志
三、编译 / 启动 / 检测 / 停止 chat
clone 仓库并切换发布分支(release-v1.3 及之后的版本)
先回到上一级目录
cd ..
git clone https://github.com/openimsdk/chat.git && cd chat
2. 编译
./scripts/build_all_service.sh
3. 启动
./scripts/start_all.sh
4. 检测
./scripts/check_all.sh --print-screen
- 停止
./scripts/stop_all.sh
其它问题
如果 zk 连接失败
确认zookeeper的ip端口是否正确。如果组件部署时修改过zookeeper相关配置,则需要修改config/config.yaml文件中的zookeeper配置项
如果用户注册失败
确认openIMUrl的ip端口是否正确,如果组件部署时修改过open-im-server的ip和端口,则需要修改config/config.yaml文件中的openIMUrl配置项,确保chat能访问open-im-server的api端口
日志查看
logs目录下
openIM.log:记录启动日志
chat.log.*:记录运行时日志
四、开放端口
开放 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 反向代理,并关闭防火墙
开放 pc web 端口
TCP 端口 说明 操作
TCP:11001 http://ip:11001 访问 pc web 端口放行或 nginx 反向代理,并关闭防火墙
体验 pc web
浏览器输入 http://ip:11001 访问 pc web,注意此 ip 为服务器 ip,确保 pc 端能访问 先通过手机号注册,验证码默认为 666666
关于 OpenIM
得益于广大开发者的支持,OpenIM 在开源 IM 领域中保持着领先地位,目前在 Github 上的星标数量已超过 12k。在当前数据和隐私安全受到重视的背景下,IM 的私有部署需求逐渐增长,这与国内软件产业的崛起趋势相吻合。特别是在政企领域,随着信息技术的快速发展和创新产业的应用,对 IM 的需求迅速增长。更进一步,协同办公软件市场持续扩大,其中 “安全可控” 已经被视为最关键的属性。
github: https://github.com/OpenIMSDK/ website: https://www.openim.online/zh developer: https://doc.rentsoft.cn/sdks/quickstart