上线必须要做的事情
通过快速开始可以看出,野火IM是非常容易运行的,但是离系统最优化还是有一定的距离,还需要详细的配置和优化,这里就统一说明一下:
1. IM服务
- IM服务除了配置外,不要修改任何代码,如果修改了我们就不提供任何的技术支持了,因为我们不了解您修改的内容,所以就无法技术支持。
- 建立测试环境。野火IM是在不断的升级和完善中的,如果发现问题或者添加新功能,不能直接上线,需要先在测试环境跑通后再上生产环境。
- 升级时要选择业务低峰期,数据库要备份,以便于出现问题能够及时回滚。
- 升级时要注意migrate文件夹,这里面是数据库版本管理sql,一定要更新,注意程序会自动执行脚本,不需要手动执行,只需要更换这个文件夹就可以了。其它配置文件也要对比变化。
- IM服务要单独部署,不要和其它混合在一起。服务器要选择大内存的,因为野火IM缓存内容很多。
- 社区版不要使用nginx,IM服务的长短连接逻辑比较复杂,使用nginx很容易出问题。如果使用了nginx,我们不会进行技术支持。专业版可以按照专业版的说明文档使用nginx。
- IM服务的端口要对外开放80,1883,8083和8084(8083和8084是web用的,如果没有web可以不开放)的入访访问权限。18080端口对应用服务开放入访访问权限。出访权限只保留IM服务器需要出访的地址,比如推送服务,消息转发服务,机器人服务等,其余全部关闭。
- IM服务数据库不能使用H2,要切换成MySQL或其他关系型数据库。如果是专业版且预计未来业务量很大,需要启用mongodb。见如下配置
## 数据库类型。0 mysql;1 h2db;2 mysql+mongodb;3 kingbase-v8;4 dameng;5 sql server;6 postgresql;7 shentong。 embed.db 0
- 数据库要使用独立数据库,不要跟IM服务放置在一起(要注意IM服务与数据库服务器直接的ping值,如果过大还是放回一起吧),另外业务量大时数据库要使用SSD硬盘。如果业务压力非常大,数据库支撑不住,可以考虑升级到专业版。
- 数据库需要调优的,不能直接使用默认配置。可以百度一下MySQL参数调优。数据库的使用主要是写操作,读的较少(使用缓存缓存了大量的内容,只有服务启动时读取才比较多)。
- 对象存储不要选择内部文件服务器。内部文件服务器不具备正常商业对象存储的基本功能,仅仅是建议在开发时使用。上线要换成七牛云对象存储。如果是专业版还可以选择野火定制的私有存储Minio或其他更多主流云平台存储。另外就是使用七牛要自己购买服务,不要用我们提供的默认配置。
##是否使用七牛云存储。1使用七牛,0使用内部文件服务器,2使用阿里云对象存储,3野火私有对象存储,4对象存储网关,5腾讯云存储,6华为云存储, 7AWS S3。 media.server.use_qiniu 1
server.ip
要改成域名,这样以后要是更换服务器,平滑更换。IM服务的Server API密钥要修改默认值
##服务器管理接口密钥 上线前要修改 http.admin.secret_key 123456
Server API请求时不检查时间参数功能要关闭,这个是为了调试方便用的。
##这个地方上线前要改为false http.admin.no_check_time true
生成token的密钥要更改
##用来生产im token的私钥,只在服务器使用,客户端不用。正式使用时为了安全一定要修改这个值,切记切记 token.key testim
日志使用了log4j2,如果遇到业务压力较大,可以修改配置,提高日志效率。
对象存储下载支持https,配置文件中配置bucket domain为https格式
media.bucket_XXX_domain https://47.58.66.148/media //或 qiniu.bucket_XXX_domain https://cdn.domain.com
启动脚本
wildfirechat.sh
里需要配置JVM最大最小内存,请配置为您期望的大小。echo "请设置JVM参数Xmx和Xms!!!" JAVA_OPTS="$JAVA_OPTS -Xmx24G" JAVA_OPTS="$JAVA_OPTS -Xms24G"
2. 应用服务
如果要使用我们提供的应用服务,需要检查以下:
- 在配置文件中修改登录欢迎语言
- 配置短信,代码已经支持腾讯云和阿里云短信,后台开通短信配置就可以使用,如果是其它供应商需要二次开发
- 切换h2数据库到mysql或其他关系型数据库,注意不能用IM的数据库,需要另外创建一个应用服务的数据库。可以使用同一个数据库服务器。
- 应用服务使用了shiro鉴权组件,鉴权信息存储在数据库中,如果业务量比较大,建议引入RedisSessionDao。详情可以参考项目的readme。
- 调整用户名和用户昵称的生成方式,默认的方式不一定适合。
- 使用nginx,支持HTTPS,比如我们的demo可以使用 https://app.wildfirechat.net(demo也同时支持 http://wildfirechat.net:8888 是为了便于客户端快速开始使用,正式上线建议不要支持http,强制只支持https)。
- 调通客户端日志上传功能,如果应用使用了nginx,需要配置最大上传文件大小,日志文件最大可达50MB。
- 去掉super code或者设置为复杂密码。
如果使用自己的应用服务,需要实现以下
- 调通客户端日志上传功能。
- 支持群公告功能
- 如果使用了web,小程序或者pc,需要增加web和pc登录相关逻辑,可以参考demo的实现。
- 如果使用了小程序,需要支持amr与mp3互转功能,可以参考
AudioController
文件
3. 推送服务
调通所有厂商的推送功能,具体请参考push-server
4. TURN服务
使用音视频功能就要部署TURN服务(音视频高级版不需要),不要使用我们提供的demo,需要自己搭建。
- TURN服务必须通过音视频文档上的测试要求,出现relay的公网ip,且没有错误提示。
- TURN服务必须开通3478的TCP和UDP端口。另外还要开通媒体流使用的UDP端口,默认全开,也可以在TURN配置文件中指定范围,但至少要有1W个。
- TURN服务对CPU的压力很小,可以较低配置。但对带宽要求较高,使用固定带宽的服务太贵,可以使用按流量计费的服务,使用高带宽。
- 如果客户分散多地,且互相直接网络连接较差,可以部署多个turn服务来改善音视频质量,选择的服务器对所有人都网络友好的网络。
5. 客户端
- 配置IM HOST,要使用域名,域名格式为im.example.com,其中域名可以对应不同的环境,比如im对应线上,imtest对应测试环境,imdev对应开发环境等。
- 配置应用服务,需要切换成https的
- 配置turn服务,这个一定要换成你们自己部署的,因为我们提供的demo只有1c1g1m,无法支撑商用。
- 客户端如果是在我们的基础上二次开发,所有改动建议做好标记,以便未来同步代码。通用的修改可以给我们提PR
- 妥善保管好token,android默认保存在SharePreference,iOS默认保存在NSUserDefault里,安全等级不高,建议保存在更安全的地方,且加密保存。
- 当连接状态变为keymismatch,tokenincorrect或者logout时一定要跳出到登录界面。
- 应用启动后只能调用一次connect,不能多次调用。每次调用会关闭打开数据库,如果这时协议栈正在做数据库操作就会出现崩溃。协议栈会处理好连接状态的,包括自动重连,前后台切换等。
- 调通客户端日志上传功能,这样当客户出现问题时,可以让客户点击上传日志,自己可以来分析日志或者发送给我们分析。
6. Web
- 使用HTTPS,增加安全性