{ "listen": ":6060", "api_path": "/", "cache_control": 39600, "static_mount": "/", "grpc_listen": ":16060", "grpc_keepalive_enabled": true, "ws_ping_period_seconds": $WS_PING_PERIOD_SECONDS, "ws_pong_wait_seconds": $WS_PONG_WAIT_SECONDS, "api_key_salt": "$API_KEY_SALT", "max_message_size": 4194304, "max_subscriber_count": 128, "max_tag_count": 16, "expvar": "/stats/expvar/", "server_status": "$SERVER_STATUS_PATH", "use_x_forwarded_for": true, "default_country_code": "$DEFAULT_COUNTRY_CODE", "media": { "use_handler": "sys_config", "max_size": 33554432, "gc_period": 60, "gc_block_size": 100, "handlers": { "fs": { "upload_dir": "uploads", "cache_control": "max-age=86400", "cors_origins": $FS_CORS_ORIGINS }, "s3":{ "access_key_id": "$AWS_ACCESS_KEY_ID", "secret_access_key": "$AWS_SECRET_ACCESS_KEY", "region": "$AWS_REGION", "bucket": "$AWS_S3_BUCKET", "endpoint": "$AWS_S3_ENDPOINT", "presign_ttl": 3600, "cache_control": "max-age=86400", "cors_origins": $AWS_CORS_ORIGINS }, "oss": { "use_sys_config": true } } }, "tls": { "enabled": $TLS_ENABLED, "http_redirect": ":80", "strict_max_age": 604800, "autocert": { "cache": "/etc/letsencrypt/live/$TLS_DOMAIN_NAME", "email": "$TLS_CONTACT_ADDRESS", "domains": ["$TLS_DOMAIN_NAME"] } }, "auth_config": { "logical_names": [], "basic": { "add_to_tags": true, "min_login_length": 3, "min_password_length": 6 }, "token": { "expire_in": 1209600, "serial_num": 1, "key": "$AUTH_TOKEN_KEY" }, "code": { "expire_in": 900, "max_retries": 3, "code_length": 6 } }, "store_config": { "uid_key": "$UID_ENCRYPTION_KEY", "max_results": 1024, "use_adapter": "$STORE_USE_ADAPTER", "adapters": { "mysql": { "database": "meeting_im", "dsn": "$MYSQL_DSN", "max_open_conns": $MYSQL_MAX_OPEN_CONNS, "max_idle_conns": $MYSQL_MAX_IDLE_CONNS, "registry_max_open_conns": $MYSQL_REGISTRY_MAX_OPEN_CONNS, "registry_max_idle_conns": $MYSQL_REGISTRY_MAX_IDLE_CONNS, "conn_max_lifetime": 60, "sql_timeout": 10, "tenant_registry_db": "$TENANT_REGISTRY_DB", "tenant_db_routing": true }, "postgres": { "database": "meeting_im", "dsn": "$POSTGRES_DSN" }, "rethinkdb": { "database": "meeting_im", "addresses": "rethinkdb" }, "mongodb": { "database": "meeting_im", "addresses": "mongodb", "replica_set": "rs0" } }, "redis": { "addr": "$REDIS_ADDR", "sentinel_master_name": "$REDIS_SENTINEL_MASTER_NAME", "sentinel_addrs": $REDIS_SENTINEL_ADDRS_JSON, "username": "$REDIS_USERNAME", "password": "$REDIS_PASSWORD", "db": $REDIS_DB, "key_prefix": "$REDIS_KEY_PREFIX", "dial_timeout_ms": $REDIS_DIAL_TIMEOUT_MS, "read_timeout_ms": $REDIS_READ_TIMEOUT_MS, "write_timeout_ms": $REDIS_WRITE_TIMEOUT_MS, "pending_ttl_seconds": $REDIS_PENDING_TTL_SECONDS, "done_ttl_seconds": $REDIS_DONE_TTL_SECONDS, "failed_ttl_seconds": $REDIS_FAILED_TTL_SECONDS, "hot_message_ttl_seconds": $REDIS_HOT_MESSAGE_TTL_SECONDS, "presence_ttl_seconds": $REDIS_PRESENCE_TTL_SECONDS, "cache_ttl_seconds": $REDIS_CACHE_TTL_SECONDS, "short_state_ttl_seconds": $REDIS_SHORT_STATE_TTL_SECONDS, "group_fanout_enabled": $REDIS_GROUP_FANOUT_ENABLED } }, "kafka": { "enabled": true, "brokers": ["kafka.118im.com:30835"], "client_id": "im-server", "consumer_group": "im-server", "dial_timeout_ms": 3000, "write_timeout_ms": 3000, "read_timeout_ms": 3000, "batch_timeout_ms": 10, "required_acks": 1, "allow_auto_topic_creation": false, "tls_enabled": false, "sasl_enabled": false, "sasl_mechanism": "SCRAM-SHA-512", "sasl_username": "", "sasl_password": "", "max_retry_count": 3, "retry_backoff_ms": [10000, 30000, 60000, 300000, 900000], "message_batch_size": $KAFKA_MESSAGE_BATCH_SIZE, "message_batch_wait_ms": $KAFKA_MESSAGE_BATCH_WAIT_MS, "message_single_retry_count": $KAFKA_MESSAGE_SINGLE_RETRY_COUNT, "dead_letter_retention_seconds": 7776000, "topics": { "admin_command": "im.admin.command", "admin_command_result": "im.admin.command.result", "config_event": "im.config.event", "business_event": "im.business.event", "message_persist": "im.message.persist", "group_message_persist": "im.group.message.persist", "message_push": "im.message.push", "file_security": "im.file.security", "cache_invalidate": "im.cache.invalidate", "audit_event": "im.audit.event", "dead_letter": "im.dead.letter" } }, "internal_api": { "enabled": $INTERNAL_API_ENABLED, "time_window_seconds": $INTERNAL_API_TIME_WINDOW_SECONDS, "services": { "$INTERNAL_API_HOTGO_SERVICE_NAME": { "secret": "$INTERNAL_API_HOTGO_SECRET", "allow": ["admin_query"] }, "$INTERNAL_API_CULTIVATE_SERVICE_NAME": { "secret": "$INTERNAL_API_CULTIVATE_SECRET", "allow": ["cultivate"] } } }, "admin_internal_api": { "enabled": true, "base_url": "$ADMIN_INTERNAL_API_BASE_URL", "service_name": "$ADMIN_INTERNAL_API_SERVICE_NAME", "secret": "$ADMIN_INTERNAL_API_SECRET", "timeout_ms": $ADMIN_INTERNAL_API_TIMEOUT_MS }, "acc_validation": { "email": { "add_to_tags": true, "required": [$EMAIL_VERIFICATION_REQUIRED], "config": { "host_url": "$SMTP_HOST_URL", "smtp_server": "$SMTP_SERVER", "smtp_port": "$SMTP_PORT", "sender": "$SMTP_SENDER", "login": "$SMTP_LOGIN", "sender_password": "$SMTP_PASSWORD", "auth_mechanism": "$SMTP_AUTH_MECHANISM", "smtp_helo_host": "$SMTP_HELO_HOST", "languages": ["en", "es", "fr", "ru", "vi", "zh"], "validation_templ": "./templ/email-validation-{{.Language}}.templ", "reset_secret_templ": "./templ/email-password-reset-{{.Language}}.templ", "max_retries": 3, "domains": [$SMTP_DOMAINS], "debug_response": "$DEBUG_EMAIL_VERIFICATION_CODE" } }, "tel": { "add_to_tags": true, "config": { "host_url": "$TEL_HOST_URL", "languages": ["en", "es", "fr", "pt", "ru", "vi", "zh"], "sender": "$TEL_SENDER", "universal_templ": "./templ/sms-universal-{{.Language}}.templ", "max_retries": 3, "debug_response": "$DEBUG_TEL_VERIFICATION_CODE" } } }, "acc_gc_config": { "enabled": $ACC_GC_ENABLED, "gc_period": 3600, "gc_block_size": 10, "gc_min_account_age": 48 }, "push": [ { "name":"tnpg", "config": { "enabled": $TNPG_PUSH_ENABLED, "token": "$TNPG_AUTH_TOKEN", "org": "$TNPG_ORG" } }, { "name":"fcm", "config": { "enabled": $FCM_PUSH_ENABLED, "project_id": "$FCM_PROJECT_ID", "credentials_file": "$FCM_CRED_FILE", "time_to_live": 3600, "android": { "enabled": $FCM_INCLUDE_ANDROID_NOTIFICATION, "icon": "ic_logo_push", "icon_color": "#3949AB", "click_action": ".MessageActivity", "msg": { "title_loc_key": "new_message", "title": "", "body_loc_key": "", "body": "" }, "sub": { "title_loc_key": "new_chat", "body_loc_key": "" } } } }, { "name": "jpush", "config": { "enabled": $JPUSH_PUSH_ENABLED, "api_domain": "$JPUSH_API_DOMAIN", "push_path": "$JPUSH_PUSH_PATH", "default_ttl_seconds": $JPUSH_DEFAULT_TTL_SECONDS, "call_ttl_seconds": $JPUSH_CALL_TTL_SECONDS, "apns_production": $JPUSH_APNS_PRODUCTION, "use_alias": $JPUSH_USE_ALIAS, "classification": $JPUSH_CLASSIFICATION, "title": "$JPUSH_TITLE" } } ], "webrtc": { "enabled": $WEBRTC_ENABLED, "call_establishment_timeout": 30, "ice_servers_file": "$ICE_SERVERS_FILE" }, "cluster_config": { "self": "", "nodes": $CLUSTER_NODES_JSON, "proxy_to_master_buffer": $CLUSTER_PROXY_TO_MASTER_BUFFER, "proxy_to_master_workers": $CLUSTER_PROXY_TO_MASTER_WORKERS, "proxy_to_master_enqueue_timeout_ms": $CLUSTER_PROXY_TO_MASTER_ENQUEUE_TIMEOUT_MS, "route_retries": $CLUSTER_ROUTE_RETRIES, "route_retry_backoff_ms": $CLUSTER_ROUTE_RETRY_BACKOFF_MS, "failover": { "enabled": true, "heartbeat": 100, "vote_after": 8, "node_fail_after": 16 } }, "plugins": [ { "enabled": $PLUGIN_PYTHON_CHAT_BOT_ENABLED, "name": "python_chat_bot", "timeout": 20000, "filters": { "account": "C" }, "failure_code": 0, "failure_text": null, "service_addr": "tcp://localhost:40051" } ] }