service_name: gateway-service node_id: gateway-local environment: local log: level: info format: json include_request_body: false include_response_body: false max_payload_bytes: 2048 http_addr: ":13000" cors: enabled: true allowed_origins: - "*" allowed_methods: ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] allowed_headers: - "Authorization" - "Content-Type" - "X-Request-ID" - "X-App-Code" - "X-HY-App-Code" - "X-App-Package" - "X-Package-Name" - "X-App-Bundle-ID" - "X-Bundle-ID" - "X-App-Platform" - "X-Platform" expose_headers: ["X-Request-ID"] allow_credentials: true max_age_sec: 600 jwt_secret: "dev-shared-secret" room_service_addr: "127.0.0.1:13001" user_service_addr: "127.0.0.1:13005" wallet_service_addr: "127.0.0.1:13004" activity_service_addr: "127.0.0.1:13006" game_service_addr: "127.0.0.1:13008" statistics: base_url: "http://127.0.0.1:13010" timeout: "2s" grpc_client: # gateway 内部 gRPC 默认 deadline 包含一次 UNAVAILABLE 重试;业务长调用应在 handler 上下文显式收紧或放宽。 default_timeout: "5s" connect_timeout: "2s" keepalive_time: "30s" keepalive_timeout: "10s" retry_max_attempts: 2 retry_initial_backoff: "100ms" retry_max_backoff: "500ms" retry_backoff_multiplier: 2 retryable_status_codes: ["UNAVAILABLE"] app_config: # App 运行时配置由后台 APP配置写入 hyapp_admin,gateway 只读下发给 App。 mysql_dsn: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_admin?parseTime=true&charset=utf8mb4&loc=UTC" # 房间白名单等低频配置用 Redis 缓存 5 分钟,避免每次列表请求查后台库。 redis_addr: "127.0.0.1:13379" redis_password: "" redis_db: 0 key_prefix: "gateway:app_config:" cache_ttl: "5m" leaderboard: # 活动用户榜单只读 activity-service 写入的 Redis 聚合结果;时间窗口统一按 UTC 计算。 redis_addr: "127.0.0.1:13379" redis_password: "" redis_db: 0 key_prefix: "activity:user_leaderboard" auth_rate_limit: # public auth 固定窗口频控;Redis 不可用时 gateway 启动失败,避免失去入口保护。 enabled: true redis_addr: "127.0.0.1:13379" redis_password: "" redis_db: 0 key_prefix: "gateway:auth:rate:" window_sec: 60 ip_limit: 120 device_id_limit: 30 provider_ip_limit: 20 display_user_id_ip_limit: 10 display_user_id_limit: 50 session_id_ip_limit: 30 login_risk: enabled: true redis_addr: "127.0.0.1:13379" redis_password: "" redis_db: 0 key_prefix: "login_risk:ip:" fast_guard: blocked_languages: [] blocked_language_primary_tags: [] blocked_timezones: [] blocked_timezone_prefixes: [] tencent_im: # 本地联调腾讯云 IM UserSig;SDKAppID 和密钥必须与 room-service 保持一致。 sdk_app_id: 20040101 secret_key: "2f6a5ec58cccf79647557a96c15e6efe89ba5a44c474096bde2589a633fcd45e" admin_identifier: "administrator" admin_user_sig_ttl: "24h" # 客户端 UserSig 有效期;线上建议 12h-7d,按登录刷新策略决定。 user_sig_ttl: "24h" endpoint: "adminapisgp.im.qcloud.com" request_timeout: "5s" # 腾讯云 IM 控制台回调 URL。需要公网可访问;本地为空表示暂不启用回调。 callback_url: "" # 腾讯云 IM 回调鉴权 Token。启用回调鉴权后必须填写。 callback_auth_token: "" tencent_rtc: # 本地联调腾讯 RTC UserSig;当前复用同一腾讯应用,后续可独立切换。 enabled: true sdk_app_id: 20036101 secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c" # RTC 进房票据有效期;比 IM 短,降低泄露窗口,客户端按需刷新。 user_sig_ttl: "2h" # 当前 room_id 是字符串,客户端只能使用 TRTC strRoomId,不能混用数字 roomId。 room_id_type: "string" app_scene: "voice_chat_room" # 腾讯 RTC 控制台回调 URL。需要公网可访问;本地为空表示暂不启用回调。 callback_url: "" # 腾讯 RTC 回调签名 key。启用回调后必须填写,gateway 会按原始 body 做 HMAC-SHA256 校验。 callback_sign_key: "" tencent-cos: # App 文件/头像上传使用腾讯云 COS;secret 只保存在 gateway 服务端配置。 enabled: true secret-id: "IKIDMchhZEfrsiNo472DAtTpzzmLjttkOnyu" secret-key: "nMkbLsGRO6ZqulSyJQJ0UjjU0KSKxOgl" bucket-name: "yumi-assets-1420526837" region: "me-saudi-arabia" access-url: "https://media.haiyihy.com"