lili 1981a6be01
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
feat(storage): 闭合 Agent 到 Runtime 的 OSS 游戏链路
增加不可变源码检出、两阶段 finalize/activate、Runtime 同源对象读取与 iframe 安全边界,并用 fail-closed CI 门固定契约。Git 仅提交平台实现、契约、迁移和 SoT,不包含具体游戏源码、素材、bundle 或验收证据。
2026-07-30 05:21:44 -07:00

99 lines
7.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# tier2/config/infra.yaml —— tier2 基建数据面端点 + 凭据(运行时读;内网入仓)
# ════════════════════════════════════════════════════════════════════════════
# 【这份解决什么问题】
# tier2 P4 服务化(Agent Service / create_app)与落库要连三套内网基建:Redis(session 状态 +
# MessageBus)、MySQL(源工程版本 manifest 表)、MinIO(源文件全文 S3 兼容 OSS)。这些端点 + 口令
# 按创始人铁律(2026-06-18:内网阶段所有决策 + 密钥进项目文档、内网 Tailscale 凭据允许入仓)
# 集中落在一份配置文件里、运行时读;代码从配置取,绝不把端点/口令硬编码进 .py。
#
# 【凭据出处】
# 值誊自 docs/内网凭据与端点.md「基建数据面(mini-infra 100.64.0.8)」段(2026-06-24 从容器 env 抠出
# 落档)。该档是 single source of truth;此处是给 tier2 运行时读的副本。若凭据轮换,先改那份档,
# 再同步本文件(横切一致性主人 = 创始人 + 6c6g 文档线负责对账)。
#
# 【运行时读 + 三级回落】(口径对齐 worker/genconfig.py)
# service/infra_config.py 的 get(section, key, default) 每次调用按以下顺序取值,任一级取到即用:
# ① env 单点覆盖:TIER2_INFRA__<SECTION>__<KEY>(全大写、双下划线分隔)——临时压一个值不必改文件
# (例:换 Redis 端口 export TIER2_INFRA__REDIS__PORT=6380)。
# ② 本 YAML 的 section.key。
# ③ 调用方传入的 default(连本文件都缺该 key 时的最后防线)。
# 读文件 / 解析 YAML / env 转型的任何异常都不抛、不中断(best-effort):读不到或脏 → 落调用方 default。
#
# 【安全口径】内网 Tailscale 段(100.64.0.x),口令明文入仓是创始人明确授权的内网阶段做法(见上)。
# 一旦 tier2 走出内网 / 上公网,口令必须迁出仓库改走密钥管理 —— 这条作为 followup 长期挂在 P4 收口单。
# ════════════════════════════════════════════════════════════════════════════
# ── Redis:Agent Service(create_app)的 session 状态持久化 + MessageBus 跨会话事件总线 ──
# AgentScope 2.0.2 的 RedisStorage(host/port/db/password) 与 RedisMessageBus(host/port/db/password)
# 都只有 Redis 实现(无 in-memory/SQLite 版本),生产必须配 Redis。源码核验:
# storage/_redis_storage.py:77 RedisStorage.__init__(host, port, db, password, ...)
# message_bus/_redis_message_bus.py:44 RedisMessageBus.__init__(host, port, db, password, ...)
# Redis 需 AUTH(NOAUTH 已实证),故必须带 password。storage 与 message_bus 故意解耦,可走不同 db
# 隔离键空间(本配置默认同实例:storage→db 0,message_bus→db 1;按需调)。
redis:
host: "100.64.0.8" # mini-infra Tailscale IP
port: 6379
password: "9ea28f5d28d68b09bfd7ccfc31216a52" # requirepass(NOAUTH 已实证,必带)
storage_db: 0 # RedisStorage 用的逻辑库(session/agent/team 记录)
message_bus_db: 1 # RedisMessageBus 用的逻辑库(事件日志/inbox/run-lock;与 storage 隔离)
# ── MySQL:tier2 落库源工程版本表(manifest)——P4 第二装载(U2)用 ──
# 现状:Agent Service(U1)本身不直接连 MySQL(它的 session 状态走 Redis);MySQL 是 U2 落库面用的
# (源工程版本 manifest + 寻址)。先在此登记端点/口令,U2 的 store 实现从这里读、不重复抠凭据。
mysql:
host: "100.64.0.8"
port: 3306
user: "root"
password: "ZRH3jwYLOrntBcTAw29MW9BP"
database: "tier2" # tier2 专用库(与 game-cloud 业务库隔离;U2 建表前先 CREATE DATABASE)
# ── MinIO(S3 兼容 OSS):tier2 落库源文件全文 —— P4 第二装载(U2)用 ──
# key 约定:tier2-src/<game_id>/<version_id>/<工程内相对路径>(见凭据档)。与 ragflow 共用实例,
# tier2 另开 bucket(tier2-src)隔离。现状同 MySQL:U1 不直接用,U2 落库面读它。
minio:
endpoint: "100.64.0.8:9000" # S3 API 端点(控制台在 9001)
access_key: "ragflow" # root 即 ragflow(与 ragflow 共用实例)
secret_key: "6c4b77b2f055c8a66e00e3c38ef3d818c166951d478cc7cc"
bucket: "tier2-src" # tier2 源文件全文桶(U2 落库前先 mb 建桶)
kb_bucket: "cheap-kb" # 便宜档知识件外置知识包桶(W-CFG-KB;与 tier2-src 隔离、另立)
secure: false # 内网 http(非 https)
# ── 游戏内容制品:专用最小权限写入身份(不复用上面的 MinIO root)──
# 只允许 Put/Get 和 List 两个桶的 tenants/ 前缀,并允许读取桶区域;无 ListAll/Delete/建桶/策略管理权。
# 上传器只读本分区,缺失即拒绝联网。凭据权威副本见 docs/内网凭据与端点.md。
game_artifact_minio:
endpoint: "100.64.0.8:9000"
access_key: "game-artifact-writer"
secret_key: "4aa0a3f0036aac13cded3942c056df2c270b99cb7962624b"
artifact_bucket: "game-artifacts"
evidence_bucket: "game-evidence"
secure: false # 当前 Tailscale 内网;公网/生产必须切 TLS
# ── 游戏引擎无关源归档:独立最小权限身份(不复用 game_artifact_minio)──
# 只允许 game-sources/tenants/* 的 Get/Put/List 与分片恢复;无 Delete/建桶/策略管理权。
# source CLI 只读取本分区,缺失即拒绝联网,避免通过环境变量回退到制品 writer。
game_source_minio:
endpoint: "100.64.0.8:9000"
access_key: "game-source-writer"
secret_key: "f059ab4593ba7a679a7dbc2ac22305106fabfe2917f98ffacb4a6d67ef0ab0df"
source_bucket: "game-sources"
secure: false # 当前 Tailscale 内网;公网/生产必须切 TLS
# ── 游戏内容受信任控制面:Agent 只经 HMAC prepare/finalize/activate 写 Project/Runtime ──
# endpoint 指向 mini-desktop 上 game-cloud 的 admin-api;独立密钥只签原始 JSON body,不复用用户 Token。
# 客户端禁止跨 origin 重定向并对连接/读取统一使用 15 秒硬超时。
game_content_control:
endpoint: "http://100.64.0.7:48090/admin-api/aigc/game-content"
secret: "acfe0d5af3da62470f0cf2af4820f1e3fedbe76c81dd905ca847cf2480bf97b9"
timeout_s: 15
# ── 游戏内容 staging 业务库:Agent checkout/commit 的 committed 权威 ──
# 仅供 mini-desktop 上的隔离链路验收;127.0.0.1 是远端宿主自身,不能从开发机误连。
# CLI 必须显式传 --mysql-section game_content_staging_mysql,默认分区缺失时继续 fail-closed。
game_content_staging_mysql:
host: "127.0.0.1"
port: 13306
user: "root"
password: "yg1qq6-9RBur-tiil6DKxHtQ"
database: "ruoyi-vue-pro"