IM开源项目OpenIM部署文档-从准备工作到nginx配置
IM开源项目OpenIM部署文档-从准备工作到nginx配置
一、准备工作
运行环境 |
linux系统即可, Ubuntu 7.5.0-3ubuntu1~18.04最优 |
图片视频文件存储 |
支持cos/MinIO |
https/wss协议 |
1. 需申请域名或者子域名(web im端登录注册及im 服务端使用)建议:web.xx.xx 2. 若使用MinIO作为对象存储,建议:storage.xx.xx 3. 管理后台子域名,建议:admin.xx.xx 4. 部署nginx,并配置证书。 |
离线推送(app被杀死或未启动时推送) |
国内申请申请厂商通道以及个推,建议提前申请;海外申请firebase; |
苹果开发者账号 |
如需打包、上架,请自行申请账号 |
手机验证码服务 |
请自行申请阿里云,建议提前申请 |
消息加密存储 |
需购买消息加密插件 |
组织架构 |
需购买组织架构模块 |
机器资源 |
如果用户量小于10万,可用单机部署,8C 16G 5Mb 1T普通磁盘即可 |
logo |
1024 x 1024png |
软著 |
如需上架国内市场,提前准备软著 |
管理后台 |
需购买 |
二、docker-compose一键部署
先准备
go/git/docker/docker-compose,具体参考:https://doc.rentsoft.cn/#/component/docker
单机环境下的组件部署,可以通过docker-compose一键部署,先选择某个大磁盘目录,然后依次输入如下命令:
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive;
进入项目后
1.修改.env
USER=root #不用修改
PASSWORD=openIM123 #建议修改复杂密码 不能包括 @#之类特殊符号 且至少要8位
ENDPOINT=http://127.0.0.1:10005 #使用minio发图片视频文件需要填写 外网ip:port或者用域名
DATA_DIR=./ #指定大磁盘目录
2.初始化部署
chmod +x install_im_server.sh
./install_im_server.sh
具体组件包括:
- ETCD 2. MySQL 3. MongoDB 4. Redis 5. Kafka 6. Minio(注:如果使用三方云服务器存储媒体文件可不搭建)
3.修改配置
如果已经执行过install_im_server.sh,则config/usualConfig.yaml根据.env的配置已经修改完成了,且组件也安装完毕,则根据需求修改如下字段
tokenpolicy:
accessSecret: "open_im_server" #token生成相关 建议修改
accessExpire: 90 #token过期时间(天) 默认即可
messageverify:
friendVerify: false #发送消息是否验证好友关系 false表示不验证好友关系
push:
getui:
pushUrl: "https://restapi.getui.com/v2/$appId"
masterSecret: "" #需添加
appKey: "" #需添加
enable: false #true启动个推推送
可能存在的问题:如果非首次安装,可能env密码不能生效,如果数据不重要,先docker-compose down ; rm components -rf再执行以上步骤,需要注意的是app需要重新安装。
4.重启
docker-compose down; docker-compose up -d;
三、开源版Open-IM-Server 源码编译
- 安装Go环境。确保Go版本至少为1.15。
- 下载源码到服务器
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive
cd cmd/Open-IM-SDK-Core
- 设置脚本权限
cd ../../script/
chmod +x *.sh
- 编译源码
./batch_build_all_service.sh
出现all services build success表示编译成功
四、Open-IM-Server修改配置&启动服务
- 修改配置
如果组件未自行安装,则先执行(二)的1-3步骤、如果要修改ip port等非常用信息,需要在config.yaml中修改。
- 启动服务
cd script
./start_all.sh
- 检查服务
./check_all.sh
- 启动服务
./start_all.sh
- 检查服务
# 出现all services launch success表示服务启动成功
./check_all.sh
(二)和(四)操作完成后,实际上完成了混合部署模式,即docker部署组件,IM源码部署。
五、nginx配置参考
用业务申请的
web.xx.xx/storage.xx.xx/admin.xx.xx分别替换open-im-ng-example.conf中web.rentsoft.cn /storage.rentsoft.cn/admin.rentsoft.cn三个域名及对应的证书
upstream im_msg_gateway{
server 127.0.0.1:10001; #IM消息服务器地址 根据部署情况可指定多台
}
upstream im_api{
server 127.0.0.1:10002; #IM群组用户api服务器地址 根据部署情况可指定多台
}
upstream im_jssdk_gateway{
server 127.0.0.1:10003; #IM jssdk服务器地址 根据部署情况可指定多台
}
upstream im_demo{
server 127.0.0.1:10004; #IM demo登录注册服务器地址 根据部署情况可指定多台
}
upstream storage {
server 127.0.0.1:10005; #MinIO服务器地址 暂时支持1台
}
upstream im_admin{
server 127.0.0.1:10006; #IM admin服务器地址 根据部署情况可指定多台
}
upstream im_grafana{
server 127.0.0.1:10007; #IM 统计服务器地址 docker-compose启动所在机器
}
upstream im_chat{
server 127.0.0.1:10008; #IM 商业版登录注册服务器地址 根据部署情况可指定多台
}
upstream im_complete_admin{
server 127.0.0.1:10009; #IM 商业版admin地址 根据部署情况可指定多台
}
upstream im_organization{
server 127.0.0.1:10010; #IM 商业版组织架构服务器地址 根据部署情况可指定多台
}
upstream im_open_rtc{
server 127.0.0.1:7880; #rtc 音视频通话 服务器地址 根据部署情况可指定多台
}
server {
listen 443;
server_name web.rentsoft.cn; #1 web im 端 域名
ssl on;
ssl_certificate /etc/nginx/conf.d/ssl/web.rentsoft.cn.crt; #2 证书
ssl_certificate_key /etc/nginx/conf.d/ssl/web.rentsoft.cn.key; #3 证书
ssl_session_timeout 5m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/wasm;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
error_page 405 =200 $uri;
default_type application/wasm;
location /{ #web demo
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-NginX-Proxy true;
root /data1/online/Pc-Web-Demo/build/; # web im静态资源存放路径
index index.html;
try_files $uri $uri/ /index.html;
}
location /msg_gateway { #10001 ws
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_msg_gateway/;
}
location ^~/api/ { #10002 api
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_api/;
}
location /jssdk_gateway { #10003 jssdk
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_jssdk_gateway/;
}
location ^~/demo/ { # 10004 demo
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_demo/;
}
location ^~/admin/ { #10006 admin
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_admin/;
}
location ^~/grafana/ { #10007 prometheus
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_grafana/;
}
location ^~/chat/ { #10008 chat login
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_chat/;
}
location ^~/complete_admin/ { #10009 admin
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_complete_admin/;
}
location ^~/organization/ { #10010 organization
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_organization/;
}
location ^~/open_rtc/ { #7880 rtc
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://im_open_rtc/;
}
}
server {
listen 80;
server_name web.rentsoft.cn ; #1 web im 端 域名
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
ssl_session_timeout 5m;
listen 443;
server_name storage.rentsoft.cn; #1 MinIO存储域名
ssl on;
ssl_certificate /etc/nginx/conf.d/ssl/storage.rentsoft.cn.crt; #证书
ssl_certificate_key /etc/nginx/conf.d/ssl/storage.rentsoft.cn.key; #证书
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
location / {
proxy_pass http://storage;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
client_max_body_size 8000M;
}
}
server {
listen 443;
server_name admin.rentsoft.cn; #后台管理域名
ssl on;
ssl_certificate /etc/nginx/conf.d/ssl/admin.rentsoft.cn.crt; # 证书
ssl_certificate_key /etc/nginx/conf.d/ssl/admin.rentsoft.cn.key; #证书
ssl_session_timeout 5m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-NginX-Proxy true;
root /data1/online/Open-IM-Admin/dist/; #管理后台web静态资源存放路径
index index.html;
try_files $uri $uri/ /index.html;
}
}
server {
listen 80;
server_name admin.rentsoft.cn; #管理后台 域名
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
六、端口开放及访问路由
IM
如果按照(七)做了nginx配置,仅开放443和80端口即可。
IM端口 |
说明 |
访问说明 |
对应关系 |
TCP:10001 |
IM ws消息 |
在域名和路由之间增加msg_gateway |
wss://test.xx.xx/msg_gateway->ws://ip:10001 |
TCP:10002 |
IM api |
在域名和路由之间增加api |
https://test.xx.xx/api->http://ip:10002 |
TCP:10003 |
ws端口 jssdk的专用 |
在域名和路由之间增加jssdk_gateway |
wss://test.xx.xx/jssdk_gateway->ws://ip:10003 |
TCP:10004 |
demo注册登录 |
在域名和路由之间增加demo |
https://test.xx.xx/demo->http://ip:10004 |
TCP:10005 |
minio存储时 |
||
TCP:10006 |
IM 后台管理 |
在域名和路由之间增加admin |
https://test.xx.xx/admin->http://ip:10006 |
TCP:10007 |
数据统计 |
||
TCP:10008 |
商业版业务 |
在域名和路由之间增加chat |
https://test.xx.xx/chat->http://ip:10008 |
TCP:10009 |
商业版管理后台 |
在域名和路由之间增加complete_admin |
https://test.xx.xx/complete_admin->http://ip:10009 |
TCP:10010 |
商业版组织架构 |
在域名和路由之间增加organization |
https://test.xx.xx/organization->http://ip:10006 |
音视频通话
RTC端口 |
说明 |
操作 |
TCP: 7881 |
音视频通话 |
直接开通端口,不走nginx反向代理 |
UDP: 7882 |
音视频通话 |
直接开通端口,不走nginx反向代理 |
关于OpenIM
OpenIM是由IM技术专家打造开源即时通讯组件,也是目前最受欢迎的开源IM项目之一,开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时通讯、实时通讯能力快速集成到自身应用中,并确保业务数据的安全性和私密性。github社区活跃,star近万,排名遥遥领先,开发者万人,OpenM力争开源IM项目No1,打造开源IM第一社区。OpenIM是也是目前非常受欢迎的开源IM项目,广泛用于政企协同办公场景。
github地址:
https://github.com/OpenIMSDK/Open-IM-Server
开发者中心:https://doc.rentsoft.cn/#/
平台支持:Android iOS Uniapp Flutter Electron Web reactNative等几乎所有平台
web端基于wasm的sdk即将发布
pc支持信创环境:银河麒麟 UOS等;
群组支持:十万群成员的超级大群
安卓基于自启动-保活机制,确保消息实时触达;
IM开源项目OpenIM部署文档-从准备工作到nginx配置的更多相关文章
- kettle开源项目部署文档
kettle开源项目部署文档 1.kettle简介 kettle是一款国外开源的ETL(Extract Transform Load)工具,纯java编写,可以在Windows.Linux.Unix上 ...
- GitHub Python项目推荐|瓦力Devops开源项目代码部署平台持续部署
GitHub Python项目推荐|walle - 瓦力 Devops开源项目代码部署平台 项目热度 标星(star):8418 (很不错的实用项目,大神作品,建议关注) 标星趋势 关注(watch) ...
- 2022最新IntellJ IDEA诺依开发部署文档
前景提示 若伊是国内一款很好的开源项目,非常的便于学习,而且它是开源免费的,但是,它的开发部署文档实在是没法按照那个文档,快速高效的在本地搭建一套可以运行的项目,对于学习开发和使用实在是一大难题,为此 ...
- 2022最新IntellJ IDEA的zheng开发部署文档
目录 前景提示 一.环境整合 构建工具(参考工具部署方式) 二.git 导入编译器 三.模块描述浅析 四.配置文档 1.总配置 2.数据库配置 3.密码设置 4.配置建议 五.在IDEA中执行MySQ ...
- 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...
- linkedin开源的kafka-monitor安装文档
linkedin开源的kafka-monitor安装文档 linkedin 开源的kafka-monitor的安装使用可以参考官方的readme:流程介绍的已经比较清楚,但是还是有一些地方需要修正.让 ...
- hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档
相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...
- 部署文档(centos7.x\nginx\mysql5.6\jdk1.8\ssl\jboot)
部署文档(centos7.x\nginx\mysql5.6\jdk1.8\ssl\jboot) 1.基础环境********************************************** ...
- yapi部署文档
windows 下 yapi部署文档 安装nodejs 安装mongodb 安装yapi 介绍 随着 web 技术的发展,前后端分离成为越来越多互联网公司构建应用的方式.前后端分离的优势是一套 Api ...
- 2022最新IntellJ IDEA的mall开发部署文档
目录 版本说明 一.概述 二.基本构建 三.Git 导入编译器 四.模块描述浅析 五.配置文档 application.yml修改,涉及模块 application-dev.yml修改,涉及模块 ge ...
随机推荐
- jQuery模糊匹配checkbox全选 value实现checkbox部分或全部全选
本文章总结jQuery实现checkbox三种情况的全选功能 第一种:等值全选,也称name的等值全选,通过checkbox的名称name实现. 第二种:模糊全选,也称id模糊全选,通过checkbo ...
- BBS项目(四):临时评论渲染 文章子评论功能 后台管理页面搭建 添加文章页面搭建
目录 临时评论样式渲染 文章子评论业务逻辑 后台管理页面搭建 后台管理页面模板创建 添加文章页面搭建 富文本编辑器 添加文章初步实现 添加文章功能优化 beautifulsoup模块基本使用 临时评论 ...
- JSP 学习笔记 | 二、JSP 脚本 & 案例实现 & 缺点分析
前文:JSP 学习笔记 | 一.JSP 原理理解 JSP脚本用于在 JSP页面内定义 Java代码.很多入门案例中我们就在 JSP 页面定义的 Java 代码就是 JSP 脚本. JSP 脚本分类 J ...
- java进阶(15)--DecimalFormat、BigDecimal
一.DecimalFormat(数字格式化) 1.数字格式化的表示: (#) 代表任意数字 (,)代表千分位 (.)代表小数 (0)代表不够时补0 2.示例
- HP笔记本(Inspiron 7472) 视频时无摄像头的处理方案
需要视频考试的前一天,测试摄像头时发现微信视频时竟然摄像头打不开.比较焦急,尝试了好几种办法,并在2小时内找出解决方案. 一.查看设备是否被禁用 我的电脑->右键->设备管理器-> ...
- iview 表单有值却校验失败
转载请注明出处: iview 表单校验数值的时候,表单有值,却在提交的时候,提示表单校验失败: 解决方案: 1. IviewUI的文档里查到了rules规则里面有个校验类型的属性字段type rule ...
- @Async异步操作及异步线程池
本文为博主原创,转载请注明出处: @Async 用来实现异步请求操作,使用@Async 注解时,需要同时使用 @EnableAsync 注解,使用 @EnableAsync 注解用于开启异步请求. 如 ...
- 项目使用 GlobalExceptionHandler 与 @RestControllerAdvice自定义异常 二
未经博主允许不得转载: 自定义异常,不仅需要定义符合自己业务的异常状态码,也需要定义自己项目中的异常封装.记录下自己手敲代码中的异常封装: 1.定义一个枚举类,枚举类中定义状态码及状态码描述,再定义一 ...
- SD协议-基本概念
1.SD协议版本 SD 1.1 SD 2.0 SD 3.0 在看协议的时候,需要注意协议的版本,注意版本之间的差别 SD协议是常见的数据通信和存储卡之间的协议 HDMI是显示相关的协议,遵循HDMI协 ...
- [转帖]Nginx内置变量以及日志格式变量参数详解
https://www.cnblogs.com/wajika/p/6426270.html $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求 ...