• IM开源项目OpenIM部署文档-从准备工作到nginx配置


    IM开源项目OpenIM部署文档-从准备工作到nginx配置

    2022-11-14 22:27·OpenIM

    一、准备工作

    运行环境

    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

    1. USER=root #不用修改
    2. PASSWORD=openIM123 #建议修改复杂密码 不能包括 @#之类特殊符号 且至少要8
    3. ENDPOINT=http://127.0.0.1:10005 #使用minio发图片视频文件需要填写 外网ip:port或者用域名
    4. DATA_DIR=./ #指定大磁盘目录

    2.初始化部署

    1. chmod +x install_im_server.sh
    2. ./install_im_server.sh

    具体组件包括:

    1. ETCD 2. MySQL 3. MongoDB 4. Redis 5. Kafka 6. Minio(注:如果使用三方云服务器存储媒体文件可不搭建)

    3.修改配置

    如果已经执行过install_im_server.sh,则config/usualConfig.yaml根据.env的配置已经修改完成了,且组件也安装完毕,则根据需求修改如下字段

    1. tokenpolicy:
    2. accessSecret: "open_im_server" #token生成相关 建议修改
    3. accessExpire: 90 #token过期时间(天) 默认即可
    4. messageverify:
    5. friendVerify: false #发送消息是否验证好友关系 false表示不验证好友关系
    6. push:
    7. getui:
    8. pushUrl: "https://restapi.getui.com/v2/$appId"
    9. masterSecret: "" #需添加
    10. appKey: "" #需添加
    11. enable: false #true启动个推推送

    可能存在的问题:如果非首次安装,可能env密码不能生效,如果数据不重要,先docker-compose down ; rm components -rf再执行以上步骤,需要注意的是app需要重新安装。

    4.重启

    docker-compose down; docker-compose up -d;

    三、开源版Open-IM-Server 源码编译

    1. 安装Go环境。确保Go版本至少为1.15。
    2. 下载源码到服务器
    1. git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive
    2. cd cmd/Open-IM-SDK-Core
    1. 设置脚本权限
    1. cd ../../script/
    2. chmod +x *.sh
    1. 编译源码
    ./batch_build_all_service.sh

    出现all services build success表示编译成功

    四、Open-IM-Server修改配置&启动服务

    1. 修改配置

    如果组件未自行安装,则先执行(二)的1-3步骤、如果要修改ip port等非常用信息,需要在config.yaml中修改。

    1. 启动服务
    1. cd script
    2. ./start_all.sh
    1. 检查服务
    ./check_all.sh
    1. 启动服务
    ./start_all.sh
    1. 检查服务
    1. # 出现all services launch success表示服务启动成功
    2. ./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三个域名及对应的证书

    1. upstream im_msg_gateway{
    2. server 127.0.0.1:10001; #IM消息服务器地址 根据部署情况可指定多台
    3. }
    4. upstream im_api{
    5. server 127.0.0.1:10002; #IM群组用户api服务器地址 根据部署情况可指定多台
    6. }
    7. upstream im_jssdk_gateway{
    8. server 127.0.0.1:10003; #IM jssdk服务器地址 根据部署情况可指定多台
    9. }
    10. upstream im_demo{
    11. server 127.0.0.1:10004; #IM demo登录注册服务器地址 根据部署情况可指定多台
    12. }
    13. upstream storage {
    14. server 127.0.0.1:10005; #MinIO服务器地址 暂时支持1
    15. }
    16. upstream im_admin{
    17. server 127.0.0.1:10006; #IM admin服务器地址 根据部署情况可指定多台
    18. }
    19. upstream im_grafana{
    20. server 127.0.0.1:10007; #IM 统计服务器地址 docker-compose启动所在机器
    21. }
    22. upstream im_chat{
    23. server 127.0.0.1:10008; #IM 商业版登录注册服务器地址 根据部署情况可指定多台
    24. }
    25. upstream im_complete_admin{
    26. server 127.0.0.1:10009; #IM 商业版admin地址 根据部署情况可指定多台
    27. }
    28. upstream im_organization{
    29. server 127.0.0.1:10010; #IM 商业版组织架构服务器地址 根据部署情况可指定多台
    30. }
    31. upstream im_open_rtc{
    32. server 127.0.0.1:7880; #rtc 音视频通话 服务器地址 根据部署情况可指定多台
    33. }
    34. server {
    35. listen 443;
    36. server_name web.rentsoft.cn; #1 web im 端 域名
    37. ssl on;
    38. ssl_certificate /etc/nginx/conf.d/ssl/web.rentsoft.cn.crt; #2 证书
    39. ssl_certificate_key /etc/nginx/conf.d/ssl/web.rentsoft.cn.key; #3 证书
    40. ssl_session_timeout 5m;
    41. gzip on;
    42. gzip_min_length 1k;
    43. gzip_buffers 4 16k;
    44. gzip_comp_level 2;
    45. 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;
    46. gzip_vary off;
    47. gzip_disable "MSIE [1-6]\.";
    48. error_page 405 =200 $uri;
    49. default_type application/wasm;
    50. location /{ #web demo
    51. proxy_set_header Host $host;
    52. proxy_set_header X-Real-Ip $remote_addr;
    53. proxy_set_header X-Forwarded-For $remote_addr;
    54. proxy_set_header X-NginX-Proxy true;
    55. root /data1/online/Pc-Web-Demo/build/; # web im静态资源存放路径
    56. index index.html;
    57. try_files $uri $uri/ /index.html;
    58. }
    59. location /msg_gateway { #10001 ws
    60. proxy_http_version 1.1;
    61. proxy_set_header Upgrade $http_upgrade;
    62. proxy_set_header Connection "Upgrade";
    63. proxy_set_header X-real-ip $remote_addr;
    64. proxy_set_header X-Forwarded-For $remote_addr;
    65. proxy_pass http://im_msg_gateway/;
    66. }
    67. location ^~/api/ { #10002 api
    68. proxy_http_version 1.1;
    69. proxy_set_header Upgrade $http_upgrade;
    70. proxy_set_header Connection "Upgrade";
    71. proxy_set_header X-real-ip $remote_addr;
    72. proxy_set_header X-Forwarded-For $remote_addr;
    73. proxy_pass http://im_api/;
    74. }
    75. location /jssdk_gateway { #10003 jssdk
    76. proxy_http_version 1.1;
    77. proxy_set_header Upgrade $http_upgrade;
    78. proxy_set_header Connection "Upgrade";
    79. proxy_set_header X-real-ip $remote_addr;
    80. proxy_set_header X-Forwarded-For $remote_addr;
    81. proxy_pass http://im_jssdk_gateway/;
    82. }
    83. location ^~/demo/ { # 10004 demo
    84. proxy_http_version 1.1;
    85. proxy_set_header Upgrade $http_upgrade;
    86. proxy_set_header Connection "Upgrade";
    87. proxy_set_header X-real-ip $remote_addr;
    88. proxy_set_header X-Forwarded-For $remote_addr;
    89. proxy_pass http://im_demo/;
    90. }
    91. location ^~/admin/ { #10006 admin
    92. proxy_http_version 1.1;
    93. proxy_set_header Upgrade $http_upgrade;
    94. proxy_set_header Connection "Upgrade";
    95. proxy_set_header X-real-ip $remote_addr;
    96. proxy_set_header X-Forwarded-For $remote_addr;
    97. proxy_pass http://im_admin/;
    98. }
    99. location ^~/grafana/ { #10007 prometheus
    100. proxy_http_version 1.1;
    101. proxy_set_header Upgrade $http_upgrade;
    102. proxy_set_header Connection "Upgrade";
    103. proxy_set_header X-real-ip $remote_addr;
    104. proxy_set_header X-Forwarded-For $remote_addr;
    105. proxy_pass http://im_grafana/;
    106. }
    107. location ^~/chat/ { #10008 chat login
    108. proxy_http_version 1.1;
    109. proxy_set_header Upgrade $http_upgrade;
    110. proxy_set_header Connection "Upgrade";
    111. proxy_set_header X-real-ip $remote_addr;
    112. proxy_set_header X-Forwarded-For $remote_addr;
    113. proxy_pass http://im_chat/;
    114. }
    115. location ^~/complete_admin/ { #10009 admin
    116. proxy_http_version 1.1;
    117. proxy_set_header Upgrade $http_upgrade;
    118. proxy_set_header Connection "Upgrade";
    119. proxy_set_header X-real-ip $remote_addr;
    120. proxy_set_header X-Forwarded-For $remote_addr;
    121. proxy_pass http://im_complete_admin/;
    122. }
    123. location ^~/organization/ { #10010 organization
    124. proxy_http_version 1.1;
    125. proxy_set_header Upgrade $http_upgrade;
    126. proxy_set_header Connection "Upgrade";
    127. proxy_set_header X-real-ip $remote_addr;
    128. proxy_set_header X-Forwarded-For $remote_addr;
    129. proxy_pass http://im_organization/;
    130. }
    131. location ^~/open_rtc/ { #7880 rtc
    132. proxy_http_version 1.1;
    133. proxy_set_header Upgrade $http_upgrade;
    134. proxy_set_header Connection "Upgrade";
    135. proxy_set_header X-real-ip $remote_addr;
    136. proxy_set_header X-Forwarded-For $remote_addr;
    137. proxy_pass http://im_open_rtc/;
    138. }
    139. }
    140. server {
    141. listen 80;
    142. server_name web.rentsoft.cn ; #1 web im 端 域名
    143. rewrite ^(.*)$ https://${server_name}$1 permanent;
    144. }
    145. server {
    146. ssl_session_timeout 5m;
    147. listen 443;
    148. server_name storage.rentsoft.cn; #1 MinIO存储域名
    149. ssl on;
    150. ssl_certificate /etc/nginx/conf.d/ssl/storage.rentsoft.cn.crt; #证书
    151. ssl_certificate_key /etc/nginx/conf.d/ssl/storage.rentsoft.cn.key; #证书
    152. gzip on;
    153. gzip_min_length 1k;
    154. gzip_buffers 4 16k;
    155. gzip_comp_level 2;
    156. 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;
    157. gzip_vary off;
    158. gzip_disable "MSIE [1-6]\.";
    159. location / {
    160. proxy_pass http://storage;
    161. proxy_set_header X-Real-IP $remote_addr;
    162. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    163. proxy_set_header X-Forwarded-Proto $scheme;
    164. proxy_set_header Host $http_host;
    165. proxy_http_version 1.1;
    166. client_max_body_size 8000M;
    167. }
    168. }
    169. server {
    170. listen 443;
    171. server_name admin.rentsoft.cn; #后台管理域名
    172. ssl on;
    173. ssl_certificate /etc/nginx/conf.d/ssl/admin.rentsoft.cn.crt; # 证书
    174. ssl_certificate_key /etc/nginx/conf.d/ssl/admin.rentsoft.cn.key; #证书
    175. ssl_session_timeout 5m;
    176. gzip on;
    177. gzip_min_length 1k;
    178. gzip_buffers 4 16k;
    179. gzip_comp_level 2;
    180. 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;
    181. gzip_vary off;
    182. gzip_disable "MSIE [1-6]\.";
    183. location / {
    184. proxy_set_header Host $host;
    185. proxy_set_header X-Real-Ip $remote_addr;
    186. proxy_set_header X-Forwarded-For $remote_addr;
    187. proxy_set_header X-NginX-Proxy true;
    188. root /data1/online/Open-IM-Admin/dist/; #管理后台web静态资源存放路径
    189. index index.html;
    190. try_files $uri $uri/ /index.html;
    191. }
    192. }
    193. server {
    194. listen 80;
    195. server_name admin.rentsoft.cn; #管理后台 域名
    196. rewrite ^(.*)$ https://${server_name}$1 permanent;
    197. }

    六、端口开放及访问路由

    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等;

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

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

  • 相关阅读:
    【爬虫】谷歌开发者工具中的XHR和JS的区别
    HTML常用标签
    ES索引修改mappings与重建reindex详解之修改字段类型
    Java从入门到精通-数组(三)
    云原生下GIS服务规划与设计
    JAVA高级(一)
    消极型人格分析,如何改变消极型性格?
    网络七层协议
    css的三大特性
    CFCA证书 申请 流程(一)
  • 原文地址:https://blog.csdn.net/OpenIM/article/details/127871831