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

news2025/7/7 11:55:46

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

具体组件包括:

  1. 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 源码编译

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

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

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

  1. 修改配置

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

  1. 启动服务
cd script
./start_all.sh 
  1. 检查服务
./check_all.sh
  1. 启动服务
./start_all.sh
  1. 检查服务
# 出现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等;

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/6963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# HTML

一 HTML 超文本标记语言 在HTML当中存在着大量的标签,我们用HTML提供的标签,将要显示在网页中的内容包含起来。就构成了我们的网页。 二 CSS CSS 控制网页内容显示的效果。 HTMLCSS静态网页。 JSJquery 动态效果。 三 开始动手写HTML页面 ① 首先在…

XSS进阶二

目录实验目的预备知识实验环境实验步骤一实例四、换一个角度,阳光依旧实验步骤二实例五、限制了我的左手,我还有右手实验步骤三实例六、大胆去思考,小心去求证实验目的 1.深入理解xss工作原理。 2.怎么去绕过规则实现xss。 3.培养学生的独立…

Spring Cloud(十):Spring Cloud Skywalking

链路追踪组件选型 Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件&…

XCTF-web Robots

场景一:Training-WWW-Robots 进入场景,提示关于robots.txt文件 访问robots.txt文件,目录下存在 /fl0g.php 文件,进一步访问得到flag 场景二:robots 根据题目,提示关于robots.txt协议 访问成功&#xff…

api股票数据接口能实现什么功能?

api股票数据接口在量化投资方面能够受到比较多交易者的开发和使用的,主要是得于股票量化交易数据接口的7个策略十档行情,可以实现一键解决炒股难题,和多指标辅助追踪主力,跟主力做强势股,只有在行股票数据接口一键就可…

零样本图像分类综述

零样本图像分类综述 摘要 零样本图像分类指训练集和测试集在数据的类别上没有交集的情况下进行图像分类,该技术是解决类别标签缺失问题的一种有效手段,因此受到了日益广泛的关注,自提出问题至今。零样本图像分类研究已经大致有十年时间啦。…

学完 Fluent 官方基础教程,你离一名合格Fluent 流体工程师还有多远?

作者 | 张杨 仿真秀专栏作者 Fluent软件的学习包含基础部分和进阶部分,通常我们学习Fluent软件,都是从一个最简单的三通管开始的。 图1 Fluent的标准初学案例——三通管混合换热 ANSYS Fluent官方的基础培训课程表,通常只包括以下几个方面…

堆排序在topK场景题中的应用及原理

参考以下文章: 堆排序(大顶堆、小顶堆)----C语言 006 查找第k大的数——堆结构的初应用寻找最大的K个数,Top K问题的堆实现海量数据查找最大的前k个数(小顶堆) 零、先简单说下处理topK问题的答案: 一般我们说 topK 问…

如此简单易懂的方式 让网站支持PWA

总结起来,网站配置PWA简单步骤为: 1.编写 manifest.json; 2.编写 serviceWorker.js; 3.在 index.html 引入上述两个文件; 4.把上述三个文件放在网站根目录(或者同一目录下); 5.网站需要部署在https环境才能…

mannose-PEG-Alkyne|甘露糖-聚乙二醇-巯基|巯基修饰甘露糖

mannose-PEG-Alkyne|甘露糖-聚乙二醇-巯基|巯基修饰甘露糖 中文名称:甘露糖-巯基 英文名称:mannose-SH 别称:巯基修饰甘露糖,巯基-甘露糖 西安齐岳生物还可以提供PEG接枝修饰甘露糖,mannose-PEG-Alkyne 甘露糖-聚乙…

Android App开发实战项目之给用户推荐旅游信息图片(附源码 简单易懂)

需要全部源码请点赞关注收藏后评论区留言~~~ 一、需求描述 假定用户打开一个旅游App想看看哪里风景比较优美,那么App应当展示各地的风景名声图片,为了让界面不太呆板,可以考虑交错显示风景图片,接着用户向下拉动页面,…

【ROS】机械人开发二--ROS环境安装

机械人开发二--ROS环境安装一、运行环境二、ROS-melodic安装2.1 设置软件源2.2 设置密钥2.3 安装ROS2.4 环境设置2.5 安装ROS的依赖环境2.6 初始化rosdep三、建立工作空间测试一、运行环境 树莓派4B-4G、VMware15系统都为ubuntu18.04xshell 使用时,通过xshell同时…

10-1.WPF模板

10-1.WPF模板 控件由“算法内容”和“数据内容”决定 算法内容:指控件能展示哪些数据、具有哪些方法、能激发什么事件等,简而言之是控件的功能,一组相关逻辑数据内容:控件所展示的具体数据是什么 在WPF中,模板将数据…

Redis数据类型

1.String(字符串) 在任何一种编程语言中,字符串都是最基础的数据结构,在Redis中String是可以修改的称之为:动态字符串(简称SDS) Redis的内存分配机制: - 当字符串的长度小于1MB时,每次扩容都是加倍现有的空间 - 如果字…

离散数学:图的基本概念

本帖子讨论图的基本概念,这一章,我们将利用有序对和二元关系的概念定义图。图分为了无向图和有向图,他们有共性也有区别,请大家注意体会,用联系和辩证的观点去认识。 1、无向图和有向图 注意无向图和有向图的表示&…

Servlet【 ServletAPI中的会话管理Cookie与Session】

Servlet【 ServletAPI中的会话管理Cookie与Session】🍒一.回顾Cookie与Session🍎1.1 Cookie🍎1.2 Session🍎1.3Cookie 和 Session 的区别🍒二.Servlet会话管理操作🍎2.1核心方法🍒三.常见案例实…

【服务器搭建】教程一:没钱买服务器怎么玩 进来看

前言: 最近看到有一些网上的大佬把自己的爱心网页(没领到的小伙伴看一下前几篇文章)部署到了自己的服务器上,使得可以直接通过链接就实现访问。属实不错! 自己内心就产生了这样一个想法:购买一台服务器&a…

Whisper论文阅读笔记

Whisper论文阅读笔记Robust Speech Recognition via Large-Scale Weak Supervision1. 引言2. 方法2.1 数据处理2.2 模型2.3 多任务设置2.4 训练细节3. 实验结果3.1 Zero-shot3.2 多语言语音识别3.3 多语言机器翻译3.4 语种检测3.5 对加性噪声的鲁棒性3.6 长语音转录3.7 人类基线…

基于向量加权平均值的高效优化算法(Matlab代码实现)

📝个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,…

学习 RabbitMQ 这一篇就够了

文章目录一、MQ相关概念二、RabbitMQ相关概念三、安装四、HelloWorld五、工作队列5.1、轮询分发消息5.2、消息应答5.2.1、自动应答5.2.2、手动应答5.2.3、消息自动重新入队5.2.4、消息手动应答代码5.3、持久化5.4、不公平分发(能者多劳)5.5、预取值5.6、…