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
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 demoproxy_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 wsproxy_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 apiproxy_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 jssdkproxy_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 demoproxy_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 adminproxy_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 prometheusproxy_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 loginproxy_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 adminproxy_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 organizationproxy_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 rtcproxy_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配置相关推荐
- java web部署文档_javaweb项目实施部署文档
javaweb项目实施部署文档 一 .安装配置jdk Jdk的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.h ...
- 优秀开源项目推荐之--文档库bookstack
之前波哥给大家介绍了最牛X开源cmdb系统,最牛X的开源论坛系统等等一些列优秀的开源项目.当然还有咱们自己家的最牛X的一键部署系统(还在升级中暂时不可用哈!). 今天再给大家推荐一款最牛逼的知识文档库 ...
- JAVA微信开源项目(jeewx)百度BAE 部署文档
JeeWx(捷微) 百度BAE 部署文档 开始前的准备 1. WAR包 下载地址: 链接: http://pan.baidu.com/s/1bnlcsk3 密码: 592i 下载war包和sql脚本文 ...
- Django+Linux+Uwsgi+Nginx项目部署文档
Django+Linux+Uwsgi+Nginx项目部署文档 WSGI 在生产环境中使用WSGI作为python web的服务器 WSGI:全拼为Python Web服务器网关接口,Python We ...
- django+nginx+uwsgi项目部署文档整理
django+nginx+uwsgi项目部署文档整理 参考文章:https://blog.csdn.net/qq_42314550/article/details/81805328 一.python安 ...
- APP分发系统源码 全开源超级签名系统源码 附带详细部署文档
介绍: APP分发系统源码.全开源超级签名系统源码. 附带详细部署文档. 源码全开源的!!! 后台账号:admin 后台密码:123456 需要的资料:阿里云账户 服务器 linux(4核8G) 阿里 ...
- jeeplus mysql_2.jeeplus源码-项目部署文档.docx
项目部署文档官方网址: 作者:lgf更新日期:2016-5-9开发工具:eclipse/myeclipse+ mysql/oracle+tomcat6/7/8.打开eclipse右键 -> Im ...
- Docker部署文档
Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...
- Yapi 可视化接口管理平台部署文档
一[yabi介绍] 1.1 官网 github:https://github.com/ymfe/yapi Yapi 可视化接口管理平台 Yapi 是高效.易用.功能强大的 api 管理平台,旨在为开发 ...
最新文章
- 比特币大涨,如何辨别牛市是否真正到来?
- c++ 准确计时_C++精确计时
- C语言中的“三字母词”坑了工程师
- spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe
- php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法
- SpringBoot集成Spring Security(2)——自动登录
- 搭建Magento电子商务网站
- 微矿Qlib:业内首个AI量化投资开源平台
- Fiddler如何捕捉DefaultHttpClient的HTTP请求
- Linux sites
- Linux磁盘分区及文件系统格式化和挂载
- MULTISIM仿真
- PPT2016;插入视频,无法实现自动播放
- 网名接龙--之追求完美
- IIC(I2C)总线设备地址,例如E2PROM、CH455G等器件应用
- 第十二章:email-mailbox:管理email归档-imaplib:IMAP4客户库-邮箱状态
- CodeForces 427C Checkposts (强连通分量Tarjan模板题)
- 安卓手机电池校正方法教程
- 拿着 GitHub 标星 80k 的阿里性能优化笔记,把项目优化个遍
- linux v4l2系统详解,Linux摄像头驱动学习之:(一)V4L2_框架分析
热门文章
- Visio中如何锁定形状
- 激发儿童数学兴趣的iPhone、iPad游戏“Panasonic Prime Smash!”全面改版
- 【Linux】win11 家庭版通过VMware安装Ubuntu 2022虚拟机
- eclipse环境搭建步骤_eclipse搭建php开发环境
- [C++]虚析构函数的作用
- POI导出EXCEL公式生效
- Linux怎么暂停top命令,linux怎么停止线程
- 录屏鼠标光标圆圈如何实现_(运动跟踪)如何给视频添加移动的圆圈或箭头、文字等标记...
- 高通qspr是哪几个单词得缩写_PIR是哪几个单词的缩写
- 我们身边的学霸后来去哪了?