首页 > 编程语言 >开源即时通讯(IM)项目OpenIM源码部署流程

开源即时通讯(IM)项目OpenIM源码部署流程

时间:2023-09-12 13:11:48浏览次数:58  
标签:OpenIM 端口 sh 源码 IM scripts 组件 docker

由于 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 通常提供了一套完整的即时通讯解决方案,包括了客户端和服务器端,这使得开发者能够更加集中精力在自己的应用程序的开发上,而不需要花费太多时间在即时通讯功能的实现上。
image

开发者在 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
image

二、编译 / 启动 / 检测 / 停止 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
image

  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
image

关于 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
image

标签:OpenIM,端口,sh,源码,IM,scripts,组件,docker
From: https://www.cnblogs.com/OpenIM/p/17695878.html

相关文章

  • Animation动画——ObjectAnimator基本使用
    ObjectAnimator是ValueAnimator的子类,他本身就已经包含了时间引擎和值计算,所以它拥有为对象的某个属性设置动画的功能。这使得为任何对象设置动画更加的容易。你不再需要实现ValueAnimator.AnimatorUpdateListener接口,因为ObjectAnimator动画自己会自动更新相应的属性值。ObjectAn......
  • 【刷题笔记】48. Rotate Image
    题目Youaregivenan n x n 2Dmatrixrepresentinganimage.Rotatetheimageby90degrees(clockwise).Note:Youhavetorotatetheimage in-place,whichmeansyouhavetomodifytheinput2Dmatrixdirectly. DONOT allocateanother2Dmatrixanddot......
  • CF1867E1 Salyg1n and Array (simple version)
    思路首先考虑,\(n\)是\(k\)的倍数的情况,直接枚举询问所有每一段就好,然后输出每一段的异或和的异或和。如上图,每次询问都没有重叠部分,颠转互不干扰。那么,\(n\)不是\(k\)的倍数的情况呢?可以看到,与第一种情况的区别就是末尾多了一小截,那么我们需要考虑如何计算这一小截的......
  • setInterval和setTimeout的区别
    在制作网页动态效果时,一定会遇到某些需求,要求某段程序等待多时时间后再开始执行,就像在我们的生活中一样,待会儿再开始做一件事。在JavaScript中主要通过定时器实现此类需求,本文将对定时器做一个概括,正对setTimeout()做一个详细用法总结。一.setInterval与setTimeout的区别setInterva......
  • [SpringSecurity5.2.2源码分析七]:WebAsyncManagerIntegrationFilter
    1、作用• 是为了接口返回异步对象,然后执行异步任务也能通过SecurityContextHolder获取SecurityContext• 比如说返回值是WebAsyncTask的时候2、WebAsyncManagerIntegrationFilter• 源码很短就是在WebAsyncManager中注册了SecurityContextCallableProcessingInterceptorpublic......
  • SSIM阳光市场已跑路!FX110网一年多前曾警示
    近期,有多位投资者向我站爆料称SSIM阳光市场跑路了,平台官网无法打开,MT4登录不了,投资者们出金无门。其中一位投资者表示,SSIM阳光市场从今年三月份开始就直接不给出金了,也没有负责人出来说明情况。SSIM虚假宣传多个监管,FX110网一年多前已警示SSIM阳光市场的平台域名成立时间为2022年3......
  • java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.lang.Str
    这个问题来自于想把从数据库查询的数据转化为字符串,方便后面做时间比较,显示格式转化错误 sql改造部分 as的左边为我的sql语句语法使用如下DATE_FORMAT((sql语句),'%Y-%m-%d%H:%i:%s')如果是涉及时间的计算,可以考虑如下方式BigDecimala=(BigDecimal)sprint......
  • datetime:Python日期与时间值管理计算
    前言datetime库也用于时间日期的处理,主要用于完成日期和时间的解析,格式化和算术运算。本篇,将完整的介绍datetime库的应用知识。datetime.date与time库一样,datetime库也有获取当前日期的类,日历日期值用datetime.date表示。比如datetime.date.today()。具体代码如下:importdate......
  • C++ Primer 第一章:一些尝试和认识
    Warning以下是一些非常无聊的知识点,附以肤浅的理解和解释,仅供参考,切勿轻信。C++Primer1.4.4示例代码PS:这段代码没什么用。#include<iostream>intmain(){ intcurrVal=0,val=0; //接收输入流的第一个数 if(std::cin>>currVal){ intcnt=1; //......
  • 基于微信小程序的高校宿舍报修系统-计算机毕业设计源码+LW文档
    一、研究背景及意义研究背景:学生宿舍是学生学习,生活,休息,交往的重要场所,做好宿舍管理工作,构建安全校园,是校园管理的一项重要任务。目前我们传统的宿舍管理存在一些弊端,传统考勤制度,信息传达不及时,依赖人工管理,人员管理过程冗杂,无精准数据分析,宿舍安全隐患,家校无法互通等问题。在我......