Nacos 默认公共空间的真实 namespaceId 是空串,"public" 只是显示名(namespaceShowName)。 现状代码写 namespace: public 会带 tenant=public 静默落进一个 id 为 public 的空间, 路 B 写读两侧不一致时配置永远推不到(阶段〇同款坑)。真取证: GET /nacos/v1/console/namespaces 返 namespace:"" / namespaceShowName:"public"; nacos-sdk-python v1 client.py 逻辑 `if self.namespace: params["tenant"]=...`——空串不带 tenant=走默认空间。 改动(五处触点,均只动默认公共空间语义处): - game-cloud huijing-server application.yaml:discovery/config 两处 namespace public→""(+中文注释) - tier2 gen-worker service/nacos_registry.py:NACOS_NAMESPACE 默认值 public→""(+中文注释) - tier2 gen-worker tests/test_nacos_registry.py:断言随改 == "public" → == "" - docs/内网凭据与端点.md:Nacos 段补 namespaceId 口径行(空串非 public,写读两侧对齐) 不动:各模块 -dev/-local profile 的 namespace: dev(独立命名空间 dev,非默认公共空间语义); docs/plans 历史留痕档的 public 字面量(留痕层不改)。 验证:nacos_registry 单测 6 passed;application.yaml YAML 语法有效(两处 namespace 落空串); py_compile 通过;docs-gate 6/7 检绿(唯一 G3 死链为 pre-existing、与本改动无关)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
12 KiB
date, topic, canonical
| date | topic | canonical |
|---|---|---|
| 2026-07-02 | 内网凭据与端点 | true |
内网凭据与端点(authoritative · 内网阶段密钥/端点单一事实源)
创始人铁律(2026-06-18):内网阶段,所有决策 + 密钥都进项目文档,不靠环境变量。 内网(Tailscale)地址/密钥/token 允许入仓(
CLAUDE.md已授权:"内网,地址和密码可入仓")。需要 key 一律查本档——别再反复找创始人要。 本档 = 内网密钥/端点单一事实源。e2e / 生成产线 / 部署 / 量测 需 key 的地方都读这里。
new-api 网关(生成主线 LLM 网关)
NEWAPI_KEY(调网关的 token):sk-84GAintLi0YPG92nGh3fxdIYn6sB7NuOGw0FN491qu1h8NXTNEWAPI_BASE_URL:http://100.64.0.8:3000(mini-infra)- ⚠️ baseUrl 坑:Java(Spring AI)侧用 host 根、不带
/v1(http://100.64.0.8:3000,经stripV1Suffix);Python(openai)侧base_url要带/v1。见.agents/skills/saa-graph-orchestration.md §3。
- ⚠️ baseUrl 坑:Java(Spring AI)侧用 host 根、不带
- 协议端点(同一 baseUrl、统一
NEWAPI_KEY、协议由调用方选):- OpenAI 兼容:
POST {baseUrl}/v1/chat/completions - Anthropic 原生:
POST {baseUrl}/v1/messages(thinking 分离;MiniMax-M3「用对它」走这条) - 接入铁律(2026-06-22 纠正旧口径):统一出口 = new-api 网关(baseUrl +
NEWAPI_KEY),统一计费 / 密钥 / 审计;协议与 SDK 不锁——OpenAI 兼容 / Anthropic 原生 / 厂商 SDK 均可,只要 baseUrl 落 new-api、key 用NEWAPI_KEY。作废「唯一 OpenAI 兼容出口 / 绝不直连厂商 SDK」旧表述(new-api 只是统一端点,不锁协议)。
- OpenAI 兼容:
- 用途:
SaaFullGraphE2eTest(-Dsaa.e2e=1)/ 生成产线 / gameDefinition 路 cutover ≥60% 量测(003-U1 第一步)都用它。 - 上游 channel keys(new-api 配的各 provider key,非调网关 token):
game-cloud/huijing-server/src/main/resources/application.yaml的channels.*.api-key(行 ~207-290)。 - 可用模型档(对比测试 / 证路用 · 2026-06-25 补):
glm-5.2—— Anthropic message 协议(走/v1/messages),定位 opus 高级模型档,上下文 512K。后续作高级档对比测试 / 强模型 cross-check 证路用,填补复杂档「真强模型证路」此前缺 opus 档的空缺(原 deepseek-v4-pro 跨族证路力弱)。- 便宜档生成主力 = MiniMax-M3(Anthropic 原生分离 thinking,见上「协议端点」);其余 provider 模型见 application.yaml
channels.*。
机器(Tailscale 内网)
| 机器 | ssh 别名 | Tailscale IP | 角色 |
|---|---|---|---|
| 6c6g(本机) | — | 100.64.0.9 | 常驻大脑(文档/计划/评审);禁 chrome(exit 144) |
| mini-desktop | mini-desktop |
100.64.0.7 | 权威构建 / e2e 门(x86 同构);staging repo /root/game-staging/repo |
| mini-infra | mini-infra |
100.64.0.8 | 基建(new-api:3000 / PostgreSQL / Redis / Gitea / Docker) |
| lili-mac | lili-mac |
100.64.0.10 | Mac 开发执行线(非常驻,会休眠) |
Git 远程
- Aliyun Gitea:
ssh://git@101.200.34.71:2222(clone/fetch/push 默认走它)
基建数据面(mini-infra 100.64.0.8 · Docker · 2026-06-24 从容器 env 抠出落档)
tier2 P4 服务化/落库要用:Agent Service 的 MessageBus/session 走 Redis;第二装载落库 manifest 进 MySQL、源文件全文进 MinIO(S3 兼容 OSS)。
| 服务 | 端点(Tailscale) | 凭据 | 用途 |
|---|---|---|---|
| Redis | 100.64.0.8:6379 |
requirepass = 9ea28f5d28d68b09bfd7ccfc31216a52 |
tier2 Agent Service MessageBus / session 状态(create_app) |
| MySQL | 100.64.0.8:3306 |
root / ZRH3jwYLOrntBcTAw29MW9BP |
tier2 落库源工程版本表(manifest);game-cloud 业务库 |
| MinIO(S3 兼容 OSS) | 100.64.0.8:9000(控制台 9001) |
ragflow / 6c4b77b2f055c8a66e00e3c38ef3d818c166951d478cc7cc |
tier2 落库源文件全文(key=tier2-src/<game_id>/<version_id>/<相对路径>) |
| PostgreSQL | 100.64.0.8:5433(外)→5432(内) |
(按需补;new-api/ragflow 用) | — |
Redis 需 AUTH(NOAUTH 已实证);MinIO root 即 ragflow(与 ragflow 共用实例,tier2 另开 bucket 如
tier2-src隔离)。这些是内网 Tailscale 凭据、按铁律入仓。
Nacos 配置中心 + 服务发现(mini-infra 100.64.0.8 · 2026-07-01 自托管落档 · 切片一 阶段〇 B1)
game-cloud 是 Spring Cloud Alibaba,Nacos 是其原生配置中心 + 服务发现。自托管在 mini-infra,standalone + 外部 MySQL 后端 + lean 512m JVM,纯增量部署(不动既有容器)。配置控制面设计 §3.7 采纳。C1/C2/D 引用的
${NACOS_PASSWORD}= 下面的 admin 口令。
| 项 | 值 |
|---|---|
| 控制台 / OpenAPI | http://100.64.0.8:8848/nacos(readiness 探针 /nacos/v1/console/health/readiness,在 auth 白名单内、免鉴权) |
| admin 账号 | 用户名 nacos / 口令 3157df7c3edf6c1ecc8a0a58a6efe3a9(v2.4.3 无内置默认账号,首启 API 建;登录返 globalAdmin JWT) |
鉴权 token(NACOS_AUTH_TOKEN = token.secret.key) |
wBMa0tgBihFX6IqJvq364+xIgTb0O9ZpRGY1xE+lTWg=(base64,解码 32 字节;JWT 签名密钥) |
| server identity(server 间鉴权头) | key nacosServerIdentity / value f358e96034ab2cd5e41c1a691b4200bb6f576849d61ed4dd |
| MySQL 后端 | 复用既有 100.64.0.8:3306 的 nacos 库(root/ZRH3jwYLOrntBcTAw29MW9BP,不新增实例);12 张官方表 |
| 部署位置 | mini-infra /opt/infra-nacos(compose 源在仓 deploy/infra/nacos/);镜像 nacos/nacos-server:v2.4.3 |
| 命名空间(namespaceId) | 默认公共空间 = 空串 "",勿写字面量 public——public 只是显示名(namespaceShowName),不是 id。写侧(game-cloud SCA / yudao publish)与读侧(worker nacos_registry / NacosHotConfig)一律用空串;写 public 会静默落进另一个空间、配置永远推不到(阶段〇同款坑)。实测 GET /nacos/v1/console/namespaces 返 namespace:"" / namespaceShowName:"public"。业务生成配置若要隔离,另建真实 namespaceId、勿复用显示名 |
- 密钥注入:上面四个密钥在服务器上物化为
/opt/infra-nacos/.env(chmod 600、不入仓);本文档是权威副本,compose 文件只用${VAR}引用、无明文。 - 运维:起/停
cd /opt/infra-nacos && docker compose up -d / down;探活NACOS=http://100.64.0.8:8848 bash deploy/infra/nacos/health-check.sh(绿=readiness 200)。standalone 单机 512m,实测常驻内存 ~627M。 - admin 口令由首启 API
POST /nacos/v1/auth/users/admin一次性设定(重复调用无效);改口令走登录后的用户管理 API,并同步回本档。
RocketMQ 异步消息队列(mini-infra 100.64.0.8 · 2026-07-01 自托管落档 · 切片一 阶段〇 B2)
game-cloud 是 Spring Cloud Alibaba,RocketMQ 是其原生异步消息基建,承载异步生成队列。自托管在 mini-infra,单机 NameServer + 单 Broker + lean JVM(broker 1g / namesrv 512m),纯增量部署(不动既有容器)。配置控制面设计 §3.7 采纳。C3(game-cloud)
rocketmq.name-server: 100.64.0.8:9876,gen 队列在AIGC_GEN_TOPIC上生产 / 消费。
| 项 | 值 |
|---|---|
| NameServer | 100.64.0.8:9876(客户端 rocketmq.name-server / NAMESRV_ADDR 指这里) |
| Broker | 100.64.0.8:10911(brokerName broker-a、DefaultCluster、ASYNC_MASTER;brokerIP1 钉死 Tailscale 地址,故 NameServer 返回的 broker 地址跨机可达) |
| gen 队列 topic | AIGC_GEN_TOPIC(autoCreateTopicEnable=true,生产端首发消息时自动建;C3 生产 / 消费) |
| 鉴权 | 无(MVP 单机内网,未开 ACL、无密钥) |
| 部署位置 | mini-infra /opt/infra-rocketmq(compose 源在仓 deploy/infra/rocketmq/);镜像 apache/rocketmq:5.3.1 |
- 存储:store / logs 落宿主
/opt/infra-rocketmq/data(不入仓)。⚠️ 容器以 uid=3000 运行,该 data 目录部署时已chown 3000:3000,否则 broker 无权写 CommitLog、起不来。 - 运维:起/停
cd /opt/infra-rocketmq && docker compose up -d / down;探活NS=100.64.0.8:9876 bash deploy/infra/rocketmq/health-check.sh(绿=NameServer 端口通 + Broker 在 NameServer 注册)。broker 1g / namesrv 512m,实测常驻内存 broker ~1.24G、namesrv ~186M。
tier2 P4 服务化部署拓扑(2026-06-24 首次部署成功落档 · 团队共享)
内部开发阶段 · 内网环境;为开发方便,端点 + 凭据明文记录(铁律授权)。下面是「服务跑在哪、怎么起、连什么」。
Agent Service(agentscope 2.0.2 create_app)—— 跑在 mini-desktop
- 端点:
http://100.64.0.7:8200(Tailscale;本机127.0.0.1:8200)。/docs、/openapi.json返 200。 - 起服务:
ssh mini-desktop→cd /root/tier2-run/tier2/gen-worker && NEWAPI_KEY=<见 new-api 段> NO_PROXY=100.64.0.8 /root/.venvs/agentscope-tier2/bin/python -m service.app(无 CLI serve 命令,模块自调 uvicorn;默认 0.0.0.0:8200,TIER2_SERVICE_PORT可改)。 - REST 路由:
/credential/agent/sessions/chat/sessions/{id}/stream(SSE 收事件)/workspace/mcp/workspace/skill/model/schedule。 - 后端:Redis(mini-infra:6379)做 session 状态 storage(db0)+ MessageBus(db1)——见上「基建数据面」。
- 代码:dev/2.0.0
tier2/gen-worker/service/{app,infra_config,bootstrap}.py;基建配置tier2/config/infra.yaml(运行时读)。
第二装载落库 BackendStore(TIER2_STORE=backend 切换)
- manifest → MySQL
tier2库 · 表tier2_source_project_version(幂等键(game_id, source_hash);表首次 save 自建,建库 SQLtier2/config/schema/tier2_source_project_version.sql)。 - 源文件全文 → MinIO 桶
tier2-src· keytier2-src/<game_id>/<version_id>/<工程内相对路径>。 - 已验:save→fetch 往返、main.js 内容字节一致(2026-06-24)。
B1 控制面有界 resume(service/control_plane.py)—— 真驱服务跑一款到门绿落库
- 它是服务消费方:驱动上面的 :8200 服务,每回合等 SSE 末态(REPLY_END)→ 独立跑 run_gates 机器判门 → 门绿落库 / 否则带 verdict 反馈续修,直到门绿/预算耗尽。等价 CLI
run_studio的外层有界 resume,补服务态此前缺的那道循环。 - 跑一款(detached,日志落
cp-smoke.log):ssh mini-desktop cd /root/tier2-run/tier2/gen-worker NEWAPI_KEY=<见 new-api 段> NO_PROXY=100.64.0.8 \ setsid /root/.venvs/agentscope-tier2/bin/python -m service.control_plane <game_id> \ --base-url http://127.0.0.1:8200 --brief "<一句话富游戏题面>" --max-resumes 3 \ >/root/tier2-run/cp-smoke.log 2>&1 </dev/null & - 评门
game_id= 框架分配的session_id(九工具按它管工程目录game-runtime/games/_tier2-gen/<session_id>);控制面不靠内存 session 判收敛,靠每回合独立 run_gates。 - 凭据体口径(2026-06-24 smoke 实证定稿):POST
/credential/要{data:{type:"anthropic_credential",api_key,base_url}}(凭据载荷嵌data、无model);POST/chat/的input.content必须是内容块列表[{type:"text",text:...}]、不能是裸字符串。模型名在 sessionchat_model_config.model。
运行环境(mini-desktop · 权威运行机)
- venv:
/root/.venvs/agentscope-tier2(agentscope[full]==2.0.2+redis/pymysql/minio/httpx/esbuild/ws/phaser)。 - 部署 worktree:
/root/tier2-run(detached @ dev/2.0.0;同步新代码 =git fetch origin dev/2.0.0 && git checkout origin/dev/2.0.0)。 - 装依赖:
/root/.venvs/agentscope-tier2/bin/pip install -r tier2/gen-worker/requirements.txt(含 pymysql/minio)+ redis httpx。 - 起服务铁律(踩坑):经 ssh 起常驻服务,必须
setsid … >log 2>&1 </dev/null &完全脱离会话——nohup … &会让 ssh 通道挂住、timeout ssh到点把启动一并打断(实测 service.log 空、:8200 不起)。起完用单独一条只读 ssh 轮询/openapi.json=200 确认就绪。 - 纪律:真玩门(run_gates / chrome / esbuild)只在 mini-desktop;6c6g 禁 chrome、只做静态校验。
历史 demo 服务:feie-005 富游戏静态服务在
mini-desktop:4180(python -m http.server 4180 --directory /root/tier2-run),供创始人亲玩;非生产、可随时关。
其余基建密钥(Gitea 等)按需补入本档,别散落 env var 或只留在对话。决策同理——拍板进对应 plan / 本档,不留口头。