{"id":20711745,"url":"https://github.com/juggleim/im-server","last_synced_at":"2025-05-15T05:03:27.847Z","repository":{"id":254809858,"uuid":"847594510","full_name":"juggleim/im-server","owner":"juggleim","description":"A high-performance IM server.","archived":false,"fork":false,"pushed_at":"2025-04-08T03:30:23.000Z","size":5419,"stargazers_count":1945,"open_issues_count":1,"forks_count":277,"subscribers_count":205,"default_branch":"master","last_synced_at":"2025-04-14T05:17:19.248Z","etag":null,"topics":["chat","golang","im","imserver","messenger","sdk"],"latest_commit_sha":null,"homepage":"https://www.juggle.im","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juggleim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-26T07:01:43.000Z","updated_at":"2025-04-14T04:49:13.000Z","dependencies_parsed_at":"2024-09-18T05:14:03.424Z","dependency_job_id":"223af107-3994-47e1-a1aa-b827cd6fb002","html_url":"https://github.com/juggleim/im-server","commit_stats":null,"previous_names":["juggleim/im-server"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juggleim%2Fim-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juggleim%2Fim-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juggleim%2Fim-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juggleim%2Fim-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juggleim","download_url":"https://codeload.github.com/juggleim/im-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248824695,"owners_count":21167345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat","golang","im","imserver","messenger","sdk"],"created_at":"2024-11-17T02:16:48.503Z","updated_at":"2025-04-14T05:17:27.350Z","avatar_url":"https://github.com/juggleim.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JuggleIM\n\n一个高性能，可扩展的开源 IM 即时通讯系统。\n\n\u003cp align=\"center\"\u003e\n\u003cimg align=\"left\" height=\"110\" src=\"./docs/logo.png\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e官网\u003c/strong\u003e: https://www.juggle.im\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e提问\u003c/strong\u003e: https://github.com/juggleim/im-server/issues\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e文档\u003c/strong\u003e: https://www.juggle.im/docs/guide/intro/\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/p\u003e\n\n[![](https://img.shields.io/github/license/juggleim/im-server?color=yellow\u0026style=flat-square)](./LICENSE)\n[![](https://img.shields.io/badge/go-%3E%3D1.20-30dff3?style=flat-square\u0026logo=go)](https://github.com/juggleim/im-server)\n\n## 社群讨论\n\n如果对 IM 感兴趣、有集成问题讨论的朋友，非常欢迎加入社群讨论～\n\n[Telegram 中文群](https://t.me/juggleim_zh)、[Telegram English](https://t.me/juggleim_en)、[添加好友加入微信群](https://downloads.juggle.im/xiaoshan.jpg)\n\n_备注：由于微信群二维码有时间限制，加入微信讨论可优先加 **小山** 微信好友，由 Ta 邀请进群组_\n\n## 特性\n\n* 灵活的部署模式，支持公有云，私有云，托管云等部署形态。\n* Protobuf+Websocket 实现长连接，低流量，高性能，且在网络不佳的环境下具备较好的连通性。\n* 性能强大，专业版支持集群部署，无限横向扩展，能支撑亿级日活应用。\n* 协议及数据全链路加密，无数据泄露风险。\n* 提供方便的运维工具和管理后台，简单好维护。\n* 支持Android，iOS，Web，PC 等多平台 SDK，提供快捷集成的Demo和文档。\n* 支持多端同时在线和消息多端同步，确保状态多端一致。\n* 支持全球链路加速，可服务全球级应用。\n* 提供丰富的API和WebHook，可方便的与现有系统集成。\n* 支持万人，十万人大群，轻松沟通，不丢消息。\n* 支持无上限直播聊天室。\n* 具备 AI 机器人对接能力，可轻松对接大模型。\n\n## 快速部署体验\n\n部署文档(https://www.juggle.im/docs/guide/quickdeploy/)\n\n## 手动部署\n\n### 1. 安装并初始化 MySQL\n\n#### 1) 安装 MySQL\n略\n\n#### 2) 创建DB实例\n```\nCREATE SCHEMA `jim_db` ;\n```\n\n#### 3) 初始化表结构\n初始化表结构的sql文件在  im-server/docs/jim.sql , 导入命令如下：\n```\nmysql -u{db_user} -p{db_password} jim_db \u003c jim.sql\n```\n\n### 2. 安装MongoDB(可选)\n略\n\n### 3. 启动im-server\n\n#### 1) 运行目录\n运行目录为 im-server/launcher，其中 conf 目录下存放的是配置文件，logs目录下是服务的运行日志目录。\n\n#### 2) 编辑配置文件\n\n配置文件位置：im-server/launcher/conf/config.yml\n```\nnodeName: testNode      # im-server 的节点名称\nnodeHost: 127.0.0.1     # im-server 的节点IP\nmsgStoreEngine: mysql   # 配置用什么存储来存消息数据，有两种存储引擎可选。mysql：使用mysql存储消息数据(默认)；mongo：使用MongoDB存储消息数据\n\nlog:\n  logPath: ./logs       # 运行日志所在目录\n  logName: jim-info     # 运行日志的前缀名\n  visual: false         # 是否开启可视化日志。开启后，会同步将日志数据写入一个 KV 数据库，在管理后台”开发工具-\u003e连接排查“处，可界面化查询日志；\n\nmysql:                  # im-server 所用的MySQL相关配置\n  user: root\n  password: 123456\n  address: 127.0.0.1:3306\n  name: im_db\n\nmongodb:                # im-server 所用的MongoDB相关配置，用于存储消息数据。该配置为可选，在 msgStoreEngine 配置为 \"mongo\" 时生效；\n  address: 127.0.0.1:27017\n  name: jim_msgs        # mongodb 表空间名称，im-server启动后，会自动在这个空间下初始化collection；\n\nconnectManager:         # im-server 长连接端口\n  wsPort: 9002\n\napiGateway:             # im-server 的服务端 API 端口, 供业务APP的服务端调用；\n  httpPort: 8082\n\nnavGateway:             # im-server 的导航端口，客户端SDK初始化时，需要到导航地址；\n  httpPort: 8081\n\nadminGateway:           # im-server 自带的管理后台地址，默认账号密码是：admin/123456\n  httpPort: 8090\n```\n\n#### 3) 启动im-server\n\n在 im-server/launcher 目录下，执行如下命令：\n```\ngo run main.go\n```\n\n#### 4) 配置外网访问地址(域名/IP)\n\n需要配置外网地址的端口列表：\n| 端口 | 协议类型 | 说明 | \n| ----:|:-----:|:----|\n| 8081| http | 导航服务的监听端口，用于客户端 SDK，SDK 初始化时需要传入这个地址；|\n| 8082| http | 服务端 API 服务监听端口，用于业务服务器，例如 jugglechat-server 配置文件中需要配置这个地址；|\n| 8090| http | IM 服务的管理后台监听端口，默认账号和密码：admin/123456 |\n| 9002| websocket | IM 长连接监听端口，用于客户端SDK与IM 服务建立长连接(websocket) |\n\n配置外网地址的方法，这里不详细描述，大家可以根据自身环境来灵活配置(常用方式: 挂公网ip，nginx反向代理，负载均衡等).\n\n注： 如果仅内网调试使用，可以不配置外网IP/域名，仅使用内网IP即可\n\n#### 5) 将长连接地址配置到IM系统中\n\n配置方式很简单，在数据库中插入一条配置数据即可：\n\n```\ninsert into globalconfs (conf_key, conf_value)values('connect_address', '{\"default\":[\"127.0.0.1:9002\"]}')\n```\n其中，将 127.0.0.1 替换成该机器的内网IP，或对外的公网IP/域名，这个是客户端SDK的长连接地址，将有导航服务(8081)下发给客户端SDK；\n\n### 4. 创建应用(租户)\nJuggleIM 本身是一套多租户的系统，可以在一套服务中创建多个appkey(租户)，租户之间的数据相互隔离，互不影响。\n\n#### 方式一：登录管理后台，创建租户\n待完善\n\n#### 方式二：通过管理API，创建租户\n\n其中，app_key 用于指定租户的标识，可自定义，要求在系统内唯一；app_name为租户的名称，可自定义； \n注：这里用的是IM服务管理后台(8090)的地址，127.0.0.1 替换成im服务的内网IP，或公网IP/域名。\n\n```\ncurl --request POST \\\n  --url http://127.0.0.1:8090/admingateway/apps/create \\\n  --data '{\n    \"app_key\":\"appkey\",\n    \"app_name\":\"appname\"\n}'\n```\n\n响应数据示例：\n\n```\n{\n\t\"code\": 0,\n\t\"msg\": \"success\",\n\t\"data\": {\n\t\t\"app_name\": \"appname\",\n\t\t\"app_key\": \"appkey\",\n\t\t\"app_secret\": \"hciKcc6sXRDjYUQp\"\n\t}\n}\n```\n### 5. 登入管理后台\n\n管理后台地址：http://127.0.0.1:8090    默认账号/密码： admin/123456\n\n登入管理后台后，即可看到创建的应用列表，点击其中一个应用，可以对其配置进行修改和维护。\n\n### 6. 业务服务器/客户端集成\n\n这里汇总下业务集成所需的各项配置：\n\n1) 业务服务器集成\n\n| 配置项 | 示例|备注 | \n| ----: |:-----:|:----|\n|IM 服务端 API 地址 |  http://127.0.0.1:8082 | 供业务服务器访问IM服务的API接口地址，使用该接口可以注册IM用户，创建群，发送系统消息等，接口文档参考：https://www.juggle.im/docs/server/api/|\n|app_key | appkey1 |应用的租户标识，在第4步中创建，可自定义，但要保证在系统内唯一 |\n|app_secret| hciKcc6sXRDjYUQp | 应用对应的鉴权秘钥，创建应用时自动生成。如果想自定义的话，确保配置为16位的字符串。注意：确保该秘钥仅在业务服务器端使用，不要泄露到客户端。 |\n\n2) 客户端SDK集成\n\n| 配置项 | 示例|备注 | \n| ----: |:-----:|:----|\n|IM 服务的导航地址 |  http://127.0.0.1:8081 | 客户端SDK初始化时需要传入，参考文档：https://www.juggle.im/docs/client/quickstart/android/ |\n|IM 服务的长连接地址| ws://127.0.0.1:9002| IM 的长连接地址，不需要配置到客户端，将有导航服务负责下发到SDK |\n|app_key|appkey1|应用的租户标识，确保与业务服务器端配置的保持一致。|\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuggleim%2Fim-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuggleim%2Fim-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuggleim%2Fim-server/lists"}