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普通磁盘即可

logo1024 x 1024png

软著如需上架国内市场,提前准备软著

管理后台需购买

二、docker-compose一键部署

先准备

go/git/docker/docker-compose,具体参考:https://doc.rentsoft.cn/#/component/docker

单机环境下的组件部署,可以通过docker-compose一键部署,先选择某个大磁盘目录,然后依次输入如下命令:

gitclone 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。

下载源码到服务器

gitclonehttps://github.com/OpenIMSDK/Open-IM-Server.git --recursivecdcmd/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中修改。

启动服务

cdscript./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三个域名及对应的证书

upstreamim_msg_gateway{server127.0.0.1:10001;#IM消息服务器地址 根据部署情况可指定多台}upstreamim_api{server127.0.0.1:10002;#IM群组用户api服务器地址 根据部署情况可指定多台}upstreamim_jssdk_gateway{server127.0.0.1:10003;#IM jssdk服务器地址 根据部署情况可指定多台}upstreamim_demo{server127.0.0.1:10004;#IM demo登录注册服务器地址 根据部署情况可指定多台}upstreamstorage {server127.0.0.1:10005;#MinIO服务器地址 暂时支持1台}upstreamim_admin{server127.0.0.1:10006;#IM admin服务器地址 根据部署情况可指定多台}upstreamim_grafana{server127.0.0.1:10007;#IM 统计服务器地址 docker-compose启动所在机器}upstreamim_chat{server127.0.0.1:10008;#IM 商业版登录注册服务器地址 根据部署情况可指定多台}upstreamim_complete_admin{server127.0.0.1:10009;#IM 商业版admin地址 根据部署情况可指定多台}upstreamim_organization{server127.0.0.1:10010;#IM 商业版组织架构服务器地址 根据部署情况可指定多台}upstreamim_open_rtc{server127.0.0.1:7880;#rtc 音视频通话 服务器地址 根据部署情况可指定多台}server{listen443;server_nameweb.rentsoft.cn;#1 web im 端 域名sslon;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_timeout5m;gzipon;gzip_min_length1k;gzip_buffers416k;gzip_comp_level2;gzip_typestext/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_varyoff;gzip_disable"MSIE [1-6]\.";error_page405=200$uri;default_typeapplication/wasm;location/{#web demoproxy_set_headerHost$host;proxy_set_headerX-Real-Ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_set_headerX-NginX-Proxytrue;root/data1/online/Pc-Web-Demo/build/;# web im静态资源存放路径indexindex.html;try_files$uri$uri/ /index.html;        }location/msg_gateway {#10001 wsproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_msg_gateway/;        }location ^~/api/{#10002 apiproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_api/;              }location/jssdk_gateway {#10003 jssdkproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_jssdk_gateway/;              }location ^~/demo/{# 10004 demoproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_demo/;              }location ^~/admin/{#10006 adminproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_admin/;              }location ^~/grafana/{#10007  prometheusproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_grafana/;              }location ^~/chat/{#10008 chat loginproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_chat/;              }location ^~/complete_admin/{#10009  adminproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_complete_admin/;              }location ^~/organization/{#10010 organizationproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_organization/;              }location ^~/open_rtc/{#7880 rtcproxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://im_open_rtc/;              }}server{listen80;server_nameweb.rentsoft.cn ;#1 web im 端 域名rewrite ^(.*)$https://${server_name}$1permanent;}server{ssl_session_timeout5m;listen443;server_namestorage.rentsoft.cn;#1 MinIO存储域名sslon;ssl_certificate/etc/nginx/conf.d/ssl/storage.rentsoft.cn.crt;#证书ssl_certificate_key/etc/nginx/conf.d/ssl/storage.rentsoft.cn.key;#证书gzipon;gzip_min_length1k;gzip_buffers416k;gzip_comp_level2;gzip_typestext/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;gzip_varyoff;gzip_disable"MSIE [1-6]\.";location/ {proxy_passhttp://storage;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;proxy_set_headerHost$http_host;proxy_http_version1.1;client_max_body_size8000M;    }}server{listen443;server_nameadmin.rentsoft.cn;#后台管理域名sslon;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_timeout5m;gzipon;gzip_min_length1k;gzip_buffers416k;gzip_comp_level2;gzip_typestext/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;gzip_varyoff;gzip_disable"MSIE [1-6]\.";location/ {proxy_set_headerHost$host;proxy_set_headerX-Real-Ip$remote_addr;proxy_set_headerX-Forwarded-For$remote_addr;proxy_set_headerX-NginX-Proxytrue;root/data1/online/Open-IM-Admin/dist/;#管理后台web静态资源存放路径indexindex.html;try_files$uri$uri/ /index.html;        }}server{listen80;server_nameadmin.rentsoft.cn;#管理后台 域名rewrite ^(.*)$https://${server_name}$1permanent;}

六、端口开放及访问路由

IM

如果按照(七)做了nginx配置,仅开放443和80端口即可。

IM端口说明访问说明对应关系

TCP:10001IM ws消息在域名和路由之间增加msg_gatewaywss://test.xx.xx/msg_gateway->ws://ip:10001

TCP:10002IM api在域名和路由之间增加apihttps://test.xx.xx/api->http://ip:10002

TCP:10003ws端口 jssdk的专用在域名和路由之间增加jssdk_gatewaywss://test.xx.xx/jssdk_gateway->ws://ip:10003

TCP:10004demo注册登录在域名和路由之间增加demohttps://test.xx.xx/demo->http://ip:10004

TCP:10005minio存储时

TCP:10006IM 后台管理在域名和路由之间增加adminhttps://test.xx.xx/admin->http://ip:10006

TCP:10007数据统计

TCP:10008商业版业务在域名和路由之间增加chathttps://test.xx.xx/chat->http://ip:10008

TCP:10009商业版管理后台在域名和路由之间增加complete_adminhttps://test.xx.xx/complete_admin->http://ip:10009

TCP:10010商业版组织架构在域名和路由之间增加organizationhttps://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等;

群组支持:十万群成员的超级大群

安卓基于自启动-保活机制,确保消息实时触达;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容