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

简介: IM开源项目OpenIM部署文档-从准备工作到nginx配置2022-11-14 22:27·OpenIM一、准备工作运行环境linux系统即可, Ubuntu 7.5.0-3ubuntu1~18.04最优图片视频文件存储支持cos/MinIOhttps/wss协议1. 需申请域名或者子域名(web im端登录注册及im 服务端使用)建议:web.xx.xx 2. 若使用MinIO作为对象存储,建议:storage.xx.xx 3. 管理后台子域名,建议:admin.xx.xx 4. 部署nginx,并配置证书。离线推送(app被杀死或未启动时推送)国内申请

一、准备工作
运行环境

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 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项目,广泛用于政企协同办公场景。

微信图片_20221115191504.jpg

github地址:
https://github.com/OpenIMSDK/Open-IM-Server

开发者中心:https://doc.rentsoft.cn/#/

平台支持:Android iOS Uniapp Flutter Electron Web reactNative等几乎所有平台

web端基于wasm的sdk即将发布

pc支持信创环境:银河麒麟 UOS等;

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

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

目录
相关文章
|
3月前
|
缓存 自然语言处理 监控
基于通义大模型的智能客服系统构建实战:从模型微调到API部署
本文详细解析了基于通义大模型的智能客服系统构建全流程,涵盖数据准备、模型微调、性能优化及API部署等关键环节。通过实战案例与代码演示,展示了如何针对客服场景优化训练数据、高效微调大模型、解决部署中的延迟与并发问题,以及构建完整的API服务与监控体系。文章还探讨了性能优化进阶技术,如模型量化压缩和缓存策略,并提供了安全与合规实践建议。最终总结显示,微调后模型意图识别准确率提升14.3%,QPS从12.3提升至86.7,延迟降低74%。
1002 14
|
3月前
|
前端开发 搜索推荐 NoSQL
错过就亏大了!这款开源 IM 项目,功能强大、部署简单,适合私有化部署,开发者必收藏!
Lumen IM 是一个基于 Vue3 + Naive UI 前端与 Go 后端的开源即时通讯系统,支持私聊、群聊、文件传输、消息撤回等功能,适用于企业内部沟通及开发者学习。项目采用 WebSocket 实现即时消息推送,技术栈包括 MySQL、Redis 和 Minio 等,确保高效稳定运行。界面简约美观,操作便捷,并支持笔记功能和个性化设置。无论是企业使用还是二次开发,Lumen IM 都是一个优质选择
184 0
|
7月前
|
自然语言处理 Prometheus 监控
基于DeepSeek的智能客服系统实战:从开发到部署
本文详细介绍如何将基于DeepSeek的智能客服系统从开发到部署,涵盖服务器选择、环境配置、代码部署及Web服务器设置。通过具体案例和代码示例,讲解系统上线步骤,并介绍使用Prometheus、Grafana等工具进行性能监控的方法。此外,针对高并发、API调用失败等常见问题提供解决方案,确保系统的稳定运行。最后强调数据安全与隐私保护的重要性,帮助读者全面掌握智能客服系统的部署与维护。
|
7月前
|
人工智能 自然语言处理 BI
基于阿里云人工智能平台的智能客服系统开发与部署
随着人工智能技术的发展,智能客服系统成为企业提升服务效率和用户体验的重要工具。阿里云提供包括自然语言处理(NLP)、语音识别(ASR)、机器学习(PAI)等在内的完整AI平台,助力企业快速构建智能客服系统。本文将通过电商平台案例,展示如何基于阿里云AI平台从零开始开发、部署智能客服系统,并介绍其核心优势与最佳实践,涵盖文本和语音客服、知识库管理及数据分析等功能,显著提升客户服务效率和用户满意度。
|
11月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
604 1
|
11月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
3273 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
11月前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
86 4
|
JavaScript 前端开发 应用服务中间件
Nginx——一个域名下部署多个Vue项目
如何在同一域名下部署第二个Vue项目而不影响现有项目:更新`vue.config.js`,设置`publicPath`为`/screen/`。修改Vue Router的`base`为`screen`。在Nginx配置中添加新location `/screen`,指向第二项目`dist`目录。测试访问`http://<域名>/screen/`。别忘了检查并修复任何遗漏的配置,如数据看板默认设置。
702 2
|
存储 SQL 测试技术
基于SpringBoot+Vue交通管理在线服务系统的开发(源码+部署说明+演示视频+源码介绍+lw)(2)
基于SpringBoot+Vue交通管理在线服务系统的开发(源码+部署说明+演示视频+源码介绍+lw)
219 2
|
JavaScript Java 关系型数据库
基于SpringBoot+Vue交通管理在线服务系统的开发(源码+部署说明+演示视频+源码介绍+lw)(1)
基于SpringBoot+Vue交通管理在线服务系统的开发(源码+部署说明+演示视频+源码介绍+lw)
167 1

热门文章

最新文章