# The class cannot be named by Pascal or camel case. # The class cannot be named by Pascal or camel case. # If it is not used, the corresponding structure will not be set, # and it will not be read naturally. serverversion: 2.3.1 #---------------Infrastructure configuration---------------------# etcd: etcdSchema: openim #默认即可 etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 k8sMod: false #开启k8s模式 使用pod里面环境变量请求services调用服务 而并非etcd mysql: dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 dbMysqlUserName: root #mysql用户名,建议修改 dbMysqlPassword: openIM # mysql密码,建议修改 dbMysqlDatabaseName: openIM_v2 #默认即可 dbTableName: eMsg #默认即可 dbMsgTableNum: 1 dbMaxOpenConns: 2000 dbMaxIdleConns: 100 dbMaxLifeTime: 3600 mongo: dbUri: ""#当dbUri值不为空则直接使用该值 dbAddress: 127.0.0.1:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 dbDirect: false dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 dbSource: admin dbUserName: #mongo用户名,建议先不设置 dbPassword: #mongo密码,建议先不设置 dbMaxPoolSize: 100 dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 chatRecordsClearTime: "* * * * *" # 每天凌晨3点清除消息,该配置和linux定时任务一样, 清理操作建议设置在用户活跃少的时候 # 0 3 * * * redis: dbAddress: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 dbUserName: #only redis version 6.0+ need username dbPassWord: openIM #redis密码 建议修改 enableCluster: false #如果外部redis以集群方式启动,需要打开此开关 kafka: ws2mschat: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat" #用于mongo和mysql保存消息 # ws2mschatoffline: # addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 # topic: "ws2ms_chat_offline" #原为离线用户消息处理,目前暂时弃用 msgtomongo: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "msg_to_mongo" ms2pschat: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" #消息push consumergroupid: msgToTransfer: mongo msgToMongo: mongo_ex msgToMySql: mysql msgToPush: push #---------------Internal service configuration---------------------# # The service ip default is empty, # automatically obtain the machine's valid network card ip as the service ip, # otherwise the configuration ip is preferred #如果是单机模式,用0.0.0.0或者不填,默认即可 serverip: 0.0.0.0 #作为rpc时,注册到etcd的地址,单机默认即可,如果是集群部署,需要修改(具体使用内网地址还是外网地址,要依情况而定,目的是api/gateway能访问到) rpcRegisterIP: #默认即可 listenIP: 0.0.0.0 # endpoints 内部组件间访问的端点host名称,访问时,可以内部直接访问 host:port 来访问 endpoints: api: openim_api cmsapi: openim_cms_api push: openim_push msg_gateway: openim_msg_gateway rpc_auth: openim_rpc_auth rpc_friend: openim_rpc_friend rpc_group: openim_rpc_group rpc_msg: openim_rpc_msg rpc_user: openim_rpc_user rpc_statistic: openim_rpc_statistic rpc_admin_cms: openim_rpc_admin_cms rpc_message_cms: openim_rpc_admin_cms rpc_office: openim_rpc_office api: openImApiPort: [ 10002 ] #api服务端口,默认即可,需要开放此端口或做nginx转发 listenIP: 0.0.0.0 cmsapi: openImCmsApiPort: [ 10006 ] #管理后台api服务端口,默认即可,需要开放此端口或做nginx转发 listenIP: 0.0.0.0 sdk: openImSdkWsPort: [ 10003 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发 dataDir: [ ../db/sdk/ ] openImWsAddress: ws://127.0.0.1:10001 openImApiAddress: http://127.0.0.1:10002 #对象存储服务,以下配置二选一,目前支持两种,腾讯云和minio,二者配置好其中一种即可(如果使用minio参考https://doc.rentsoft.cn/#/qa/minio搭建minio服务器) credential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改 tencent: appID: 1302656840 region: ap-chengdu bucket: echat-1302656840 secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC1 secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe1 minio: #MinIO 发送图片、视频、文件时需要,请自行申请后替换,必须修改。 客户端初始化InitSDK,中 object_storage参数为minio bucket: openim # 存储内容桶 appBucket: app # 存储app的桶 location: us-east-1 endpoint: http://127.0.0.1:10005 #minio外网ip 这个ip是给客户端访问的 endpointInner: http://127.0.0.1:10005 #minio内网地址 如果im server 可以通过内网访问到 minio就可以填写 endpointInnerEnable: true #是否启用minio内网地址 启用可以让桶初始化,IM server连接minio走内网地址访问 accessKeyID: user12345 secretAccessKey: key12345 storageTime: 50 #文件在minio中保存的时间 isDistributedMod: false # 是否分布式多硬盘部署 默认docker-compose中为false ali: # ali oss regionID: "oss-cn-beijing" accessKeyID: "" accessKeySecret: "" stsEndpoint: "sts.cn-beijing.aliyun.com" ossEndpoint: "oss-cn-beijing.aliyuncs.com" bucket: "bucket1" finalHost: "http://bucket1.oss-cn-beijing.aliyuncs.com" stsDurationSeconds: 3600 OssRoleArn: "acs:ram::xxx:role/xxx" aws: accessKeyID: 1 #AssumeRole用户关联的accessKeyID accessKeySecret: 2 #AssumeRole用户关联的accessKeySecrect region: ap-southeast-1 #分区 bucket: ouyang #桶 finalHost: ouyang.s3.ap-southeast-1.amazonaws.com #对外Host roleArn: arn:aws:iam::192209831083:role/AWS_S3_FOR_OUYANG #RoleArn externalId: AssumeRoleExtend #角色扩展Id roleSessionName: Required-AWS-ID-OPENIM #角色SESSION名称 dtm: serverURL: 127.0.0.1:10007 rpcport: #rpc服务端口 默认即可 openImUserPort: [ 10110 ] openImFriendPort: [ 10120 ] openImMessagePort: [ 10130 ] openImMessageGatewayPort: [ 10140 ] openImGroupPort: [ 10150 ] openImAuthPort: [ 10160 ] openImPushPort: [ 10170 ] openImStatisticsPort: [ 10180 ] openImMessageCmsPort: [ 10190 ] openImAdminCmsPort: [ 10200 ] openImOfficePort: [ 10210 ] openImOrganizationPort: [ 10220 ] openImConversationPort: [ 10230 ] openImCachePort: [ 10240 ] openImRealTimeCommPort: [ 11300 ] c2c: callbackBeforeSendMsg: switch: false timeoutStrategy: 1 #1:send callbackAfterSendMsg: switch: false state: stateChange: switch: false rpcregistername: #rpc注册服务名,默认即可 openImUserName: User openImFriendName: Friend openImMsgName: Msg openImPushName: Push openImRelayName: Relay openImGroupName: Group openImAuthName: Auth openImStatisticsName: Statistics openImMessageCMSName: MessageCMS openImAdminCMSName: AdminCMS openImOfficeName: Office openImOrganizationName: Organization openImConversationName: Conversation openImCacheName: Cache openImRealTimeCommName: RealTimeComm log: storageLocation: ../logs/ rotationTime: 24 remainRotationCount: 2 #日志数量 #日志级别 6表示全都打印,测试阶段建议设置为6 remainLogLevel: 6 elasticSearchSwitch: false elasticSearchAddr: [ 127.0.0.1:9201 ] elasticSearchUser: "" elasticSearchPassword: "" modulename: #日志文件按模块命名,默认即可 longConnSvrName: msg_gateway msgTransferName: msg_transfer pushName: push longconnsvr: openImWsPort: [ 10001 ] # ws服务端口,默认即可,要开放此端口或做nginx转发 websocketMaxConnNum: 10000 websocketMaxMsgLen: 4096 websocketTimeOut: 10 ## 推送只能开启一个 enable代表开启 push: tpns: #腾讯推送,暂未测试 暂不要使用 ios: accessID: 1600018281 secretKey: 3cd68a77a95b89e5089a1aca523f318f android: accessID: 111 secretKey: 111 enable: false jpns: #极光推送 在极光后台申请后,修改以下四项,必须修改 appKey: cf47465a368f24c659608e7e masterSecret: 02204efe3f3832947a236ee5 pushUrl: "https://api.jpush.cn/v3/push" pushIntent: "intent:#Intent;component=io.openim.app.enterprisechat/io.openim.app.enterprisechat.MainActivity;end" enable: true getui: #个推推送 pushUrl: "https://restapi.getui.com/v2/$appId" masterSecret: "" appKey: "" intent: "" enable: false fcm: #firebase cloud message 消息推送 serviceAccount: "openim-5c6c0-firebase-adminsdk-ppwol-8765884a78.json" #帐号文件,此处需要改修配置,并且这个文件放在 config目录下 enable: false manager: #app管理员userID和对应的secret 建议修改。 用于管理后台登录,也可以用户管理后台对应的api appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin"] secrets: [ "openIM1","openIM2", "openIM333", "openIMAdmin"] appSysNotificationName: "系统通知" secret: tuoyun # 多端互踢策略 # 1:多平台登录:Android、iOS、Windows、Mac 每种平台只能一个在线,web端可以多个同时在线 multiloginpolicy: 1 #msg log insert to db chatpersistencemysql: true #可靠性存储 reliablestorage: false #消息缓存时间 msgCacheTimeout: 86400 #群聊已读开启 groupMessageHasReadReceiptEnable: true #单聊已读开启 singleMessageHasReadReceiptEnable: true #token config tokenpolicy: accessSecret: "open_im_server" #token生成相关,默认即可 # Token effective time day as a unit accessExpire: 90 #token过期时间(天) 默认即可 messageverify: friendVerify: false # c2c: # callbackBeforeSendMsg: # switch: false # timeoutStrategy: 1 #1:send # callbackAfterSendMsg: # switch: false # state: # stateChange: # switch: false #ios系统推送声音以及标记计数 iospush: pushSound: "xxx" badgeCount: true production: false callback: # callback url 需要自行更换callback url callbackUrl : "http://127.0.0.1:8080/callback" # 开启关闭操作前后回调的配置 callbackBeforeSendSingleMsg: enable: false # 回调是否启用 callbackTimeOut: 2 # 回调超时时间 callbackFailedContinue: true # 回调超时是否继续执行代码 callbackAfterSendSingleMsg: enable: false callbackTimeOut: 2 callbackBeforeSendGroupMsg: enable: false callbackTimeOut: 2 callbackFailedContinue: true callbackAfterSendGroupMsg: enable: false callbackTimeOut: 2 callbackWordFilter: enable: false callbackTimeOut: 2 callbackFailedContinue: true callbackUserOnline: enable: false callbackTimeOut: 2 callbackUserOffline: enable: false callbackTimeOut: 2 callbackUserKickOff: enable: false callbackTimeOut: 2 callbackOfflinePush: enable: false callbackTimeOut: 2 callbackFailedContinue: true # 回调超时是否继续离线推送 callbackOnlinePush: enable: false callbackTimeOut: 2 callbackFailedContinue: true # 回调超时是否继续离线推送 callbackSuperGroupOnlinePush: enable: false callbackTimeOut: 2 callbackFailedContinue: true # 回调超时是否继续离线推送 notification: groupCreated: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: true title: "create group title" # xx create the group desc: "create group desc" ext: "create group ext" defaultTips: tips: "create the group" # xx create the group groupInfoSet: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupInfoSet title" desc: "groupInfoSet desc" ext: "groupInfoSet ext" defaultTips: tips: "modified the group profile" # group info changed by xx joinGroupApplication: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: false title: "joinGroupApplication title" desc: "joinGroupApplication desc" ext: "joinGroupApplication ext" defaultTips: tips: "apply to join the group" # group info changed by xx memberQuit: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "memberQuit title" desc: "memberQuit desc" ext: "memberQuit ext" defaultTips: tips: "quit group msg" # group info changed by xx groupApplicationAccepted: conversation: reliabilityLevel: 2 unreadCount: true offlinePush: switch: false title: "groupApplicationAccepted title" desc: "groupApplicationAccepted desc" ext: "groupApplicationAccepted ext" defaultTips: tips: "was allowed to join the group" # group info changed by xx groupApplicationRejected: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: false title: " title" desc: " desc" ext: " ext" defaultTips: tips: "was rejected into the group" # group info changed by xx groupOwnerTransferred: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupOwnerTransferred title" desc: "groupOwnerTransferred desc" ext: "groupOwnerTransferred ext" defaultTips: tips: "become a new group owner" # group info changed by xx memberKicked: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "memberKicked title" desc: "memberKicked desc" ext: "memberKicked ext" defaultTips: tips: "was kicked out of the group" # group info changed by xx memberInvited: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "memberInvited title" desc: "memberInvited desc" ext: "memberInvited ext" defaultTips: tips: "was invited into the group" # group info changed by xx memberEnter: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "memberEnter title" desc: "memberEnter desc" ext: "memberEnter ext" defaultTips: tips: "entered the group" # group info changed by xx groupDismissed: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupDismissed title" desc: "groupDismissed desc" ext: "groupDismissed ext" defaultTips: tips: "group dismissed" groupMuted: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupMuted title" desc: "groupMuted desc" ext: "groupMuted ext" defaultTips: tips: "group Muted" groupCancelMuted: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupCancelMuted title" desc: "groupCancelMuted desc" ext: "groupCancelMuted ext" defaultTips: tips: "group Cancel Muted" groupMemberMuted: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupMemberMuted title" desc: "groupMemberMuted desc" ext: "groupMemberMuted ext" defaultTips: tips: "group Member Muted" groupMemberCancelMuted: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "groupMemberCancelMuted title" desc: "groupMemberCancelMuted desc" ext: "groupMemberCancelMuted ext" defaultTips: tips: "group Member Cancel Muted" groupMemberInfoSet: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: false title: "groupMemberInfoSet title" desc: "groupMemberInfoSet desc" ext: "groupMemberInfoSet ext" defaultTips: tips: "group member info set" organizationChanged: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: false title: "organizationChanged title" desc: "organizationChanged desc" ext: "organizationChanged ext" defaultTips: tips: "organization changed" #############################friend################################# friendApplicationAdded: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "Somebody applies to add you as a friend" desc: "Somebody applies to add you as a friend" ext: "Somebody applies to add you as a friend" defaultTips: tips: "I applies to add you as a friend" # friendApplicationApproved: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "Someone applies to add your friend application" desc: "Someone applies to add your friend application" ext: "Someone applies to add your friend application" defaultTips: tips: "I applies to add your friend application" # friendApplicationRejected: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "Someone rejected your friend application" desc: "Someone rejected your friend application" ext: "Someone rejected your friend application" defaultTips: tips: "I rejected your friend application" # friendAdded: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: true title: "We have become friends" desc: "We have become friends" ext: "We have become friends" defaultTips: tips: "We have become friends" # friendDeleted: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "deleted a friend" desc: "deleted a friend" ext: "deleted a friend" defaultTips: tips: "deleted a friend" # friendRemarkSet: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "Your friend's profile has been changed" desc: "Your friend's profile has been changed" ext: "Your friend's profile has been changed" defaultTips: tips: "Your friend's profile has been changed" # blackAdded: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "blocked a user" desc: "blocked a user" ext: "blocked a user" defaultTips: tips: "blocked a user" # blackDeleted: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "Remove a blocked user" desc: "Remove a blocked user" ext: "Remove a blocked user" defaultTips: tips: "Remove a blocked user" #####################user######################### userInfoUpdated: conversation: reliabilityLevel: 2 unreadCount: false offlinePush: switch: true title: "Remove a blocked user" desc: "Remove a blocked user" ext: "Remove a blocked user" defaultTips: tips: "remove a blocked user" #####################conversation######################### conversationOptUpdate: conversation: reliabilityLevel: 1 unreadCount: false offlinePush: switch: true title: "conversation opt update" desc: "conversation opt update" ext: "conversation opt update" defaultTips: tips: "conversation opt update" conversationSetPrivate: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: true title: "burn after reading" desc: "burn after reading" ext: "burn after reading" defaultTips: openTips: "burn after reading was opened" closeTips: "burn after reading was closed" ###################workMoments################ workMomentsNotification: conversation: reliabilityLevel: 2 unreadCount: true offlinePush: switch: true title: "burn after reading" desc: "burn after reading" ext: "burn after reading" defaultTips: openTips: "burn after reading was opened" closeTips: "burn after reading was closed" ###################organization################ joinDepartmentNotification: conversation: reliabilityLevel: 3 unreadCount: true offlinePush: switch: false title: "welcome user join department" desc: "welcome user join department" ext: "welcome user join department" defaultTips: tips: "welcome user join department" #---------------demo configuration---------------------# #The following configuration items are applied to openIM Demo configuration #是否启动demo,如果自身没有账号体系,设置为true demoswitch: true demo: listenIP: 0.0.0.0 #demo对外服务端口,默认即可,需要开放此端口或做nginx转发 openImDemoPort: [ 10004 ] alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,enable为true则必须修改,阿里云为默认短信验证方式 accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7 accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV signName: 托云信息技术 verificationCodeTemplateCode: SMS_226810164 enable: false tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 2400000648 region: "ap-singapore" secretID: IKIDra4JPGsFMDwQedMq42lESQBgwwgBQQAe secretKey: HI6fz4uUotjJdiX6QUIrAE2buxlKdgU2 signName: "" verificationCodeTemplateCode: 2902877 enable: true superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 needInvitationCode: false # second codeTTL: 60 useSuperCode: true mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改 title: "openIM" senderMail: "765567899@qq.com" senderAuthorizationCode: "gxyausfoevlzbfag" smtpAddr: "smtp.qq.com" smtpPort: 25 #需开放此端口 出口方向 testDepartMentID: 001 imAPIURL: http://127.0.0.1:10002 onboardProcess: false # 是否开启注册流程 createOrganizationUserAndJoinDepartment: false joinDepartmentIDList: [] # 用户注册进来默认加的部门ID列表 不填就随机 joinDepartmentGroups: false # 注册是否加部门群 oaNotification: false # 注册是否发送OA通知 rtc: signalTimeout: 35