# im-server **Repository Path**: juggleim/im-server ## Basic Information - **Project Name**: im-server - **Description**: A high-performance IM server - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 2 - **Created**: 2024-08-26 - **Last Updated**: 2025-06-23 ## Categories & Tags **Categories**: im **Tags**: IMServer, IM, chat, Messenger, Go语言 ## README # JuggleIM 一个高性能,可扩展的开源 IM 即时通讯系统。

[![](https://img.shields.io/github/license/juggleim/im-server?color=yellow&style=flat-square)](./LICENSE) [![](https://img.shields.io/badge/go-%3E%3D1.20-30dff3?style=flat-square&logo=go)](https://github.com/juggleim/im-server) ## 社群讨论 如果对 IM 感兴趣、有集成问题讨论的朋友,非常欢迎加入社群讨论~ [Telegram 中文群](https://t.me/juggleim_zh)、[Telegram English](https://t.me/juggleim_en)、[添加好友加入微信群](https://downloads.juggle.im/xiaoshan.jpg) _备注:由于微信群二维码有时间限制,加入微信讨论可优先加 **小山** 微信好友,由 Ta 邀请进群组_ ## 特性 * 灵活的部署模式,支持公有云,私有云,托管云等部署形态。 * Protobuf+Websocket 实现长连接,低流量,高性能,且在网络不佳的环境下具备较好的连通性。 * 性能强大,专业版支持集群部署,无限横向扩展,能支撑亿级日活应用。 * 协议及数据全链路加密,无数据泄露风险。 * 提供方便的运维工具和管理后台,简单好维护。 * 支持Android,iOS,Web,PC 等多平台 SDK,提供快捷集成的Demo和文档。 * 支持多端同时在线和消息多端同步,确保状态多端一致。 * 支持全球链路加速,可服务全球级应用。 * 提供丰富的API和WebHook,可方便的与现有系统集成。 * 支持万人,十万人大群,轻松沟通,不丢消息。 * 支持无上限直播聊天室。 * 具备 AI 机器人对接能力,可轻松对接大模型。 ## 快速部署体验 部署文档(https://www.juggle.im/docs/guide/deploy/quickdeploy/) ## 手动部署 ### 1. 安装并初始化 MySQL #### 1) 安装 MySQL 略 #### 2) 创建DB实例 ``` CREATE SCHEMA `jim_db` ; ``` #### 3) 初始化表结构 初始化表结构的sql文件在 im-server/docs/jim.sql , 导入命令如下: ``` mysql -u{db_user} -p{db_password} jim_db < jim.sql ``` ### 2. 安装MongoDB(可选) 略 ### 3. 启动im-server #### 1) 运行目录 运行目录为 im-server/launcher,其中 conf 目录下存放的是配置文件,logs目录下是服务的运行日志目录。 #### 2) 编辑配置文件 配置文件位置:im-server/launcher/conf/config.yml ``` defaultPort: 9003 # im-server 默认监听端口 nodeName: testNode # im-server 的节点名称 nodeHost: 127.0.0.1 # im-server 的节点IP msgStoreEngine: mysql # 配置用什么存储来存消息数据,有两种存储引擎可选。mysql:使用mysql存储消息数据(默认);mongo:使用MongoDB存储消息数据 log: logPath: ./logs # 运行日志所在目录 logName: jim-info # 运行日志的前缀名 visual: false # 是否开启可视化日志。开启后,会同步将日志数据写入一个 KV 数据库,在管理后台”开发工具->连接排查“处,可界面化查询日志; mysql: # im-server 所用的MySQL相关配置 user: root password: 123456 address: 127.0.0.1:3306 name: im_db # mongodb: # im-server 所用的MongoDB相关配置,用于存储消息数据。该配置为可选,在 msgStoreEngine 配置为 "mongo" 时生效; # address: 127.0.0.1:27017 # name: jim_msgs # mongodb 表空间名称,im-server启动后,会自动在这个空间下初始化collection; # apiGateway: # im-server 的服务端 API 端口, 供业务APP的服务端调用;非必填项,默认复用 defaultPort 作为默认端口 # httpPort: 9001 # connectManager: # im-server 长连接端口;非必填项,默认复用 defaultPort 作为默认端口 # wsPort: 9003 adminGateway: # im-server 自带的管理后台地址,默认账号密码是:admin/123456 httpPort: 8090 ``` #### 3) 启动im-server 在 im-server/launcher 目录下,执行如下命令: ``` go run main.go ``` #### 4) 配置外网访问地址(域名/IP) 需要配置外网地址的端口列表: | 端口 | 协议类型 | 说明 | | ----:|:-----:|:----| | 9003| http | 服务端 API 服务监听端口,用于业务服务器,例如 jugglechat-server 配置文件中需要配置这个地址;| | 9003| websocket | IM 长连接监听端口,用于客户端SDK与IM 服务建立长连接(websocket) | | 8090| http | IM 服务的管理后台监听端口,默认账号和密码:admin/123456 | 配置外网地址的方法,这里不详细描述,大家可以根据自身环境来灵活配置(常用方式: 挂公网ip,nginx反向代理,负载均衡等). 注: 如果仅内网调试使用,可以不配置外网IP/域名,仅使用内网IP即可 #### 5) 将长连接地址配置到IM系统中 配置方式很简单,在数据库中插入一条配置数据即可: ``` insert into globalconfs (conf_key, conf_value)values('connect_address', '{"default":["127.0.0.1:9002"]}') ``` 其中,将 127.0.0.1 替换成该机器的内网IP,或对外的公网IP/域名,这个是客户端SDK的长连接地址,将有导航服务(8081)下发给客户端SDK; ### 4. 创建应用(租户) JuggleIM 本身是一套多租户的系统,可以在一套服务中创建多个appkey(租户),租户之间的数据相互隔离,互不影响。 #### 方式一:登录管理后台,创建租户 待完善 #### 方式二:通过管理API,创建租户 其中,app_key 用于指定租户的标识,可自定义,要求在系统内唯一;app_name为租户的名称,可自定义; 注:这里用的是IM服务管理后台(8090)的地址,127.0.0.1 替换成im服务的内网IP,或公网IP/域名。 ``` curl --request POST \ --url http://127.0.0.1:8090/admingateway/apps/create \ --data '{ "app_key":"appkey", "app_name":"appname" }' ``` 响应数据示例: ``` { "code": 0, "msg": "success", "data": { "app_name": "appname", "app_key": "appkey", "app_secret": "hciKcc6sXRDjYUQp" } } ``` ### 5. 登入管理后台 管理后台地址:http://127.0.0.1:8090 默认账号/密码: admin/123456 登入管理后台后,即可看到创建的应用列表,点击其中一个应用,可以对其配置进行修改和维护。 ### 6. 业务服务器/客户端集成 这里汇总下业务集成所需的各项配置: 1) 业务服务器集成 | 配置项 | 示例|备注 | | ----: |:-----:|:----| |IM 服务端 API 地址 | http://127.0.0.1:9003 | 供业务服务器访问IM服务的API接口地址,使用该接口可以注册IM用户,创建群,发送系统消息等,接口文档参考:https://www.juggle.im/docs/server/api/| |app_key | appkey1 |应用的租户标识,在第4步中创建,可自定义,但要保证在系统内唯一 | |app_secret| hciKcc6sXRDjYUQp | 应用对应的鉴权秘钥,创建应用时自动生成。如果想自定义的话,确保配置为16位的字符串。注意:确保该秘钥仅在业务服务器端使用,不要泄露到客户端。 | 2) 客户端SDK集成 | 配置项 | 示例|备注 | | ----: |:-----:|:----| |IM 服务的连接地址| ws://127.0.0.1:9003| IM 的连接地址,客户端SDK初始化时需要传入,参考文档:https://www.juggle.im/docs/client/quickstart/android/ | |app_key|appkey1|应用的租户标识,确保与业务服务器端配置的保持一致。|