开源即时通讯(IM)项目OpenIM源码部署流程
由于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普通磁盘即可
golang1.18及以上
dockerDocker version 24.0.5, build ced0996及以上
git2.17.1及以上
存储组件
存储组件建议版本
mongodb6.0.2及以上
redis7.0.0及以上
zookeeperlatest
kafkalatest
mysql5.7及以上
miniolatest
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&&cdopen-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版本
升级问题
如组件账号密码不做修改,则可以直接升级,升级前确保进程都被停止了
如组件启动后再修改组件密码
1. 需先停掉组件docker2. 删除整个components目录(如数据不重要)3.exportPASSWORD=newpassword4. 启动组件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&&cdchat
2.编译
./scripts/build_all_service.sh
3.启动
./scripts/start_all.sh
4.检测
./scripts/check_all.sh --print-screen
5.停止
./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:10001ws 协议,消息端口,如消息发送、推送等,用于客户端 SDK端口放行或 nginx 反向代理,并关闭防火墙
TCP:10002api 端口,如用户、好友、群组、消息等接口。端口放行或 nginx 反向代理,并关闭防火墙
TCP:10005选择 minio 存储时需要(openIM 默认使用 minio 存储)端口放行或 nginx 反向代理,并关闭防火墙
开放 Chat 端口
TCP 端口说明操作
TCP:10008业务系统,如注册、登录等端口放行或 nginx 反向代理,并关闭防火墙
TCP:10009管理后台,如统计、封号等端口放行或 nginx 反向代理,并关闭防火墙
开放 pc web 端口
TCP 端口说明操作
TCP:11001http://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/zhdeveloper:https://doc.rentsoft.cn/sdks/quickstart