hyapp-server/docs/新App上线配置检查清单.md
2026-07-13 21:28:41 +08:00

24 KiB
Raw Blame History

新 App 上线配置检查清单

本文档定义 HyApp 新 App 从租户注册到正式运营的配置边界、业务 owner、开启条件和验收标准。它不是“把旧 App 数据全量复制一遍”的脚本说明;每项数据必须按 owner service 和业务键管理,不能跨租户复用原始自增 ID。

1. 使用方式

每次新 App 上线前,先建立一份当次上线记录,填写:

字段 说明
app_code 后端租户编码,全链路使用同一个小写值
App 名称 用户可见品牌名
Android package Android 包名,必须和 Firebase、Google Play 一致
iOS bundle ID iOS bundle identifier必须和 Firebase、Apple 后台一致
对照 App 只用于确定初始产品口径,不代表可以直接复制原始 ID
计划开服时间 UTC epoch milliseconds用于活动、版本和内容生效时间
支持国家/区域 国家、区域、内容和价格配置的权威范围
负责人 后端、客户端、运营、支付、IM/RTC 各自验收人

状态只使用以下四种:

  • NOT_STARTED:尚未配置。
  • CONFIGURED:已写入,但未经过真实请求验证。
  • VERIFIED:已用新 app_code 走通生产链路并保留证据。
  • BLOCKED:存在会阻断上线的问题,必须写明 owner 和解决动作。

2. 上线硬性原则

  1. 新 App 数据必须使用新 app_code;不能依赖代码中的 lalu 默认值维持运行。
  2. 复制配置必须按 resource_codegroup_coderegion_codeproduct_code 等业务键重建引用,不能复制旧 App 的自增 ID。
  3. 礼物、活动、VIP、游戏等只有主配置表不算完成所有价格、区域、资源、奖励和 worker 必须一起验证。
  4. 敏感值只能写入线上环境变量或已忽略的运行时 env不能写入可提交 YAML、SQL、文档或代码。
  5. 全部时间使用 UTC范围统一使用 [start_ms, end_ms)
  6. 共享 RocketMQ topic 不代表多 App 已经就绪;必须确认消息 payload、consumer context、幂等表和 outbox claim 都保留 app_code
  7. 只有完成“配置写入 → 服务加载 → 真实 API/IM/RTC/MQ 请求 → 日志与数据回查”才能标记 VERIFIED

3. App 注册与租户基础

Owneruser-servicegateway-service

配置项 数据/配置入口 开启条件 验收标准
App 注册 hyapp_user.apps status=activeapp_code 和包名唯一 X-App-Code 和 package 都能解析到同一 App
Android/iOS 包信息 apps 及客户端 flavor 与应用商店、Firebase 完全一致 真实安装包登录成功
Firebase 项目 user-service.third_party.firebase.projects.<app_code> 项目 ID、凭据和签名指纹都属于新 App Google/Firebase token 在新 App 成功,不被其他 App 接受
JWT/请求元数据 gateway → gRPC RequestMeta.app_code 所有需要租户隔离的 RPC 透传 下游日志和数据行均为新 app_code
登录风控 auth_risk_configslogin_risk_country_blocks 明确复制或新建策略 允许国家可登录,拦截国家返回预期错误

4. 国家、区域与数据可见性

Owneruser-service

配置项 主表 开启条件 验收标准
国家 countries 运营国家 enabled=1 /api/v1/countries 只返回新 App 允许的国家
区域 regions status=active 后台和 App 能查到预期区域
国家归属 region_countries 每个启用国家有且只有一个有效业务区域 新注册用户的 region_id 正确
存量用户重建 user_region_rebuild_tasks 只在映射变更或补历史数据时执行 task 完成且 UserRegionChanged outbox 已投递

不能根据服务器所在地、IP 或容器时区推断业务国家/区域。

5. 管理后台与 App 内容入口

Ownerserver/admin

配置项 主表 开启条件 验收标准
App 通用配置 admin_app_configs 新 App 必须有自己的 group + key H5 入口和功能跳转不读取其他 App 值
Banner admin_app_banners 至少一个符合首页/区域/国家口径的 active 内容 /api/v1/app/banners 在目标国家返回预期内容
弹窗 admin_app_popups 按产品需求设为 active并配置生效时间 /api/v1/app/popups 可见且跳转正确
开屏 admin_app_splash_screens 按 platform/国家/区域生效 /api/v1/app/splash-screens 返回预期素材
版本控制 admin_app_versions Android/iOS 当前生产版本均有记录 /api/v1/app/version 返回正确版本、build 和强更策略
Explore Tab admin_app_explore_tabs 显式启用并配置预期顺序 App 探索入口与后台一致

内容 API 返回 200items=[] 只证明接口可用,不代表运营配置已完成。

6. 腾讯云 IM、RTC 与播报

Ownergateway-serviceactivity-serviceroom-service;客户端长连属于腾讯云 IM。

配置项 配置/链路 开启条件 验收标准
IM UserSig gateway-service.tencent_im SDKAppID、secret、admin identifier 与线上 IM 应用一致 新 App 真实用户能登录 IM
IM callback gateway callback callback 能从合法 GroupID/请求中确定 app_code Fami/Lalu 回调不会互相落库
RTC UserSig gateway-service.tencent_rtc SDKAppID、secret、room ID 类型与客户端一致 真实设备进房、上麦、发流成功
RTC callback tencent_rtc.callback_url 不能把 app_code 写死为其他 App 回调日志与房间租户一致
全局/区域播报群 activity-service.broadcast 为新 App 和所有 active region 建立群 群 ID 含新 app_code,客户端能加入
播报 outbox im_broadcast_outbox worker 必须按记录 app_code claim、发送和 mark 新 App 消息从 pending 到 delivered无跨 App 更新

至少实测一条全局播报、一条区域播报和一条房间系统消息。

7. 房间配置

Ownerroom-service。Room Cell 仍然是房间核心状态 owner新 App 上线不得把房间状态复制到其他服务。

配置项 主表 开启条件 验收标准
麦位 room_seat_configs 有新 App 配置,否则明确接受代码默认值 创房后麦位数量与客户端一致
火箭 room_rocket_configs enabled=1 且奖励、油箱、频控已设定 完成加油、发射、奖励和 MQ 验证
宝箱 room_treasure_configs 产品需要时显式开启 开关与 App 入口一致
人机房 room_human_robot_configs 只有配好机器人账号和策略后才能开启 机器人加入/离开不污染真人 presence
区域置顶 room_region_pins 按新 App 运营需求单独配置 房间变更区域后重新建立置顶

8. 礼物、资源与装扮

Ownerwallet-service

礼物上线是一组不可拆分的配置:

配置项 主表 开启条件
资源定义 resources 依赖资源必须 status=active,素材 URL 可访问
资源组 resource_groupsresource_group_items 所有活动/VIP/成就引用必须映射到新 App 资源
资源商店 resource_shop_items 价格、有效期和上架状态已审核
礼物类型 gift_type_configs 礼物分类已按产品口径启用
礼物配置 gift_configs status=active,生效时间正确
礼物价格 wallet_gift_prices 每个 active 礼物都有有效价格
礼物区域 gift_config_regions 地区限制和新 App 的 region 映射一致
钻石分成 gift_diamond_ratio_configs 送礼所在区域有唯一有效分成规则

验收必须使用新 App 真实账号执行:礼物列表 → 余额校验 → 扣款 → Room Cell 表现 → RoomGiftSent outbox → 统计/活动/通知下游。

9. 充值、支付与兑换

Ownerwallet-service

配置项 主表/运行配置 开启条件 验收标准
充值商品 wallet_recharge_products 新 App 商品 active币种、金额、金币数正确 App 返回商品和后台一致
商品区域 wallet_recharge_product_regions 用新 App product_idregion_id 重建 每个运营区域都有预期商品
Google Play google_play 及包名/服务账号 新 package 和验单凭据正确 测试购买、验单、发币、consume 均成功
第三方支付 third_party_payment_channels/methods 渠道、国家、币种和回调签名已配置 下单和回调的 app_code 一致
USDT/币安等外部充值 service YAML/env 的 per-App 映射 必须有新 App 账户/地址,不能回落到 Lalu 创单、归集、确认数和入账正确
钻石兑换 wallet_diamond_exchange_rules active 规则已按运营口径配置 边界值和余额流水一致
红包 red_packet_configs 及档位表 开关、金额、份数、过期 worker 均支持新 App 发、抢、退、播报完整闭环

10. VIP

Ownerwallet-service;行为唯一依据是 vip_program_configs

配置项 主表 开启条件 验收标准
VIP 方案 vip_program_configs program_type、等级数、购买/升降级、发放模式明确 API 返回的方案与后台一致
VIP 等级 vip_levels 只有完成价格、时长和资源组配置的等级才能 active /api/v1/vip/packages 返回预期等级
VIP 权益 vip_level_benefits 每个 active 等级的权益和资源引用有效 购买/发卡后权益生效
日奖励 cron vip_daily_coin_rebate cron app_codes 含新 App金额和 UTC 日切口径已确认 当日 run、领取和钱包流水一致
进房/上线播报 activity IM broadcast 用户开关、VIP 级别和广播群完整 真实设备收到新 App 播报

等级处于 disabled 时,套餐接口返回空数组是正确保护行为,但该 App 不能因此被认为“VIP 已上线”。

11. 活动与奖励

Owneractivity-service

能力 主表/配置 上线必须同时确认
注册奖励 registration_reward_configs 开关、奖励类型、金额/资源组、每日限制
首充奖励 first_recharge_reward_configs/tiers 主开关和至少一个 active 档位
累充奖励 cumulative_recharge_reward_configs/tiers 主开关、周期口径和 active 档位
邀请奖励 invite_activity_reward_configs/tiers 邀请关系、有效邀请和充值事件消费就绪
七日签到 seven_day_checkin_configs/versions/rewards 开关、一个当前版本和 17 天完整奖励
每日任务 task_definitions/versions active 任务、周期、指标和奖励口径一致
成就 achievement_definitions/conditions active 成就引用的徽章资源属于新 App
成长等级 growth_level_tracks/rules/tiers 财富/魅力/游戏轨道及展示资源完整
CP 周榜 cp_weekly_rank_configs/rewards 开关、排名数、关系类型和奖励齐全
周星 weekly_star_cycles/gifts/rewards 当前 UTC 时间命中 active 周期,礼物和 Top 奖励完整
房间流水奖励 room_turnover_reward_configs/tiers 开关、周期、档位和钱包发放链路完整
转盘 wheel_rule_versions/prize_tiers 当前规则版本 active奖品和 RTP 口径已审核

主开关、奖励档位和奖励资源缺任何一项,该活动都不得标记上线。

12. 幸运礼物

Ownerlucky-gift-serviceactivity-service 中的旧副本不能作为正式运行依据。

配置项 主表/链路 验收标准
规则版本 lucky_gift_rule_versions 每个运营奖池有 active 规则
阶段档位 lucky_gift_stage_tiers 规则对应的 stage/tier 完整且 enabled
独立奖池 lucky_pools app_code + pool_id 初始化;只复制规则时不能复制对照 App 的余额、累计入池/出池或用户运行态
礼物映射 礼物配置与 pool 映射 只有新 App active 礼物才能进入抽奖
owner outbox lucky_gift_outbox 抽奖事实持久化并发布到独立 MQ topic
区域飘屏 activity 独立 consumer group 不得复用其他 consumer group且保留 app_code

真实验收要覆盖普通奖、大奖、幂等重试、钱包入账、outbox 投递和区域飘屏。

13. 游戏

Ownergame-service

配置项 主表 开启条件
游戏平台 game_platforms 平台 active启动和回调参数完整
游戏目录 game_catalog 新 App 明确选择要开放的游戏,不强制与对照 App 数量相同
展示规则 game_display_rules 每个 active 游戏有可见规则
自研游戏配置 game_self_game_configs、风控/新手策略 游戏开关、RTP、风控参数已审核
机器人 game_self_game_robots 自研对战需要补位时,必须有新 App 真实机器人用户
档位奖池 game_self_game_stake_pools 每个可玩档位有 active 奖池和初始水位
回调归属 gateway JWT → RequestMeta.app_code 厂商回调不能默认记入 Lalu

第三方游戏少于对照 App 不一定是错误;必须由产品/运营给出明确游戏清单。但自研游戏已对用户开放时,机器人和奖池为空属于上线阻断。

14. cron、MQ、outbox 和通知

配置项 Owner 开启条件 验收标准
cron 任务 cron-service 所有应在新 App 运行的 task app_codes 含新 App cron_task_runstask_name + app_code 生成成功记录
owner outbox publisher room/wallet/user/game/lucky-gift 只有 owner 服务扫描自己的 outbox 新 App pending 可持续转 delivered无长时间积压
RocketMQ consumer group 每个下游服务 不得共享 owner 的 outbox 状态或其他业务消费组 group 存在、无异常 lag、重投幂等
统计消费 statistics-service wallet/room/user/game 事实消费器已启用 新 App 聚合表产生 UTC 日数据
私有通知 notice-service RocketMQ 消费器为主链路 钱包/CP/房间通知均使用新 App 租户
系统/活动 inbox activity-service message owner 后台通知通过 owner API/fanout job 创建 不直写 inbox/fanout 表,能从 App 查看并已读

notice-service 的旧轮询 worker 关闭、RocketMQ consumer 开启是正常迁移状态,不能只看一个 enabled=false 就判定新 App 未开通。

15. 统计与数据大屏

Ownerstatistics-service;后台查询入口在 server/admin

  1. 确认 WalletRechargeRecordedGameOrderSettledRoomGiftSentRoomUserJoinedUserRegistered 事件都带新 app_code
  2. 确认消费幂等表已记录新 App 事件。
  3. 确认充值、游戏、礼物、活跃、注册和留存聚合表在 UTC 边界正确生成。
  4. 确认 admin 大屏选择新 App 时只查聚合表,不回查 owner 明细库。
  5. 使用可控测试账号产生一组注册、进房、充值、游戏、送礼事实,核对次日聚合。

16. 客户端与发布

项目 必须验证
flavor/品牌 App 名称、图标、包名、bundle ID、深链、主题和隐私页均为新 App
API host 生产包指向生产 API不得混入测试 host
Firebase flavor 使用自己的 google-services.json/iOS 配置
IM/RTC SDKAppID、UserSig 及回调链路完整
支付 package/product ID/签名与商店后台一致
版本 API 首个生产 build 已写入 admin_app_versions
埋点 心跳、页面、社交漏斗和游戏事件使用新 app_code

必须在真实 Android/iOS 设备上执行最终验收,不能只用 curl 代替 IM、RTC、支付和客户端跳转验证。

17. 正式上线验收清单

17.1 配置一致性

  • 新 App 在所有 owner 库的 app_code 一致。
  • 所有跨表引用已按业务键重建,不存在指向对照 App ID 的记录。
  • 全部敏感配置只存在运行时 env/密钥管理系统。
  • 两台或多台副本的 YAML、镜像 tag 和配置 hash 一致。

17.2 业务冒烟

  • 注册、登录、刷新 token、用户资料、国家/区域归属正常。
  • IM 登录、单聊、房间群、全局/区域播报正常。
  • RTC 进房、上麦、发流、回调和离开正常。
  • 创房、进房、麦位、踢人、锁房、房间恢复正常。
  • 礼物列表、送礼扣款、房间表现、收礼统计正常。
  • 充值商品、真实测试购买、回调验单、钱包入账正常。
  • VIP/活动/签到/任务/成就/周星等已宣布上线的能力全部真实验证。
  • 第三方游戏启动、回调归属和余额一致;自研游戏机器人/奖池可用。

17.3 异步与数据

  • owner outbox 无新 App 长时间 pending/failed 积压。
  • RocketMQ consumer group 存在且无异常 lag。
  • cron 所需 task 已产生新 App 成功运行记录。
  • 通知、inbox、播报和 push 不串 App。
  • 统计聚合表有新 App 真实事实UTC 边界正确。

17.4 发布结论

只有以下条件全部满足才能标记“可正式运营”:

  1. P0 阻断项为 0。
  2. 所有宣布上线的功能已完成真实设备和生产链路验证。
  3. 运营明确接受未上线的可选功能,且 App 客户端不展示无配置入口。
  4. 发布镜像、数据迁移、MQ、YAML/env、客户端版本和回滚方案均有记录。

18. Fami 生产差异快照2026-07-13

本节是对生产 YAML、生产 MySQL、线上镜像和公网 API 的只读快照,用于保留 Fami 从试运营转正式运营前的基线。后续修复后应追加新日期的验收结果,不覆盖本快照。

18.1 P0 阻断项

项目 Fami 当前状态 Lalu 对照 必须动作
礼物 gift_configs=0wallet_gift_prices=0 95 个 active 礼物、103 个 active 价格 按业务键创建 Fami 礼物和价格,验证送礼闭环
资源 535 条全部 deleted,有效资源/资源组/商城均为 0 501 active 资源、56 active 资源组 重建 Fami 资源体系和全部引用
VIP 方案 active但 VIP1VIP10 全部 disabled VIP1VIP8 active 只启用已完成价格、权益和资源配置的 VIP1VIP9
RTC callback 两台 gateway 回调 URL 都写死 app_code=lalu Lalu 符合当前值 调整回调归属,分别验证 Fami/Lalu RTC 事件
IM 播报 worker 线上 activity-service:20260712-main-7d011ce 仍以默认 Lalu context claim/reconcile Lalu 已投递 71,564 条 发布多 App claim/建群逻辑,实测 Fami 全局和区域播报
幸运礼物 owner lucky-gift-service 规则版本和档位均为 0 15 个规则版本、255 个档位 在 owner 库配置,不使用 activity 旧副本代替
首充奖励 开关 03 个档位全部 disabled 开关 13 个 active 确认奖励后启用并走真实充值事实
累充奖励 开关 08 个档位全部 disabled 开关 18 个 active 确认周期和奖励后启用
七日签到 开关 0无生效版本无奖励 开关 1有生效版本和 7 天奖励 创建 Fami 版本和 7 天奖励后启用
CP 周榜 开关 0无奖励 开关 13 个奖励 确认关系类型和奖励后启用
周星 当前 UTC 时间无 active 周期 Lalu 有 1 个 active 周期 创建 Fami 周期、指定礼物和 Top 奖励
自研游戏运行数据 机器人 0档位奖池 0 dice 机器人 80dice/rock 奖池 8 如 Fami 对用户开放自研游戏,先初始化机器人和奖池

18.2 运营内容缺口

项目 Fami 当前状态 Lalu 对照
首页 Banner 公网 API items=0 相同请求返回 10 条
弹窗 公网 API items=0 1 条
开屏 公网 API items=0 1 条
版本控制 version=""build_number=0 Android 1.0.9/109
H5 入口 只有 1 条 app config缺 23 个 h5-links 24 条 app config
第三方游戏目录 34 个 active 37 个 activeFami 少 RocketTeenPattiProLavaSlot
成长/成就展示资源 6 个头像框、25 个徽章档位和 32 个成就引用资源,但 Fami 无 active 资源 Lalu 有 active 资源

第三方游戏的三个差异需产品确认,不能在没有授权和产品结论时自动复制。

18.3 条件项

  • 币安账户映射当前只有 Lalu。
  • TRC20 USDT 收款地址当前只有 Lalu。
  • Fami 已有 16 个 active 充值商品和对齐的第三方支付方式;上述两项只在产品要求 Fami 开放对应渠道时才是阻断。

18.4 已就绪项

  • Fami App 注册状态为 active。
  • Firebase 项目已配置。
  • 16 个 cron 任务均已启用且 app_codes 包含 lalu/fami/huwaa
  • Fami 和 Lalu 均有 141 个 enabled 国家,启用国家无缺口。
  • Firebase、登录风控、CP 关系配置已建立。
  • 红包、房间火箭、邀请奖励、注册金币奖励、房间流水奖励已开启。
  • 财富/魅力/游戏成长等级的规则数量已与 Lalu 对齐,但展示资源仍受资源体系缺失阻断。
  • room、wallet、user、game、statistics 的共享 MQ/outbox 主开关已开启。

18.5 Fami 建议收敛顺序

  1. 重建 Fami 礼物、价格、资源、资源组和商城,修复成长/成就展示引用。
  2. 修复 RTC callback 的 App 归属,发布 activity 多 App 播报 claim/建群逻辑。
  3. lucky-gift-service owner 库配置 Fami 规则和档位,完成独立 MQ consumer 验证。
  4. 完成 VIP 价格/权益/资源后启用 VIP1VIP9。
  5. 按产品范围启用首充、累充、七日签到、CP 周榜和周星。
  6. 补齐 Banner、弹窗、开屏、版本和 H5 入口。
  7. 确认 Fami 游戏清单;如开放自研游戏,初始化机器人和档位奖池。
  8. 执行第 17 节的真实设备、业务、MQ、数据与统计验收确认 P0 为 0 后再标记可正式运营。

18.6 首批修复记录2026-07-13

本次只收敛 RTC/IM 业务租户隔离和幸运礼物初始化,不代表第 18.1 节其他 P0 已解除。

项目 修复结果 验证证据 状态
RTC callback 共享腾讯 RTC 应用不再从 URL 固定读取 app_code=lalugateway 验签后按 room_id 调 room-service 解析真实房间租户,再提交对应 Room Cell 两台 gateway 的 callback URL 均已改为无查询参数地址;rooms.room_id 无重复并已增加唯一索引gateway/room 双节点运行镜像 20260713-fami-app-scope-1 且 healthy CONFIGURED;仍需 Fami/Lalu 各一次真实设备上麦、退流回调后升为 VERIFIED
IM 播报 worker 同一腾讯 IM SDKAppID 下,群 ID、outbox claim、发送、mark 和 reconcile 均按记录 app_code 隔离;broadcast.app_codes 显式配置 lalu/fami/huwaa 腾讯 IM 云端已存在 hy_fami_bc_g_v2 及区域 2430 的 7 个 hy_fami_bc_r_v2_*activity 双节点运行镜像 20260713-fami-app-scope-1 且无 reconcile 错误 VERIFIED(建群与运行态);仍需客户端真实收一条区域/全局播报完成产品验收
幸运礼物规则 从 Lalu 复制所有规则版本和阶段档位到 Fami只变更租户键 Fami lucky 为 6 个规则版本/106 个档位;super_lucky 为 9 个规则版本/149 个档位enabled 数量与 Lalu 一致 VERIFIED(配置数据)
幸运礼物奖池 未复制 Lalu 奖池状态Fami 的 luckysuper_lucky 各自独立初始化 两个池均为 balance=100000reserve_floor=21000total_in=0total_out=0Fami RTP 窗口、用户状态、抽奖记录和 outbox 均为 0 VERIFIED(初始化数据);仍需真实普通奖/大奖/钱包/outbox 冒烟

发布前已执行 make protomake testdocker compose config;发布后 6 个实例均 healthy、restart count 为 0相关 CLB 后端权重均恢复为 100。