标签搜索

目 录CONTENT

文章目录

即时通讯之OpenIM

小小城
2022-05-04 / 0 评论 / 0 点赞 / 23 阅读 / 10,155 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

即时通讯之OpenIM

一、简介

  • Open-IM是由IM技术专家打造的开源的即时通讯组件。Open-IM包括IM服务端和客户端SDK,实现了高性能、轻量级、易扩展等重要特性。开发者通过集成Open-IM组件,并私有化部署服务端,可以将即时通讯、实时网络能力快速集成到自身应用中,并确保业务数据的安全性和私密性。
  1. 项目文档:https://doc.rentsoft.cn/
  2. github:https://github.com/OpenIMSDK/Open-IM-Server

二、部署文档

docker部署

  1. 服务器配置
  • Linux系统,当前可用内存2G及以上
  1. docker
  • 要求docker版本1.13以上,docker-compose版本1.22以上
  1. 一键部署 如果确定是首次安装,可以直接采用如下命令完成后续4-7的安装,不需要单步执行
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive; cd Open-IM-Server/script ; chmod +x *.sh ; ./env_check.sh;cd .. ; docker-compose up -d;cd script ; ./docker_check_service.sh
  1. 克隆
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive
  1. 检测环境
cd Open-IM-Server/script ; chmod +x *.sh ; ./env_check.sh

image

  • 目前仅支持Linux系统,并且保证当前可用内存在2G以上,系统才能正常运转。在生产环境中,建议可用内存在4G以上。
  1. 拉取&启动
cd .. ; docker-compose up -d
  1. 检查
cd script ; ./docker_check_service.sh

image-1651670004573

  • 如图所示,表示正常启动。
  1. IM开放端口(OpenIM端口需要注意,中间经历过一次代码优化)
    截屏2022-05-04 21.14.06
  • 注:如果使用nginx做反向代理,则只需要开放443端口即可
  1. nginx配置
  • 注意修改域名、https证书,以及ip
  • /data/test/Pc-Web-Demo/build/; 这个资源需要自己根据Web demo编译出来。
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen 443 ssl;
        server_name im.forevers.top;

        #ssl on;
        ssl_certificate /etc/nginx/conf.d/ssl/open-im-test.rentsoft.cn.crt;
        ssl_certificate_key /etc/nginx/conf.d/ssl/open-im-test.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 /etc/nginx/open_im/;
                index index.html;
                try_files $uri $uri/ /index.html;
        }
    location /auth {
                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://114.115.178.178:10002;
    }
    location /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://114.115.178.178:10004;

    }
    location /jssdk_gateway {
                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://114.115.178.178:10003;
    }
    location /msg_gateway {
                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://114.115.178.178:10001;
    }
    location /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://114.115.178.178:7880;
        }
    location /user {
                proxy_http_version 1.1;
                proxy_set_header X-real-ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://114.115.178.178:10002;

        }
        
    location /group {
                proxy_http_version 1.1;
                proxy_set_header X-real-ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://114.115.178.178:10002;

        }
    location /manager {
                proxy_http_version 1.1;
                proxy_set_header X-real-ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://114.115.178.178:10002;

        }
     location /third {
                proxy_http_version 1.1;
                proxy_set_header X-real-ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://114.115.178.178:10002;

        }
    location /cms {
                proxy_http_version 1.1;
                proxy_set_header X-real-ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://114.115.178.178:10006;

        }
    location ~^/storage {
                 proxy_buffering off;
                 proxy_set_header Host $http_host;
                 rewrite ^/storage/(.*)$ /$1 break;
                 proxy_pass http://114.115.178.178:10005;
           }
}

server {
        listen 80;
        server_name im.forevers.top;
        rewrite ^(.*)$ https://${server_name}$1 permanent;
        #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 /usr/share/nginx/html/;
        #index index.html;
        #try_files $uri $uri/ /index.html;
}

}
  1. 配置修改
  • 默认的第三方服务使用了OpenIM的账号(包括对象存储cos,推送jpush,阿里云短信验证码,qq邮箱验证码),请在config/config.yaml中自行修改。

  • 注册配置

#是否启动demo,如果自身没有账号体系,设置为true
demoswitch: true
demo:
  #demo对外服务端口,默认即可,需要开放此端口或做nginx转发
  openImDemoPort: [ 10004 ]
  alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改
    accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7
    accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV
    signName: 托云信息技术
    verificationCodeTemplateCode: SMS_226810164
  superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代
  #  second
  codeTTL: 300
  mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改
    title: "openIM"
    senderMail: "765567899@qq.com"
    senderAuthorizationCode: "gxyausfoevlzbfag"
    smtpAddr: "smtp.qq.com"
    smtpPort: 25   #需开放此端口 出口方向
  • 对象存储配置
redential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改
  tencent:
    appID: 1302656840
    region: ap-chengdu
    bucket: echat-1302656840
    secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC
    secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe
  minio: #MinIO 发送图片、视频、文件时需要,请自行申请后替换,必须修改。 客户端初始化InitSDK,中 object_storage参数为minio
    bucket: openim
    location: us-east-1
    endpoint: http://127.0.0.1:10005 #minio外网ip 这个ip是给客户端访问的
    endpointInner: http://127.0.0.1:10005 #minio内网地址 如果im server 可以通过内网访问到 minio就可以填写
    endpointInnerEnable: true #是否启用minio内网地址 启用可以让桶初始化,IM server连接minio走内网地址访问
    accessKeyID: user12345
    secretAccessKey: key12345

  • 离线推送配置
jpns: #极光推送 在极光后台申请后,修改以下四项,必须修改
    appKey: cf47465a36659608e7e
    masterSecret: 0223f3832947a236ee5
    pushUrl: "https://api.jpush.cn/v3/push"
    pushIntent: "intent:#Intent;component=io.openim.app.enterprisechat/io.openim.app.enterprisechat.MainActivity;end"
  1. 重启服务
docker-compose down; docker-compose up -d

docker部署-更新镜像

  • 一键更新
  • 如果本地配置没有任何修改,可以直接采用如下命令完成1-5步
docker-compose down ; git checkout main -f ; git pull -f ; docker-compose pull;chmod +x script/*.sh ; docker-compose up -d; cd script ; ./docker_check_service.sh
  1. 关闭服务
cd Open-IM-Server ; docker-compose down
  1. 拉取最新配置文件和脚本文件
git pull
  1. 拉取新的镜像
docker-compose pull
  1. 重新启动服务
chmod +x script/*.sh ; docker-compose up -d
  1. 检查
cd script ; ./docker_check_service.sh

docker 部署注意事项

  1. 系统和环境
  • 目前只支持Linux系统,其他系统请修改脚本。
  • 可用内存在2G以上,请调用./env_check.sh检测。
  1. 更新
  • 在git pull时,确保拉取了最新的配置,特别是对于改动了本地配置文件的开发者,需重点关注。
  1. build
  • 尽量不要混合启动,自行build,然后通过docker-compose启动会存在问题。因为docker映射,导致本地二进制文件、配置文件不一致,造成混乱。

源码部署

  • 服务器配置 Linux系统 8G及以上内存 (目前仅支持linux下的部署,其他系统的部署需要自行修改脚本)
  • 安装组件:Open-IM-Server依赖五大开源组件:Etcd、MySQL、MongoDB、Redis、Kafka,在使用源码部署Open-IM-Server 前,请确保五大组件已安装。如果没有安装以上组件,建议使用上文的docker部署。
  1. 安装go语言环境
wget -c https://dl.google.com/go/go1.17.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
  • 设置环境变量:
export PATH=$PATH:/usr/local/go/bin

source /etc/profile
  • 开启go代理:
go env -w GO111MODULE=on

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
  1. 克隆项目
git clone https://github.com/OpenIMSDK/Open-IM-Server.git 
  • 使用此命令拉取项目后,进入cmd/Open-IM-SDK-Core,使用git checkout main将Open-IM-SDK-Core子仓库切换到main分支下,然后进入cmd/Open-IM-SDK-Core/internal/sdk_advanced_function,同样使用git checkout main将sdk_advanced_function子仓库切换到main分支下

  • (注:如果项目中cmd/Open-IM-SDK-Core这个子模块无法正常拉取,文件夹为空,可前往https://github.com/OpenIMSDK/Open-IM-SDK-Core,获取最新tag,(Open-IM-SDK-Core项目下的internal/sdk_advanced_function如果为空,前往https://github.com/OpenIMSDK/sdk_advanced_function.git提取main分支下代码放置其中)放置于cmd/下,编译即可)

  1. 修改config.yaml,配置五大组件的连接参数
cd Open-IM-Server
vim config.yaml
  • 修改 Etcd 配置项
etcd:
  etcdAddr: [ 127.0.0.1:2379 ]
  • 修改MySQL配置项
mysql:
  dbAddress: [ 127.0.0.1:3306 ]
  dbUserName: 
  dbPassword: 
  • 修改MongoDB配置项
mongo:
  dbAddress: [ 127.0.0.1:27017 ]
  dbUserName:
 dbPassword:
  • 修改 Redis配置项
redis:
 dbAddress: [ 127.0.0.1:6379 ]
 dbPassWord: 
  • 修改 Kafka 配置项
kafka:
 ws2mschat:
   addr: [ 127.0.0.1:9092 ]
 ms2pschat:
   addr: [ 127.0.0.1:9092 ]
  • 每种RPC数量默认为1,如果需要调整RPC数量,修改config.yaml中的配置项rpcport对应的port信息,port个数代表对应rpc服务的进程数。比如openImUserPort: [ 10100,10101 ]表示本机会启动两个open_im_user,port分别为10100,10101
  1. 构建
cd Open-IM-server/script
chmod +x *.sh
./build_all_service.sh
  1. 启动
./start_all.sh
  1. 检查
./check_all.sh

image-1651671421554

Web Demo 部署 和 Electron Demo 部署

  1. 在线测试
  • 测试地址 https://open-im-online.rentsoft.cn

  • 测试方式:双击在线化办公打开配置选项
    image-1651671501346

  • 修改配置中ip为自己已部署OpenIM Server的服务器IP,确认修改
    image-1651671523256

  • 目前需要自己的服务支持https;注意此处的端口路由信息
    截屏2022-05-04 21.39.36

  1. 自己搭建
  • 环境:Linux:x86,npm -v 8.5.0,node -v : v16.14.1,Docker version 20.10.14, build a224086 ,docker-compose version 1.25.0, build 0a186604。
  • 拉取项目
git clone https://github.com/OpenIMSDK/OpenMetaOffice-Electron.git
  • 依赖(需要保证服务器配置,否则可能会失败,同时可以更新npm源为国内源)
npm install
  • 修改web配置
    配置文件位置为:src/config/index.ts
    项目默认配置地址为OpenIM测试服务器地址,若您已部署OpenIM-Server在自己的服务器上,需要修改为对应地址,否则可跳过此步骤。
    项目默认使用腾讯云COS服务,可根据需求自行更改文件存储服务。
//    注册服务地址
export const AXIOSURL = "http://121.37.25.71:10004"
//    axios请求超时时间
export const AXIOSTIMEOUT = 60000
//    OpenIM-Server JS SDK port
export const IMURL = "ws://121.37.25.71:10003"
//    获取cos临时密钥及调用管理员API地址
export const ADMINURL = "http://121.37.25.71:10002"
//    cos 缩略图格式配置
export const PICMESSAGETHUMOPTION = "?imageView2/1/w/200/h/200/rq/80"
//    默认语言
export const LANGUAGE = "zh-cn"
  • 修改electron配置
    配置文件位置为:electron/config/index.ts
    注意:上方提到的配置文件也需要修改。
// OpenIM-Server SDK API port
export const openIMApiAddress = "http://121.37.25.71:10002"
// OpenIM-Server SDK ws port
export const openIMWsAddress = "ws://121.37.25.71:10001"
// 客户端本地占用端口
export const sdkWsPort = "7788"
  • 运行调试Web

默认运行端口为3000

npm run start:renderer
  • 运行调试Electron

SDK本地需要占用一个端口(默认7788)

npm run start:main
  • 打包部署Web

打包生成文件在项目根目录build文件夹下,将文件夹内容上传服务器部署即可。

npm run build:renderer
  • 打包部署Electron

打包生成exe和dmg安装程序在项目根目录dist文件夹下,运行即可。

npm run build:main

备注:如果想要在mac上运行桌面Electron需要在Mac上进行编译

0

评论区