# Copyright © 2023 OpenIM. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the License); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ----------------------------------------------------------------- # TODO: This config file is the template file # --| source: deployments/templates/openim.yaml # --| env: scripts/install/environment # --| target: config/config.yaml # ----------------------------------------------------------------- ###################### Zookeeper ###################### # Zookeeper configuration # It's not recommended to modify the schema # # Zookeeper address # Zookeeper username # Zookeeper password zookeeper: schema: ${ZOOKEEPER_SCHEMA} address: [ ${ZOOKEEPER_ADDRESS}:${ZOOKEEPER_PORT} ] username: ${ZOOKEEPER_USERNAME} password: ${ZOOKEEPER_PASSWORD} ###################### Mysql ###################### # MySQL configuration # Currently, only single machine setup is supported # # Maximum number of open connections # Maximum number of idle connections # Maximum lifetime in seconds a connection can be reused # Log level: 1=slient, 2=error, 3=warn, 4=info # Slow query threshold in milliseconds mysql: address: [ ${MYSQL_ADDRESS}:${MYSQL_PORT} ] username: ${MYSQL_USERNAME} password: ${MYSQL_PASSWORD} database: ${MYSQL_DATABASE} maxOpenConn: ${MYSQL_MAX_OPEN_CONN} maxIdleConn: ${MYSQL_MAX_IDLE_CONN} maxLifeTime: ${MYSQL_MAX_LIFETIME} logLevel: ${MYSQL_LOG_LEVEL} slowThreshold: ${MYSQL_SLOW_THRESHOLD} ###################### Mongo ###################### # MongoDB configuration # If uri is not empty, it will be used directly # # MongoDB address for standalone setup, Mongos address for sharded cluster setup # Default MongoDB database name # Maximum connection pool size mongo: uri: ${MONGO_URI} address: [ ${MONGO_ADDRESS}:${MONGO_PORT} ] database: ${MONGO_DATABASE} username: ${MONGO_USERNAME} password: ${MONGO_PASSWORD} maxPoolSize: ${MONGO_MAX_POOL_SIZE} ###################### Redis configuration information ###################### # Redis configuration # # Username is required only for Redis version 6.0+ redis: address: [ ${REDIS_ADDRESS}:${REDIS_PORT} ] username: ${REDIS_USERNAME} password: ${REDIS_PASSWORD} ###################### Kafka configuration information ###################### # Kafka configuration # # Kafka username # Kafka password # It's not recommended to modify this topic name # Consumer group ID, it's not recommended to modify kafka: username: ${KAFKA_USERNAME} password: ${KAFKA_PASSWORD} addr: [ ${KAFKA_ADDRESS}:${KAFKA_PORT} ] latestMsgToRedis: topic: "${KAFKA_LATESTMSG_REDIS_TOPIC}" offlineMsgToMongo: topic: "${KAFKA_OFFLINEMSG_MONGO_TOPIC}" msgToPush: topic: "${KAFKA_MSG_PUSH_TOPIC}" consumerGroupID: msgToRedis: ${KAFKA_CONSUMERGROUPID_REDIS} msgToMongo: ${KAFKA_CONSUMERGROUPID_MONGO} msgToMySql: ${KAFKA_CONSUMERGROUPID_MYSQL} msgToPush: ${KAFKA_CONSUMERGROUPID_PUSH} ###################### RPC configuration information ###################### # RPC configuration # # IP address to register with zookeeper when starting RPC, the IP and corresponding rpcPort should be accessible by api/gateway # Default listen IP is 0.0.0.0 rpc: registerIP: ${RPC_REGISTER_IP} listenIP: ${RPC_LISTEN_IP} ###################### API configuration information ###################### # API configuration # # API service port # Default listen IP is 0.0.0.0 api: openImApiPort: [ ${API_OPENIM_PORT} ] listenIP: ${API_LISTEN_IP} ###################### Object configuration information ###################### # Object storage configuration # # Use minio for object storage # API URL should be accessible by the app # It's not recommended to modify the bucket name # Endpoint should be accessible by the app # Session token # Configuration for Tencent COS # Configuration for Aliyun OSS # apiURL is the address of the api, the access address of the app, use s3 must be configured # minio.endpoint can be configured as an intranet address, # minio.signEndpoint is minio public network address object: enable: "${OBJECT_ENABLE}" apiURL: "${OBJECT_APIURL}" minio: bucket: "${MINIO_BUCKET}" endpoint: "${MINIO_ENDPOINT}" accessKeyID: "${MINIO_ACCESS_KEY}" secretAccessKey: "${MINIO_SECRET_KEY}" sessionToken: ${MINIO_SESSION_TOKEN} signEndpoint: "${MINIO_SIGN_ENDPOINT}" cos: bucketURL: ${COS_BUCKET_URL} secretID: ${COS_SECRET_ID} secretKey: ${COS_SECRET_KEY} sessionToken: ${COS_SESSION_TOKEN} oss: endpoint: "${OSS_ENDPOINT}" bucket: "${OSS_BUCKET}" bucketURL: "${OSS_BUCKET_URL}" accessKeyID: ${OSS_ACCESS_KEY_ID} accessKeySecret: ${OSS_ACCESS_KEY_SECRET} sessionToken: ${OSS_SESSION_TOKEN} ###################### RPC Port Configuration ###################### # RPC service ports # These ports are passed into the program by the script and are not recommended to modify # For launching multiple programs, just fill in multiple ports separated by commas # For example, [10110, 10111] rpcPort: openImUserPort: [ ${OPENIM_USER_PORT} ] openImFriendPort: [ ${OPENIM_FRIEND_PORT} ] openImMessagePort: [ ${OPENIM_MESSAGE_PORT} ] openImMessageGatewayPort: [ ${OPENIM_MESSAGE_GATEWAY_PORT} ] openImGroupPort: [ ${OPENIM_GROUP_PORT} ] openImAuthPort: [ ${OPENIM_AUTH_PORT} ] openImPushPort: [ ${OPENIM_PUSH_PORT} ] openImConversationPort: [ ${OPENIM_CONVERSATION_PORT} ] openImThirdPort: [ ${OPENIM_THIRD_PORT} ] ###################### RPC Register Name Configuration ###################### # RPC service names for registration, it's not recommended to modify these rpcRegisterName: openImUserName: ${OPENIM_USER_NAME} openImFriendName: ${OPENIM_FRIEND_NAME} openImMsgName: ${OPENIM_MSG_NAME} openImPushName: ${OPENIM_PUSH_NAME} openImMessageGatewayName: ${OPENIM_MESSAGE_GATEWAY_NAME} openImGroupName: ${OPENIM_GROUP_NAME} openImAuthName: ${OPENIM_AUTH_NAME} openImConversationName: ${OPENIM_CONVERSATION_NAME} openImThirdName: ${OPENIM_THIRD_NAME} ###################### Log Configuration ###################### # Log configuration # # Storage directory # Log rotation time # Maximum number of logs to retain # Log level, 6 means all levels # Whether to output to stdout # Whether to output in json format # Whether to include stack trace in logs log: storageLocation: ${LOG_STORAGE_LOCATION} rotationTime: ${LOG_ROTATION_TIME} remainRotationCount: ${LOG_REMAIN_ROTATION_COUNT} remainLogLevel: ${LOG_REMAIN_LOG_LEVEL} isStdout: ${LOG_IS_STDOUT} isJson: ${LOG_IS_JSON} withStack: ${LOG_WITH_STACK} ###################### Variables definition ###################### # Long connection server configuration # # Websocket port for msg_gateway # Maximum number of websocket connections # Maximum length of websocket request package # Websocket connection handshake timeout longConnSvr: openImWsPort: [ ${OPENIM_WS_PORT} ] websocketMaxConnNum: ${WEBSOCKET_MAX_CONN_NUM} websocketMaxMsgLen: ${WEBSOCKET_MAX_MSG_LEN} websocketTimeout: ${WEBSOCKET_TIMEOUT} # Push notification service configuration # # Use GeTui for push notifications # GeTui offline push configuration # FCM offline push configuration # Account file, place it in the config directory # JPush configuration, modify these after applying in JPush backend push: enable: ${PUSH_ENABLE} geTui: pushUrl: "${GETUI_PUSH_URL}" masterSecret: "" appKey: "" intent: "" channelID: "" channelName: "" fcm: serviceAccount: "${FCM_SERVICE_ACCOUNT}" jpns: appKey: masterSecret: pushUrl: pushIntent: # App manager configuration # # Built-in app manager user IDs # Built-in app manager nicknames manager: userID: [ "${MANAGER_USERID_1}", "${MANAGER_USERID_2}", "${MANAGER_USERID_3}" ] nickname: [ "${NICKNAME_1}", "${NICKNAME_2}", "${NICKNAME_3}" ] # Multi-platform login policy # For each platform(Android, iOS, Windows, Mac, web), only one can be online at a time multiLoginPolicy: ${MULTILOGIN_POLICY} # Whether to store messages in MySQL, messages in MySQL are only used for management background chatPersistenceMysql: ${CHAT_PERSISTENCE_MYSQL} # Message cache timeout in seconds, it's not recommended to modify msgCacheTimeout: ${MSG_CACHE_TIMEOUT} # Whether to enable read receipts for group chat groupMessageHasReadReceiptEnable: ${GROUP_MSG_READ_RECEIPT} # Whether to enable read receipts for single chat singleMessageHasReadReceiptEnable: ${SINGLE_MSG_READ_RECEIPT} # MongoDB offline message retention period in days retainChatRecords: ${RETAIN_CHAT_RECORDS} # Schedule to clear expired messages(older than retainChatRecords days) in MongoDB every Wednesday at 2am # This deletion is just for cleaning up disk usage according to previous configuration retainChatRecords, no notification will be sent chatRecordsClearTime: "${CHAT_RECORDS_CLEAR_TIME}" # Schedule to auto delete messages every day at 2am # This deletion is for messages that have been retained for more than msg_destruct_time (seconds) in the conversation field msgDestructTime: "${MSG_DESTRUCT_TIME}" # Secret key secret: ${SECRET} # Token policy # # Token expiration period in days tokenPolicy: expire: ${TOKEN_EXPIRE} # Message verification policy # # Whether to verify friendship when sending messages messageVerify: friendVerify: false # iOS push notification configuration # # iOS push notification sound # Whether to count badge # Whether it's production environment iosPush: pushSound: "xxx" badgeCount: true production: false ###################### Third-party service configuration ###################### # Callback configuration # # Callback URL # Whether to enable this callback event # Timeout in seconds # Whether to continue execution if callback fails callback: url: beforeSendSingleMsg: enable: false timeout: 5 failedContinue: true afterSendSingleMsg: enable: false timeout: 5 beforeSendGroupMsg: enable: false timeout: 5 failedContinue: true afterSendGroupMsg: enable: false timeout: 5 msgModify: enable: false timeout: 5 failedContinue: true userOnline: enable: false timeout: 5 userOffline: enable: false timeout: 5 userKickOff: enable: false timeout: 5 offlinePush: enable: false timeout: 5 failedContinue: true onlinePush: enable: false timeout: 5 failedContinue: true superGroupOnlinePush: enable: false timeout: 5 failedContinue: true beforeAddFriend: enable: false timeout: 5 failedContinue: true beforeCreateGroup: enable: false timeout: 5 failedContinue: true beforeMemberJoinGroup: enable: false timeout: 5 failedContinue: true beforeSetGroupMemberInfo: enable: false timeout: 5 failedContinue: true setMessageReactionExtensions: enable: false timeout: 5 failedContinue: true ###################### Prometheus ###################### # Prometheus configuration for various services # The number of Prometheus ports per service needs to correspond to rpcPort # The number of ports needs to be consistent with msg_transfer_service_num in script/path_info.sh prometheus: enable: ${PROMETHEUS_ENABLE} userPrometheusPort: [ ${USER_PROM_PORT} ] friendPrometheusPort: [ ${FRIEND_PROM_PORT} ] messagePrometheusPort: [ ${MESSAGE_PROM_PORT} ] messageGatewayPrometheusPort: [ ${MSG_GATEWAY_PROM_PORT} ] groupPrometheusPort: [ ${GROUP_PROM_PORT} ] authPrometheusPort: [ ${AUTH_PROM_PORT} ] pushPrometheusPort: [ ${PUSH_PROM_PORT} ] conversationPrometheusPort: [ ${CONVERSATION_PROM_PORT} ] rtcPrometheusPort: [ ${RTC_PROM_PORT} ] thirdPrometheusPort: [ ${THIRD_PROM_PORT} ] messageTransferPrometheusPort: [ ${MSG_TRANSFER_PROM_PORT} ] # List of ports