写点什么

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

作者:Geek_1ef48b
  • 2022-11-15
    云南
  • 本文字数:5952 字

    阅读完需:约 20 分钟

一、准备工作运行环境


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 --recursivecd 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 ^(.*){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 proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto 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 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 ^(.*){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 反向代理


关于 OpenIMOpenIM 是由 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 等;


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


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

用户头像

Geek_1ef48b

关注

还未添加个人签名 2021-08-25 加入

还未添加个人简介

评论

发布
暂无评论
IM开源项目OpenIM部署文档-从准备工作到nginx配置_Geek_1ef48b_InfoQ写作社区