由于 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版本

升级问题

如组件账号密码不做修改,则可以直接升级,升级前确保进程都被停止了

如组件启动后再修改组件密码

  1. 需先停掉组件docker
  2. 删除整个components目录(如数据不重要)
  3. export PASSWORD=newpassword
  4. 启动组件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

  1. 停止

./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

开源即时通讯(IM)项目OpenIM源码部署流程的更多相关文章

  1. 一款Java开源的Springboot即时通讯 IM,附源码

    # 开篇 电商平台最不能缺的就是即时通讯,例如通知类下发,客服聊天等.今天,就来给大家分享一个开源的即时通讯系统.如对文章不感兴趣可直接跳至文章末尾,有获取源码链接的方法. 但文章内容是需要你简单的过 ...

  2. 即时通信系统中实现全局系统通知,并与Web后台集成【附C#开源即时通讯系统(支持广域网)——QQ高仿版IM最新源码】

    像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用C#开源即时通讯系统——GGTalk的 ...

  3. GGTalk——C#开源即时通讯系统源码介绍系列(一)

    坦白讲,我们公司其实没啥技术实力,之所以还能不断接到各种项目,全凭我们老板神通广大!要知道他每次的饭局上可都是些什么人物! 但是项目接下一大把,就凭咱哥儿几个的水平,想要独立自主.保质保量保期地一个个 ...

  4. 开源项目Telegram源码 Telegram for Android Source

    背景介绍 Telegram 是一款跨平台的即时通信软件,它的客户端是自由及开放源代码软件.用户可以相互交换加密与自毁消息,发送照片.影片等所有类型文件.官方提供手机版.桌面版和网页版等多种平台客户端. ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区

    Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区 Oschat IM 开源即时通讯项目介绍    255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 ...

  9. Python优秀开源项目Rich源码解析

    这篇文章对优秀的开源项目Rich的源码进行解析,OMG,盘他.为什么建议阅读源码,有两个原因,第一,单纯学语言很难在实践中灵活应用,通过阅读源码可以看到每个知识点的运用场景,印象会更深,以后写代码的时 ...

  10. 急急如律令!火速搭建一个C#即时通信系统!(附源码分享——高度可移植!)

    (2016年3月更:由于后来了解到GGTalk开源即时通讯系统,因此直接采用了该资源用于项目开发,在此对作者表示由衷的感谢!) —————————————————————————————————— 人 ...

随机推荐

  1. 使用 FHE 实现加密大语言模型

    近来,大语言模型 (LLM) 已被证明是提高编程.内容生成.文本分析.网络搜索及远程学习等诸多领域生产力的可靠工具. 大语言模型对用户隐私的影响 尽管 LLM 很有吸引力,但如何保护好 输入给这些模型 ...

  2. 白嫖:GPT-4

    众所周知,GPT-4需要充OpenAI 的 Plus才能使用,Plus则需要每月20美金. 很多同学很想体验GPT-4,但一方面不想花钱,一方面想花也没那么容易花出去(懂的都懂) 我看到有人分享可以免 ...

  3. WSL2 配置 ArchLinux 初始化环境

    这篇文章针对的是在 Win11 系统的 WSL2 下安装 ArchLinux 系统, 网上很多中文教程都是使用 LxRunOffline 去做的,但是实际上该方法已经过时了,目前有更加先进的ArchW ...

  4. Linux 安装Jupyter notebook 并开启远程访问

    一. Ubuntu下安装jupyter notebook 1. 使用Anaconda安装 conda install jupyter notebook 2. 使用pip安装 pip install j ...

  5. 第六届蓝桥杯(2015)C/C++大学A组省赛题解

    第一题.方程整数解 答案:10 18 24,最小的为 10 int main() { ios_base::sync_with_stdio(false), cin.tie(0); for (int i ...

  6. 虚拟现实 VR 碰撞 3D 可视化,图扑打造一体化管控平台

    前言 工信部<虚拟现实产业发展白皮书 5.0 >中明确提出:"通过财政资金促进虚拟现实技术产业化,支持面向工业.文化.教育等重点行业的虚拟现实技术应用". 虚拟现实 V ...

  7. 【驱动】SPI驱动分析(七)-SPI驱动常用调试方法

    用户态 用户应用层使用spidev驱动的步骤如下: 打开SPI设备文件:用户可以通过打开/dev/spidevX.Y文件来访问SPI设备,其中X是SPI控制器的编号,Y是SPI设备的编号. 配置SPI ...

  8. uni-app返回上一级,页面不刷新,bug

    uniapp 生命周期(onLoad跟onLoadonShow的区别) 一.uniapp生命周期分两种 : 1.应用生命周期:仅可在App.vue中监听,在其它页面监听无效. 2.页面生命周期:仅在p ...

  9. 机器学习笔记(二)使用paddlepaddle,再探波士顿房价预测

    目标 用paddlepaddle来重写之前那个手写的梯度下降方案,简化内容 流程 实际上就做了几个事: 数据准备:将一个批次的数据先转换成nparray格式,再转换成Tensor格式 前向计算:将一个 ...

  10. 堆和栈:JS数据怎么存储的?

    JS数据存储主要分堆和栈两种, 栈空间:通常情况栈空间不会设置太大,主要用来存放一些原始类型的小数据,原始类型的数据有:Boolean.Null.Undefined.Number.BigInt.Str ...