chore: commit test-phase secrets so a new dev machine needs no manual copy

测试验证阶段,换开发机时不再需要手工拷贝两个机密文件。已与用户确认安全
要求不高,代价是密钥进入 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 即有」。
This commit is contained in:
xsl
2026-11-01 23:53:11 +08:00
parent 8bc6251899
commit 381da60ae4
4 changed files with 67 additions and 35 deletions
+13 -6
View File
@@ -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/
@@ -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"
+22 -29
View File
@@ -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%;**先真机验证 `<image>` 支持 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
- [ ] 真机预览能看到图片(说明资产域名通)
@@ -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