lili 17727d08c3
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
feat(storage): 接入游戏内容对象存储与运行时提交门
冻结 GameArtifactManifest/GameSourceArchive 契约和 V34 pending/committed 状态记录,增加专用 writer 的全量回读物化校验,并让 Runtime API 在消费和发布前对账 committed、GamePackage checksum 与实际 engineBundle hash。隔离 staging 已验证真实消费拒绝未提交版本;源码桶权限仍保持 fail-closed,正式金标不切换。
2026-07-29 12:02:22 -07:00

71 lines
5.5 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