Files
obsidian_vault/技术研究/OpenIM/OpenIM源码分析之一---项目部署与结构.md
2025-12-27 11:44:50 +08:00

54 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
opp_publish_id: "944175079304876032"
opp_publish_status: published
opp_publish_title: OpenIM源码分析之一---项目部署与结构
---
# 开始
部署一套体验环境,参考[官方指引](https://docs.openim.io/zh-Hans/guides/gettingStarted/dockerCompose),Docker方式当然最便捷的。不过我们的目的当然不仅是,体验一下发个消息,对于项目结构本身依然还是0认知,通过源码部署,依照[官方文档-源码部署](https://docs.openim.io/zh-Hans/guides/gettingStarted/imSourceCodeDeployment),完成部署也不是什么难事。那么让我们从这里开始,一起走进OpenIM项目。
# 部署结构
## 依赖服务安装
OpenIM已经准备好的依赖组件的Docker服务配置,位于项目[open-im-server](https://github.com/openimsdk/open-im-server)下。
`$ git clone https://github.com/openimsdk/open-im-server && cd open-im-server
| 组件类别 | OpenIM依赖以下组件 | 运维组件 | 测试组件 |
| ---- | ------------------------------------------ | ------------------------------------- | ------------------------ |
| 组件列表 | mongodb<br>redis<br>kafka<br>MinIO<br>etcd | prometheus<br>alertmanager<br>grafana | admin-front<br>web-front |
| 可选 | 必选 | 可选 | 可选 |
| 启动命令 | `$ docker compose up -d` | `$ docker compose --profile m up -d` | 跟随依赖组件启动 |
### 文档补充说明:
* [Minior的访问配置](https://docs.openim.io/zh-Hans/guides/gettingStarted/imSourceCodeDeployment#23-%E8%AE%BE%E7%BD%AE%E5%A4%96%E7%BD%91-ip-%E6%88%96%E5%9F%9F%E5%90%8D%E5%8F%82%E8%80%83-nginx-%E9%85%8D%E7%BD%AE)Minio主要用于存储用户对话过程中的文件,而这些请求是直接进minio的,因此需要配置域名,或用户可以访问的IP地址。若是内网,给Minio一个内网IP即可。端口号默认Docker启动Minio使用的端口,映射到了主体的10005,具体查看minio.yml配置确认。
* [Go的代理](https://docs.openim.io/zh-hans/guides/gettingstarted/imsourcecodedeployment#24-%EF%B8%8F-%E5%88%9D%E5%A7%8B%E5%8C%96)golang语言没限制,不过golang依赖库的机制对github有非常强的依赖,大部分的依赖库都在github上,源码运行,需要配置go依赖的代理。
## 核心服务
在上面的准备基础完成之后,使用openim的指定的编译工具,mage start就可以直接启动核心服务了,这里看原文,不赘述。
如果自己的系统需要IM,那么到此为止,便可以基于OpenIM,来进行二次开发了。
但如果你想直接上手试一下消息,就需要下面的AppServer演示服务接口。
## AppServer演示接口服务
核心服务中,有USER的逻辑,但是却没有账号体系,因此上面的web-front和admin-front项目,可以打开,但却没办法登录,这需要另外的实现账号机制的后端的API服务。这个服务即AppServer,需要另外部署。
服务获取:`$ git clone https://github.com/openimsdk/chat&& cd chat`
如果您是在本地部署,那么admin-front的默认端口应该是11002,浏览器打开http://localhost:11002即可。
系统初始的管理员账号与密码是:chatAdmin/chatAdmin。
# 核心服务结构
* 主服务:
* openim-api:对客户端曝露的核心服务,http协议,信息查询,与消息发送请求。
* openim-msggateway:对客户端曝露的核心服务,ws协议,处理客户端实时消息发送与监听。
* openim-cmdutil
* openim-crontask
* openim-msgtransfer
* openim-push
* 底层服务
* openim-rpc-auth
* openim-rpc-conversation
* openim-rpc-friend
* openim-rpc-group
* openim-rpc-msg
* openim-rpc-third
* openim-rpc-user
主服务与底层服务之间的关系
![|center|800](https://picbed-1253586264.cos.ap-guangzhou.myqcloud.com/uPic/2025062316-5Yrpqe.jpg)
# SDK结构
OpenIM的SDK支持多平台,核心使用golang编写,封装了对API服务请求,与长链接的处理逻辑。而各端的封装主要完成了客户端参数配置,与桥接Golang的部分。
![800](https://picbed-1253586264.cos.ap-guangzhou.myqcloud.com/uPic/2025062316-QpVmoW.jpg)