From 381da60ae46f03710938ddf80fc4d4dc9a733250 Mon Sep 17 00:00:00 2001 From: xsl Date: Sun, 1 Nov 2026 23:53:11 +0800 Subject: [PATCH] chore: commit test-phase secrets so a new dev machine needs no manual copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 测试验证阶段,换开发机时不再需要手工拷贝两个机密文件。已与用户确认安全 要求不高,代价是密钥进入 git 历史,上线前必须清理。 入库(.gitignore 用 ! 例外放行): - backend-java/src/main/resources/application-local.yml 淘宝 AppKey/AppSecret + verify-sign + mode=forward + forward-base - reference/facepp-skinanalyze/credentials.env 旷视 FACEPP_API_KEY / FACEPP_API_SECRET / FACEPP_SKINANALYZE_URL (从服务器同名文件裁剪而来,只保留旷视相关行,去掉了其它项目条目) 其它密钥防护保持不变:apikey.*、.env、*.env 等仍被忽略。 上线前必做(已写入条待办第 6 项与 .gitignore 注释): 1) 重置 AppSecret 与旷视 Key 2) git filter-repo 从历史清除这两个文件 3) 改回环境变量 / 保密字典注入 HANDOFF 1.5 节、待办第 6 项、交接检查清单已同步为「clone 即有」。 --- .gitignore | 19 ++++--- .../src/main/resources/application-local.yml | 16 ++++++ docs/HANDOFF-2026-11-02.md | 51 ++++++++----------- reference/facepp-skinanalyze/credentials.env | 16 ++++++ 4 files changed, 67 insertions(+), 35 deletions(-) create mode 100644 backend-java/src/main/resources/application-local.yml create mode 100644 reference/facepp-skinanalyze/credentials.env diff --git a/.gitignore b/.gitignore index 4b104f3..b515b5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,32 @@ -# 密钥与敏感配置 —— 绝不入库 +# 密钥与敏感配置 apikey.bash apikey.* +aipkey.bash .env .env.* *.env -credentials.env + +# ⚠️ 2026-11-02 测试验证阶段的例外(刻意入库,方便切换开发机) +# reference/facepp-skinanalyze/credentials.env —— 旷视 Face++ 凭据 +# backend-java/src/main/resources/application-local.yml —— 淘宝 AppKey/AppSecret +# 约束: +# 1) 仅限内网私有仓库 git.xiangsilian.com/xsl/juzi,不要 fork 到公开仓库; +# 2) 正式上线前必须重置密钥 → 从 git 历史清除 → 改回环境变量/保密字典注入; +# 3) 不要复制到聊天、文档、工单等任何外部渠道。 +# 下面两条用 ! 覆盖上面的通配规则(必须放在被覆盖的规则之后)。 +!reference/facepp-skinanalyze/credentials.env +!/backend-java/src/main/resources/application-local.yml # 运行时产物 node_modules/ *.log __pycache__/ -aipkey.bash h5/data/ temp/ # Java MVP 构建产物 /backend-java/target/ -# 临时打进 JAR 的淘宝配置(只用于联调,绝不提交) -/backend-java/src/main/resources/application-local.yml - # 便携工具链(体积大,本机安装,不入库) /tools/jdk17/ /tools/maven/ diff --git a/backend-java/src/main/resources/application-local.yml b/backend-java/src/main/resources/application-local.yml new file mode 100644 index 0000000..4e287fd --- /dev/null +++ b/backend-java/src/main/resources/application-local.yml @@ -0,0 +1,16 @@ +# Temporary validation only. This file is gitignored and must not be committed. +# It is baked into the JAR so SAE does not need TAOBAO_* environment variables. +# For the first end-to-end validation, signature verification is disabled because +# the current AppSecret is still suspect. Enable it only after resetting the +# AppSecret for AppKey 35486228 and updating the value below. +taobao: + app-key: "35486228" + app-secret: "b8bd05ebce2f8a34d28026b443ba3ed6" + verify-sign: false + + # 淘宝小程序的真实测肤仍在 1me.xajuzi.com 那套 Node 服务上(旷视调用、评分、报告都在那边)。 + # SAE 这边只做云网关适配层:把 /api/taobao/* 字节级透传过去。 + # forward-base 对应 nginx 里的 location /tb/(只允许聚石塔 NAT 出口 IP 访问)。 + mode: forward + forward-base: "https://1me.xajuzi.com/tb" + diff --git a/docs/HANDOFF-2026-11-02.md b/docs/HANDOFF-2026-11-02.md index 30a32ab..d2483cd 100644 --- a/docs/HANDOFF-2026-11-02.md +++ b/docs/HANDOFF-2026-11-02.md @@ -57,42 +57,35 @@ Set-ExecutionPolicy -Scope Process Bypass - 用系统安装的 JDK 17 + Maven 即可,**不需要**再下便携版 - 想复原老机器的布局:把 JDK 放 `tools/jdk17/`、Maven 放 `tools/maven/apache-maven-3.9.9/`(这两个目录 gitignore) -### 1.5 必须单独获取的机密文件(**不在 git 里**) +### 1.5 机密文件 —— **已随仓库提交(测试阶段例外)** -这两个文件**来源不同**,别搞混: +> 2026-11-02 决定:测试验证阶段优先「换机不用手工拷贝」,下面两个文件**已入库**。 +> 代价是密钥进入了 git 历史,正式上线前必须按本节末尾的清单清理。 -| 文件(放在仓库内的相对路径) | 内容 | 从哪来 | 没有会怎样 | +| 文件(仓库内相对路径) | 内容 | 用途 | 缺了会怎样 | |---|---|---|---| -| `backend-java/src/main/resources/application-local.yml` | 淘宝 AppKey/AppSecret + `mode: forward` + `forward-base` | **老开发机**(本仓库同路径,855 字节) | 打出的 JAR 没有 AppKey/Secret,`/session` 一定 401。只跑 `/ping`、不部署则不影响 | -| `reference/facepp-skinanalyze/credentials.env` | `FACEPP_API_KEY` / `FACEPP_API_SECRET` / `FACEPP_SKINANALYZE_URL` | **服务器**(老开发机上通常没有这个文件) | `h5/server.js` 启动即 `exit(1)`。**只做小程序端开发、不本机跑 H5 后端时,可以先不拷** | -| SSH 私钥 | 免密登录 `ubuntu@1me.xajuzi.com` | `ssh-keygen` 后把公钥追加到服务器 `~/.ssh/authorized_keys` | 无法部署 Node 侧 / 看日志 / 取上面的 credentials.env | +| `backend-java/src/main/resources/application-local.yml` | 淘宝 AppKey/AppSecret + `verify-sign` + `mode: forward` + `forward-base` | 打 JAR 时把配置塞进包里(SAE 不需要环境变量) | JAR 没有 AppKey/Secret,`/session` 一定 401;只跑 `/ping`、不部署则不影响 | +| `reference/facepp-skinanalyze/credentials.env` | `FACEPP_API_KEY` / `FACEPP_API_SECRET` / `FACEPP_SKINANALYZE_URL` | `h5/server.js` 启动时读取旷视凭据 | 本机跑 H5 后端时启动即 `exit(1)`;只做小程序端开发不需要 | + +克隆下来就都有了,**新机器不需要再手工拷这两个文件**。 + +**唯一还要自己配的是 SSH 密钥**(用于部署 Node 侧、看日志、跑 `deploy/` 里的脚本): ```powershell -# ① application-local.yml:从老机器的同一个相对路径拷(U 盘/网盘/局域网都行) -# 目标路径必须一模一样,否则 Spring 读不到 -Copy-Item <老机器>\juzi\backend-java\src\main\resources\application-local.yml ` - <新机器>\juzi\backend-java\src\main\resources\ - -# ② credentials.env:从服务器取(注意先建目录) -ssh-keygen -t ed25519 # 若新机器还没密钥 -# 把 ~/.ssh/id_ed25519.pub 内容追加到服务器 ~/.ssh/authorized_keys 后: -New-Item -ItemType Directory -Force <新机器>\juzi\reference\facepp-skinanalyze -scp ubuntu@1me.xajuzi.com:/home/ubuntu/juzi/reference/facepp-skinanalyze/credentials.env ` - <新机器>\juzi\reference\facepp-skinanalyze\ +ssh-keygen -t ed25519 -C "dev@newmachine" +# 把 ~/.ssh/id_ed25519.pub 内容追加到服务器 ~/.ssh/authorized_keys +ssh ubuntu@1me.xajuzi.com "systemctl is-active juzi-taobao" ``` -拷完验证(两个都应该是"被忽略",即 `git status` 里看不到它们): +**共享仓库的约束**(`.gitignore` 里也写了): -```powershell -git status --short # 不应出现这两个文件 -git check-ignore -v backend-java/src/main/resources/application-local.yml -git check-ignore -v reference/facepp-skinanalyze/credentials.env -``` +1. 仅限内网私有仓库 `git.xiangsilian.com/xsl/juzi`,**不要 fork 到公开仓库 / 推送到 GitHub**; +2. 不要把这些值复制到聊天、文档、工单、issue; +3. 正式上线前必须做三件事(列在待办第 6 项): + - 在开放平台**重置** AppSecret、在旷视控制台**重置** API Key + - 用 `git filter-repo` 把这两个文件从历史里清除,并 `push --force` + - 改回「环境变量 / 保密字典 / KMS」注入(`application.yml` 里已经支持 `TAOBAO_*` 与 Spring 占位符) -> 两个文件都**绝不能提交**。`.gitignore` 已分别用绝对路径和 `credentials.env` 通配挡住; -> 提交前 `git diff --cached --name-only` 自查一遍。 - -> 老机器若已不可用:AppSecret / 旷视 key 找项目负责人索取,或在开放平台重置(重置后记得同步更新服务器 `/etc/juzi/taobao.env` 与 JAR)。 ### 1.6 淘宝 IDE 的一个已知坑(Windows) @@ -280,7 +273,7 @@ ssh ubuntu@1me.xajuzi.com "tar -xzf /tmp/juzi-h5.tgz -C /home/ubuntu/juzi-tb && | 3 | 存储工程化 | 照片/原始 JSON/记录 → OSS + RDS;现在全在容器/单机磁盘,无清理 | | 4 | 旷视请求裁剪 | `return_maps` 请求 10 层但报告只用 6 层,可少传 4 层省带宽与落盘 | | 5 | WebP 转码(可选) | 实测:6 层图 WebP q80 省 54%,叠 50% 缩放省 84%;**先真机验证 `` 支持 WebP data URL** | -| 6 | 密钥治理 | `application-local.yml` / `/etc/juzi/taobao.env` 里的 AppSecret、JAR 内嵌 Secret → 改 KMS/保密字典,并**重置一次 AppSecret** | +| 6 | 密钥治理(**上线前必做**) | 两个密钥文件目前随仓库提交(见 1.5)。上线前:重置 AppSecret 与旷视 Key → `git filter-repo` 从历史清除 → 改回环境变量/保密字典;服务器 `/etc/juzi/taobao.env` 与 JAR 内嵌 Secret 一并处理 | | 7 | Java 端可选迁移 | `mode=native` 的登录接口已写好并测过(4 个用例),可把 auth 从 Node 搬到 Java;测肤仍留在 Node | | 8 | 仓库收拾 | `sdk-java-35479221/`、三个 `.pptx`、`tools/build_taobao_proposal_*.py` 仍未跟踪,建议加 ignore 或删除 | | 9 | 启用签名校验(Java 侧) | 当前 forward 模式下由 Node 验签;若切 `native` 或要 `/ping` 也验签,把 `verify-sign` 打开即可(算法已修复) | @@ -307,7 +300,7 @@ ssh ubuntu@1me.xajuzi.com "tar -xzf /tmp/juzi-h5.tgz -C /home/ubuntu/juzi-tb && - [ ] `npm ci`(taobao)跑过 - [ ] `tools/env-java.ps1` 能加载出 JDK17 + Maven -- [ ] `application-local.yml` 与 `credentials.env` 已从老机器拷来 +- [ ] `application-local.yml` 与 `credentials.env` 已在仓库里(clone 即有,无需手拷) - [ ] `taobao` 20/20、`backend-java` 11/11、`node h5/test/taobao-auth.js` PASS - [ ] IDE 打开 `taobao/` 并确认 AppKey 是 35486228 - [ ] 真机预览能看到图片(说明资产域名通) diff --git a/reference/facepp-skinanalyze/credentials.env b/reference/facepp-skinanalyze/credentials.env new file mode 100644 index 0000000..b0c939a --- /dev/null +++ b/reference/facepp-skinanalyze/credentials.env @@ -0,0 +1,16 @@ +# ===== 旷视 Face++ 凭据(skinanalyze_pro 专业版)===== +# +# ⚠️ 2026-11-02 测试验证阶段,为方便切换开发机,本文件已随仓库提交。 +# 约束: +# 1) 仅限内网私有仓库 git.xiangsilian.com/xsl/juzi;不要 fork 到公开仓库; +# 2) 正式上线前必须:重置该 key、把本文件从 git 历史中清除(git filter-repo)、 +# 改回「环境变量 / 保密字典」注入; +# 3) 不要复制到聊天、文档、工单等任何外部渠道。 +# +# 用法:set -a; source reference/facepp-skinanalyze/credentials.env; set +a + +# ---- 旷视 Face++(巨子测肤 skinanalyze_pro 测试接口)---- +# 试用key(cAa5...)已弃用: 旷视规则试用key不能调专业版。当前为正式key(EcZ...) +FACEPP_API_KEY=EcZiqYhA8eQSiRgXVem8mijgzPfSC2qp +FACEPP_API_SECRET=p62QRWv9tQitZ1tvXmEBV8AgmaS00lO8 +FACEPP_SKINANALYZE_URL=https://api-cn.faceplusplus.com/facepp/v1/skinanalyze_pro