feat(migrate): 用户中心迁到 pangolin.yanmeiai.com/user/ + 域名配置化
Deploy Server / deploy-server (push) Successful in 2m55s
Deploy Site / deploy-site (push) Successful in 2m41s
Deploy Client / build-windows (push) Successful in 1m47s
Deploy Client / build-android (push) Successful in 7m39s
Deploy Client / build-macos (push) Successful in 3m40s
Deploy Client / build-ios (push) Successful in 4m48s
Deploy Client / release-deploy (push) Successful in 2m25s

原独立子域 app.yanmeiai.com → 主站子路径 /user/(用户选停用旧域名):
- 域名配置化(去硬编码):客户端 kWebUserCenterBaseUrl 收进 api_config.dart
  (dart-define 可覆盖);官网 site.ts、服务端 CORS_ORIGINS 本就是配置
- 用户中心 next.config basePath=/user;layout.tsx 的 /colors_and_type.css 手动
  拼 basePath(public 根绝对资源不自动加前缀,否则 404)
- CI 合并部署:compile-site + compile-usercenter + combine-site(用户中心并入
  dist/user/ + _headers 按 /user/* 分域:官网严格 CSP,用户中心 unsafe-inline+
  connect-src https)→ 单次部署 pangolin-site;删独立 pangolin-usercenter 部署
- 服务端 CORS 默认 origin app.yanmeiai.com → pangolin.yanmeiai.com(+ 测试)
- 客户端 web_launch 走新址 → 随 client-v1.0.62;go test CORS 过、flutter analyze 净

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
This commit is contained in:
wangjia
2026-07-07 17:33:22 +08:00
parent 6a46e3109a
commit 4940278ea5
12 changed files with 76 additions and 52 deletions
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# combine-site.sh — 把用户中心(web/usercenter/out/)并入官网产物,供**单次** CF Pages
# 部署到 pangolin-site:官网在 /、用户中心在 /user/(域名迁移:原独立子域
# app.yanmeiai.com → pangolin.yanmeiai.com/user/)。
#
# 关键:两个 app 的 CSP 不同(官网用脚本哈希 + connect-src 'self';用户中心要
# 'unsafe-inline' + connect-src https 调 api)。CF Pages 只读产物根 _headers,故把
# 用户中心的 _headers 规则前缀重定到 /user/*,追加在官网规则之后 —— CF Pages 对同
# 一路径「后写规则覆盖先写」,于是 /user/* 命中用户中心 CSP,其余走官网 CSP。
#
# 由 compile-site.sh + compile-usercenter.sh 先产出 dist/ 与 out/;从 repo 根调用。
set -euo pipefail
DIST=web/website/dist
UC=web/usercenter/out
[ -d "$DIST" ] || { echo "==> combine-site: $DIST 不存在(先跑 compile-site.sh)" >&2; exit 1; }
[ -d "$UC" ] || { echo "==> combine-site: $UC 不存在(先跑 compile-usercenter.sh)" >&2; exit 1; }
# 1) 用户中心产物挂到 /user/。
rm -rf "${DIST}/user"
mkdir -p "${DIST}/user"
cp -R "${UC}/." "${DIST}/user/"
# 2) 合并 _headers:用户中心路径规则前缀 /user,追加到官网 _headers 之后。
# 删掉并入产物里那份会被 CF 忽略的 /user/_headers,避免误导。
rm -f "${DIST}/user/_headers"
{
echo ""
echo "# ==== 用户中心(/user/*)独立 CSP,combine-site.sh 从 usercenter/_headers 重定 ===="
# 行首 '/'(路径规则)前缀 /user;'#' 注释与缩进的 header 行不动。
sed -E 's#^/#/user/#' "${UC}/_headers"
} >> "${DIST}/_headers"
echo "==> combine-site: done — 用户中心并入 ${DIST}/user/,_headers 已按 /user/* 分域合并"
ls -la "${DIST}/user" | head
+3 -2
View File
@@ -1,7 +1,8 @@
#!/usr/bin/env bash
# compile-usercenter.sh — build the Next.js 用户中心 (web/usercenter) as a static
# export (output: web/usercenter/out/). Deployed to Cloudflare Pages
# (project pangolin-usercenter, 自定义域 app.yanmeiai.com) by deploy-usercenter.sh.
# export (output: web/usercenter/out/, basePath=/user)。由 combine-site.sh 并入官网
# dist/user/,随官网一起部署到 CF Pages pangolin-site(pangolin.yanmeiai.com/user/)。
# 域名迁移:原独立子域 app.yanmeiai.com 已停用。
#
# ⚠️ 必须以「真实 API」模式构建:NEXT_PUBLIC_API_MODE=http。否则 lib/api/client.ts
# 默认落到 mock(内存假数据),部署上去登录/订阅全是演示数据。API 域名是公开信息
-28
View File
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# deploy-usercenter.sh — 部署 Next.js 用户中心 (web/usercenter/out/) 到 Cloudflare
# Pages(项目 pangolin-usercenter,自定义域 app.yanmeiai.com)。纯静态导出,全程
# HTTPS,不落 VPS,与节点 :443(sing-box)无冲突。
#
# 需环境变量:
# CLOUDFLARE_API_TOKEN 带 Account > Cloudflare Pages > Edit 权限的 CF token
# CLOUDFLARE_ACCOUNT_ID CF 账户 ID
# 由 compile-usercenter.sh 先产出 web/usercenter/out/;从 repo 根调用。
set -euo pipefail
if [ ! -d web/usercenter/out ]; then
echo "==> deploy-usercenter: web/usercenter/out/ 不存在 — 拒绝部署" >&2
exit 1
fi
if ! find web/usercenter/out -mindepth 1 -print -quit | grep -q .; then
echo "==> deploy-usercenter: web/usercenter/out/ 为空 — 拒绝部署" >&2
exit 1
fi
: "${CLOUDFLARE_API_TOKEN:?deploy-usercenter: CLOUDFLARE_API_TOKEN 未设(需带 Pages:Edit)}"
: "${CLOUDFLARE_ACCOUNT_ID:?deploy-usercenter: CLOUDFLARE_ACCOUNT_ID 未设}"
echo "==> deploy-usercenter: wrangler pages deploy → project pangolin-usercenter (branch main)"
npx --yes wrangler@4 pages deploy web/usercenter/out \
--project-name=pangolin-usercenter --branch=main --commit-dirty=true
echo "==> deploy-usercenter: done"