--- 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
redis
kafka
MinIO
etcd | prometheus
alertmanager
grafana | admin-front
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)