最近不少朋友在问,公司想搞个内部聊天工具,又不想把数据放在别人服务器上,有没有靠谱的开源方案。我前阵子刚好折腾了一遍野火IM,从买服务器到跑通手机端,前后踩了不少坑,今天就把整个过程捋一遍,给想自己动手搭野火IM即时通讯系统的朋友做个参考。这玩意儿说白了就是一套开源的聊天服务端加客户端,支持单聊群聊、消息漫游、音视频通话这些常用功能,搭好之后数据全在自己手里,适合有点 Linux 基础、愿意折腾的人。下面按我实际操作的顺序来讲,尽量说人话。

我一开始图省事,拿了个 1 核 2G 的轻量服务器就想跑,结果编译到一半直接卡死,后来换成 2 核 4G 才顺畅。所以第一件事,服务器配置别太抠,野火IM服务端虽然不算特别吃资源,但编译和跑数据库的时候内存小了真扛不住。系统我用的 Ubuntu 20.04,比较稳,CentOS 也行,看个人习惯。
环境方面主要是 JDK、Maven、MySQL 和 Redis 这几样。JDK 建议 8 或 11,别装太新的版本,我一开始上了个 17,编译报了一堆兼容问题,换回 11 才消停。MySQL 用 5.7 以上,建库的时候字符集记得选 utf8mb4,不然表情符号存进去会乱码,这个坑我踩过,聊天记录里全是问号。Redis 装好默认配置基本够用。野火IM搭建前把这些依赖装齐,后面能省不少事。
源码直接从官方仓库拉就行,注意分支别选错,我一开始拉了个开发分支,跑起来各种报错,后来换到稳定版才正常。拉下来之后先别急着改配置文件,先按官方文档把 Maven 依赖下完,编译一遍看看能不能过。第一次编译时间挺长,耐心等,中途别断网。
编译过了再去改数据库连接、Redis 地址这些配置。这里提醒一句,野火IM的配置文件有好几个地方都要改,服务端一个、推送服务一个,别漏了。我第一次就改了一个,结果消息能发出去但收不到推送,排查半天才发现是另一个配置文件没动。数据库初始化脚本记得跑一遍,表结构会自动建好,省得手动敲。

服务端跑起来之后,客户端可以用官方提供的 Android、iOS 和 Web 端。我主要试了 Web 端和安卓端,Web 端改一下服务器地址就能连,安卓端需要自己打包,用 Android Studio 打开改配置再编译,稍微麻烦点但照着文档走也能搞定。野火IM的客户端界面比较朴素,功能倒是齐全,单聊群聊、发图片文件、消息撤回都有,日常办公够用。
实际用下来,消息延迟很低,局域网内基本秒到,公网环境下也还行。音视频通话功能需要额外配置 Turn 服务,这块我没深入折腾,有需求的朋友可以再研究。另外野火IM支持多端同时在线,消息同步做得不错,手机和电脑切换着用不别扭。整体来说,这套开源即时通讯系统完成度挺高,适合想自建聊天工具又不想从零造轮子的团队。搭的过程中遇到问题多翻官方文档和社区 issue,大部分坑前人都踩过了。