18 Commits

Author SHA1 Message Date
大森林
1e58fd5490 docs: 再次精简 README 与部署文档,按主题拆分
目标:门面文档只放"最常用",把"深水区"分到独立文件,按需查阅。

README(299 → 205 行):
- 合并 "为什么选择 Jeepay" + "适用场景" 为 "Jeepay 适合谁" 一节。
- 删除 "系统能力概览"(信息已在项目简介 + Jeepay 适合谁里)。
- 删除 "快速开始"(环境要求 / 代码获取 / 首次启动流程都在 docs/deploy/*
  里更详细)。
- 删除 "在线体验" + "版本与兼容性说明"(前者并入"贡献与协作"尾行,
  后者内容已散在 CONTRIBUTING.md / upgrade.md 里)。
- "贡献与协作"段一句话指向 CONTRIBUTING.md,不再重复列清单。

docs/deploy/shell.md(248 → 79 行):只保留"5 分钟上手 + 常用命令 +
卸载 + 高级覆盖项表"。移除宿主端口冲突详解、HTTPS 反代、RocketMQ 排查、
ARM64 说明等细节段,全部外迁。

docs/deploy/compose.md(218 → 63 行):目录约定 + 启动命令 + 端口 /
账号 + 常用命令;移除镜像发布章节(对终端用户无用)外迁。

docs/deploy/troubleshooting.md(31 → 132 行):从 shell.md 吸收 RocketMQ
启动失败、brokerIP 缓存问题、WebSocket 101 卡住、application.yml 变目录、
镜像 403、打包排障现场等排障条目,成为统一的故障诊断入口。

新增 docs/deploy/https.md(88 行):域名 + HTTPS 反代模板(从 shell.md
搬出),含 nginx 配置示例、certbot 申请命令、第三方支付回调 URL 注意
事项、防火墙建议。

新增 docs/deploy/publish.md(62 行):Docker Hub / 华为云 SWR 镜像发布
脚本说明(从 compose.md 搬出),只给维护者看。

净删除 528 行,新增 211 行;整体更紧凑,每篇文档聚焦单一主题。
2026-04-22 13:08:43 +08:00
大森林
03f0387f57 fix(install): install.sh 在 dash/POSIX sh 下执行也不会挂
现象:新机器(Ubuntu / Debian,/bin/sh 指向 dash)上执行
  sh install.sh
在第 42 行 \`exec > >(tee -a "$INSTALL_LOG_FILE") 2>&1\` 处报语法错误,
原因是 process substitution \`>(...)\` 是 bash 专有语法,dash 不支持。
脚本里还用了 [[ ]] 和 /dev/tcp,同样 bash-only。

修复:

- install.sh shebang 由 #! /bin/sh 改为 #!/usr/bin/env bash。
- 在 shebang 下方加保护:如果 BASH_VERSION 为空(说明是被 sh/dash 拉起来的),
  就 exec bash "$0" "$@" 自动转交;bash 不存在才明确退出并给安装指引。
  这样 sh install.sh 和 bash install.sh 两种方式都能跑通,兼容历史
  README 抄过来的命令。
- show_usage / summary box 里的 "sh install.sh / sh uninstall.sh"
  改成 "bash ...",与推荐用法一致。
- docs/deploy/shell.md 六处 "sh install.sh / sh uninstall.sh"
  全量改成 "bash ...",CentOS / Ubuntu 一键命令同步。

uninstall.sh 为纯 POSIX sh,不受影响,shebang 保留 #! /bin/sh。

验证:
- bash -n install.sh 通过;本地 test_*.sh 三条 PASS。
- dash install.sh --help 自动转交 bash,正常输出帮助。
- bash install.sh --help 也正常输出。
2026-04-20 19:09:40 +08:00
大森林
f4827d887d fix(nginx): 补齐 WebSocket 反代必需的 HTTP/1.1 + 长超时
现象:商户端支付测试页通过 ws://.../api/anon/ws/payOrder/... 订阅订单
状态,浏览器握手显示 101 Switching Protocols 但支付成功后前端收不到
推送消息。

根因:内层 nginx.conf 三个 server 块的 location /api/ 虽已设置 Upgrade/
Connection 头,但遗漏了 proxy_http_version 1.1。nginx 默认 proxy 用
HTTP/1.0,HTTP/1.0 下 Connection: close 是隐式行为,WS 握手能返回 101
但连接紧接着被关闭;即便没关,默认 proxy_read_timeout 60s 也会把长期
无消息的订单监听连接静默断开。

修复:

- docs/install/include/nginx.conf 三个 server 块(19217 / 19218 / 19216)
  的 /api/ 和 / 统一补:
    proxy_http_version 1.1;
    proxy_read_timeout  3600s;
    proxy_send_timeout  3600s;
  保留已有的 Upgrade / Connection 头与 X-Forwarded-* 透传。nginx -t
  语法校验通过。

- docs/deploy/shell.md "配置域名 + HTTPS" 段的外层 nginx 示例同步补上
  这三行 + 注释;反代注意事项新增一条 WS 专门说明。

客户外部自建的反代(比如 mch-open.jeepay.vip 前面那台)如果也缺这些
配置,同样会触发,文档示例现在对照一眼就看到。
2026-04-20 18:35:34 +08:00
大森林
41ca40b321 feat(install): -y 无交互 + 日志落盘 + summary box;shell.md 加 5 分钟上手
install.sh:
- 新增 -y / --yes / -h / --help 参数;-y 下跳过两处 yes/no 确认。
- 顶部 exec > >(tee -a "$INSTALL_LOG_FILE") 2>&1 把全流程 stdout/stderr
  同时写到 /tmp/jeepay-install-<时间戳>-<pid>.log,失败时可完整回放。
- 结束前打印新的 summary box:安装目录 / nginx 配置 / 日志路径 / 三个
  平台访问地址 + 默认账号 / 常用命令(ps / logs / 一键卸载)。
- 移除 root 校验前的阻挡,让 --help 在非 root 下也可用。

docs/deploy/shell.md:
- 最顶部新增"5 分钟上手"小节:一条命令 + 默认值表 + 访问地址 +
  卸载命令,让首次用户粘贴即用。
- 合并"架构前提 / 锁定源码版本 / 自定义镜像源(高级)/ 想指定固定
  端口"四段冗余内容为统一的"高级覆盖项",并给出覆盖变量总表。
- 文案顺手精简:去掉 SWR banner 独立章节(信息已并入 5 分钟上手表格),
  删掉几处重复叙述。

远端回归(Anolis OS,rootDir=/home/jeepay-v329,--yes 模式):
- sh install.sh --help / -y 参数识别 OK;
- 日志文件写入 /tmp/jeepay-install-20260420-123304-66734.log 完整;
- [8] 自检三条全绿(healthcheck / HTTP / vercode);
- summary box 完整出现在 stdout 与日志尾部。
2026-04-20 12:36:01 +08:00
大森林
db7fbf232d fix(install): 修复 MySQL/Redis hostname 与密码错配,发布 V3.2.7
关键修复。此前 Shell 部署上来登录页验证码不出、任何 DB 操作失败,
原因是应用配置文件(conf/*/application.yml)沿用 Docker Compose 的
约定,但 Shell install.sh 启动容器用了 Compose 之外的名字:

- hostname 错配:yml 里 jdbc:mysql://mysql:3306 / host: redis,而
  install.sh 启动的容器叫 mysql8 / redis6,jeepay-net 内部 DNS 解析
  "mysql" / "redis" 失败 → UnknownHostException。
- 密码错配:yml 里 password: rootroot(Compose 默认 root 密码),
  install.sh 用 config.sh 的 mysql_pwd(默认 jeepaydb123456)初始化
  MySQL,两者不一致 → 连库 Access denied。

[8] 自检只 curl 了 HTTP 根路径,Spring Boot 懒加载 DB/Redis 连接,
所以 HTTP 200 但实际一用就报错。之前远端测试都没真请求 /vercode
这类 DB+Redis 通路,问题被遮蔽。

业务代码零改动,与 3.2.0 业务镜像完全兼容。

修复:

- docker run mysql8 追加 --network-alias mysql;
- docker run redis6 追加 --network-alias redis;
- 复制 conf/* 到 service/configs/ 后,对三份 application.yml 执行
  sed "s|password: rootroot|password: $mysql_pwd|" 统一替换 datasource
  密码(Redis password 为空、activemq password="manager" 均不影响)。
- [8] 自检新增:curl 运营平台 /api/anon/auth/vercode。200 表示 MySQL
  + Redis 连通 OK;非 200 打印两种典型原因(alias / 密码)与排查命令。
- install.sh / shell.md / config.sh 默认 jeepayRef 升到 V3.2.7;
  version.md / upgrade.md 追加变更记录。

远端回归(Anolis OS,rootDir=/home/jeepay-v327):
- 全流程 [1] - [7] 通过;
- [8] 三个应用 healthy、三个 HTTP 端口 200/404/200/200;
- [8] 新增的验证码接口返回 200,日志确认 "MySQL / Redis 连通正常"。
2026-04-20 09:27:28 +08:00
大森林
08b9dea43d fix(uninstall): 卸载脚本支持一条命令、从容器自动识别 rootDir,发布 V3.2.6
此前卸载命令为 cd /your/install/path/sources/jeepay/docs/install &&
sh uninstall.sh,占位路径难懂,且脚本只能读 ./config.sh 拿 rootDir,
无法像 install.sh 那样 wget + 直接执行。

业务代码零改动,与 3.2.0 / V3.2.x 业务镜像完全兼容。

修复:

- uninstall.sh rootDir 识别走三级回退:
  1) 环境变量 rootDir=xxx;
  2) 当前目录 ./config.sh(兼容老用法,install.sh 已把真实 rootDir
     回写到 $rootDir/sources/jeepay/docs/install/config.sh);
  3) 从跑着的 mysql8 容器 /var/lib/mysql 挂载路径反推(install.sh
     固定把 $rootDir/mysql/data 挂到该位置)。
  三级都拿不到时明确报错,拒绝在未知 rootDir 上执行 rm -rf。
- 卸载前打印确认 block,列出即将删除的 8 个容器、1 个网络、目标 rootDir
  的完整绝对路径,用户有机会在真正动手前终止。
- docs/deploy/shell.md 卸载小节改为"推荐一条命令 + 备选原路径方式",
  不再用 /your/install/path 占位。
- install.sh / shell.md / config.sh 默认 jeepayRef 升到 V3.2.6;
  version.md / upgrade.md 追加变更记录。

远端回归(Anolis OS):
- 在 /tmp/jeepay-uninstall-test 空目录(无 config.sh)直接 sh
  uninstall.sh;
- 打印 "从 mysql8 容器卷自动识别到 rootDir=/home/jeepay-v323";
- yes 确认后 8 容器 + jeepay-net + rootDir 全部清理干净。
2026-04-19 21:47:04 +08:00
大森林
8b272dffde fix(install): MySQL/Redis 宿主端口冲突时自动换端口,发布 V3.2.5
V3.2.4 把冲突从"failure after docker run"提前到"pre-check fail fast";
本版本进一步把"冲突则退出"升级为"冲突自动换端口继续部署",减少一次
用户手动重跑。

业务代码零改动,与 3.2.0 / V3.2.x 业务镜像完全兼容。

修复:

- install.sh 新增 pick_host_port:默认端口被占时,先跳到 默认+10000
  (3306 → 13306),再被占则 +1 逐个探测;找到空闲端口后打印 INFO
  并继续安装,无需用户重跑。
- resolve_host_port 会先识别 mysqlHostPort / redisHostPort 是否由
  用户通过环境变量 / config.sh 显式指定:
  - 自动模式(auto):被占则换端口并打印 INFO;
  - 用户指定(user):被占则直接 ERROR 退出,尊重用户意图不静默换。
- RocketMQ / Nginx 端口(9876 / 10909-10912 / 19216-19218)与容器内
  通信耦合(brokerIP1:port 广播、nginx listen 写死),仍保持"冲突即
  退出",不参与自动换。
- docs/deploy/shell.md "宿主端口冲突"小节同步更新,突出"自动换端口"
  为默认行为,显式覆盖变成"想指定固定端口"的可选进阶用法。
- install.sh / shell.md / config.sh 默认 jeepayRef 升到 V3.2.5;
  version.md / upgrade.md 追加变更记录。

远端回归(Anolis OS,3306/6379 被占):
- INFO: 宿主端口 3306 已被占,MySQL 自动改用 13306
- INFO: 宿主端口 6379 已被占,Redis 自动改用 16379
- 用户显式 mysqlHostPort=3306 被占:ERROR 退出,符合预期。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:26:13 +08:00
大森林
7ec69d4d6d docs(deploy): 端口冲突首选"覆盖 host port"而非"停原服务"
宿主机已有 MySQL / Redis 属于常见场景(客户自己的业务在用),直接
停掉原服务风险较大。把"覆盖 host port"作为推荐方案放在最前,
原"释放原服务"降为备选。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:21:29 +08:00
大森林
84c5dfaf95 fix(install): 安装前预检宿主端口 & 支持 MySQL/Redis host port 覆盖,发布 V3.2.4
现象:客户宿主机已有 MySQL 占 3306,install.sh 走到 [3] docker run 时
才因 "address already in use" 失败,留下半成品容器与半启动的部署目录,
排查成本高。

业务代码零改动,与 3.2.0 / V3.2.x 业务镜像完全兼容。

修复:

- install.sh 启动阶段预检 9 个宿主端口(3306 / 6379 / 9876 /
  10909-10912 / 19216-19218),任一被占直接打印占用进程(走 ss -lntp
  / lsof / netstat 三级 fallback)后退出,不进后续步骤。
- 新增 mysqlHostPort / redisHostPort 两个环境变量,支持在已有 MySQL /
  Redis 的宿主上改用其他 host port。容器内仍是标准端口,jeepay 各
  服务通过 jeepay-net 内部 mysql:3306 / redis:6379 通信,host port
  覆盖不影响业务。
  - docker run -p $mysqlHostPort:3306 / $redisHostPort:6379
  - 回写到 sources 下 config.sh 的快照中,uninstall.sh 同样读到真实值
  - config.sh 模板补注释条目,方便通过文件方式覆盖
- RocketMQ 的 broker 会向客户端广播 brokerIP1:10911,Nginx 的 listen
  写进静态 nginx.conf,这两个暂不做参数化;命中冲突由预检提示释放。
- docs/deploy/shell.md 新增"宿主端口冲突"小节,说明覆盖变量与限制。
- install.sh / shell.md / config.sh 默认 jeepayRef 升到 V3.2.4;
  version.md / upgrade.md 追加变更记录。

远端回归(Anolis OS,9 个端口全占状态):install.sh 打印每个端口的
docker-proxy / nginx 占用进程(pid + fd)后退出 1,提示文案完整。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:17:13 +08:00
大森林
712bac280c fix(install): 依赖自动安装跨发行版适配,发布 V3.2.3
现象:客户在 Ubuntu / Debian 上直接 sh install.sh,原脚本里
yum install -y docker-ce 静默失败,后续 docker run 全部报
"docker: command not found",流程在 [3] 就挂掉。

业务代码零改动,与 3.2.0 / V3.2.x 业务镜像完全兼容,重启容器或让
install.sh 重装都不需要重打镜像。

修复:

- install.sh 新增 detect_pkg_mgr / pkg_install / ensure_cmd / ensure_docker
  四个辅助函数,自动识别 apt / dnf / yum / apk,对 wget / curl / git /
  docker 统一做"检测→安装→落地校验"三段式处理。
  - apt 走 apt-get install docker.io
  - dnf/yum 走阿里云 docker-ce 源 + docker-ce
  - apk 走 apk add docker 并注册 service
  - 自动安装失败或 daemon 未启动时打印带有手动兜底命令的明确错误,
    不再让后续步骤串烧报 command not found。
- 未识别到任何包管理器时打印 WARN 继续运行,方便自备依赖的环境。
- install.sh / config.sh / shell.md / version.md / upgrade.md 同步把
  默认 jeepayRef 升到 V3.2.3。

远端回归(Anolis OS 8.10,rootDir=/home/jeepay-v323):install.sh 检测
到 git 缺失自动 yum install 补齐;8 容器启动,3 jeepay 应用 healthy;
/cashier/index.html 通过 nginx 19216 返回 HTTP 200。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:11:01 +08:00
大森林
55093699bb docs(deploy): 修正收银台访问路径说明
jeepay-payment 的 Spring Boot 未给 /static/cashier/ 配置 welcome-page
映射,直接访问 /cashier/ 会 404,只有 /cashier/index.html 能返回 200。
上一版"配置域名 + HTTPS"章节写成 /cashier/ 会误导用户验证部署失败。

- 同时说明生产场景下客户看到的 URL 是 jeepay API 返回的 payUrl(形如
  /cashier/index.html?token=xxx),文档里给出的联通性验证 URL 只用于
  部署排错,运营时不会手动输入。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 17:33:55 +08:00
大森林
0144439b65 fix(proxy): 加固 nginx 反代 + Spring Boot 转发头,发布 V3.2.2
业务代码零改动,与 3.2.0 / V3.2.1 业务镜像完全兼容;重启容器或用
install.sh 重装即可生效。

问题:用户在 19216/19217/19218 外再套一层 HTTPS 域名反代时,
- 仓库模板 docs/install/include/nginx.conf 未传 X-Forwarded-Proto;
- Spring Boot 也未启用 server.forward-headers-strategy。
两者叠加会让 Spring 把收银台 return_url / 支付回调 URL / 微信 H5
redirect_url 拼成 http://,触发浏览器 mixed-content 拦截或第三方
回跳失败——这是"加域名就出问题"的最典型坑。

修复:

- docs/install/include/nginx.conf:三段 server 块(19217 manager /
  19218 merchant / 19216 payment+cashier)统一补 X-Forwarded-Proto
  $scheme 与 X-Forwarded-Port $server_port;nginx -t 语法验证通过。
- conf/payment / conf/manager / conf/merchant/application.yml 开启
  server.forward-headers-strategy: framework,让 Spring Boot 正确识别
  X-Forwarded-* 并透传到重定向 / Cookie domain 行为。
- docs/deploy/shell.md 新增"配置域名 + HTTPS"章节:三种部署拓扑
  (三子域 / 一域名 + 路径前缀 / 只暴露收银台)、外层 nginx 示例、
  第三方支付回调 URL 填写注意事项。
- install.sh 默认 jeepayRef 升到 V3.2.2;config.sh 注释同步。
- version.md / upgrade.md 追加 v3.2.2_20260419 变更记录。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 17:14:38 +08:00
大森林
c8a1d1a0a5 chore: 发布 V3.2.1(安装工具与文档补丁版本)
业务代码零改动(jeepay-core / jeepay-service / 三个应用 /src 均无
diff),与 3.2.0 业务镜像完全兼容,无需重打 jeepay-manager /
jeepay-merchant / jeepay-payment 镜像。

发版收尾:

- version.md / upgrade.md 追加 v3.2.1_20260419 变更记录,汇总自
  V3.2.0 以来的 15 个补丁提交。
- install.sh 默认 jeepayRef 切到 V3.2.1,使 git clone 与业务镜像
  锁在同一版本;config.sh / shell.md 同步更新注释与说明。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 16:44:55 +08:00
大森林
af2baf5ecb fix(install): 修复自定义 rootDir 卸载错目录 & 引入源码 ref 锁版本能力
回应评审 Point 1 与 Point 2:

Point 1(自定义 rootDir 下 uninstall 会读错 config):
  README 指引用户到 $rootDir/sources/jeepay/docs/install 下执行
  uninstall.sh,但该目录下的 config.sh 是仓库模板,默认 rootDir
  写的是 /jeepayhomes。用户若在安装时改过 rootDir,卸载时会读到
  模板默认值,导致清不干净、甚至 rm -rf 错误目录。
  修复:install.sh 在 git clone 之后,把本次安装的"生效配置"
  (rootDir / mysql_pwd / 7 个镜像 / rocketmqPlatform / jeepayRef)
  通过 heredoc 写入 $sourcesInstallPath/config.sh,覆盖仓库模板。
  这样 uninstall.sh 读到的永远是用户实际用过的 rootDir。

Point 2(源码与镜像版本漂移):
  install.sh 把业务镜像钉在 3.2.0,但 git clone 一直拉 master HEAD,
  未来若 master 修改 SQL / broker.conf.template / nginx.conf / conf/*
  就会出现"老镜像 + 新配置"的混装。
  修复:新增 jeepayRef 环境变量(默认 master,保持现状不破坏 V3.2.0
  用户,因为 V3.2.0 tag 尚未包含 broker.conf.template 等新文件),
  git clone 改为 --branch "$jeepayRef" --depth 1,用户可通过
  export jeepayRef=V3.2.1(或其他 release tag)锁定到与镜像同版本的
  源码。config.sh 模板补充相应注释条目,docs/deploy/shell.md 新增
  "锁定源码版本(生产环境建议)" 小节说明使用方式。

Point 3(Ubuntu 一键命令缺 wget)此前在 2f68936 已修复;最新 reviewer
反馈基于旧快照,无需再动。

远端回归:
- rootDir=/home/jeepay-custom 全量安装通过 [8] 自检,3 个应用 healthy;
- 回写的 sources/jeepay/docs/install/config.sh 包含真实 rootDir
  与全部镜像覆盖;
- 按文档路径 cd sources/jeepay/docs/install 执行 uninstall.sh,
  正确清掉 /home/jeepay-custom,/jeepayhomes 未受影响。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 16:11:16 +08:00
大森林
2f68936043 docs(shell): 补齐 Shell 一键安装的前置依赖与一键命令补丁
回应评审 Point 2:README 把 Shell 一键安装定位为"干净 CentOS / Anolis /
Ubuntu 服务器一条命令拉起",但原一键命令在 minimal 发行版上会直接挂:

- Ubuntu 22.04 minimal 默认不带 wget,原命令末尾的
  wget -O install.sh 会因缺少 wget 而失败;
- install.sh 的 git / docker 自动安装只走 yum 分支,apt 系统必须在
  一键命令里预装。

修复:

- docs/deploy/shell.md 新增"前置依赖"小节,列出 wget / curl / git /
  docker 四个命令各自由"一键命令预装"还是"install.sh 兜底"负责,避免
  用户在 minimal 环境踩坑。
- CentOS 一键命令补齐 curl(部署后自检会用到,缺失会报 WARN)。
- Ubuntu 一键命令补齐 wget / curl,使其在 minimal 镜像上也能完整跑通。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 15:59:06 +08:00
大森林
a541c90a03 fix(install): 精确化 Docker platform 约束并补齐 config.sh 覆盖项
回应代码评审意见:

问题 1:原先 install.sh 对 mysql/redis/rocketmq/nginx 全部钉 linux/amd64,
与 shell.md "零配置直达" 的宣传不符——ARM64 宿主一条命令能否跑起来取决
于宿主是否开启 amd64 仿真。而 docker/sync-swr-thirdparty.sh 其实已经对
mysql/redis/nginx/temurin 同步了 amd64 + arm64 多架构 manifest,只有
rocketmq 上游不发布 arm64。据此做精确化调整:

- 移除 mysql / redis / nginx 三处 docker run 的 --platform=linux/amd64,
  让 Docker 按宿主架构自动选 manifest(amd64 / arm64 都可原生运行)。
- rocketmq-namesrv / rocketmq-broker 改为 --platform=$rocketmqPlatform,
  默认 linux/amd64;ARM64 宿主只要开启 qemu/binfmt 或 Rosetta 2 即可,
  若自行构建了原生 arm64 的 RocketMQ 镜像,可通过 rocketmqPlatform +
  rocketmqImage 一起覆盖。
- docs/deploy/shell.md 新增"架构前提"小节(宿主矩阵 + qemu/binfmt 注册
  命令 + 覆盖示例),README 部署表格下方提示同步加入架构说明,避免
  "国内零配置直达" 被误读为所有架构都能跑。
- docs/install/test_swr_defaults.sh 断言更新:确认 rocketmqPlatform
  默认值存在、被 namesrv 和 broker 共同引用、且 mysql/redis/nginx 不再
  写死 --platform=linux/amd64。

问题 2:install.sh 提示 "配置内容在 config.sh 文件" 并支持 7 个镜像
覆盖变量(mysqlImage / redisImage / rocketmqImage / nginxImage /
managerImage / merchantImage / paymentImage),但模板 config.sh 仅暴露
rootDir 和 mysql_pwd。补齐:

- config.sh 新增所有镜像覆盖项 + rocketmqPlatform 覆盖项(默认保持注释,
  不改变行为),并说明默认走 SWR 公开仓库。
- docs/deploy/shell.md "自定义镜像源(高级)" 指向 config.sh 的注释模板,
  两条使用路径(config.sh 取消注释 / 环境变量覆盖)等价。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 15:47:36 +08:00
大森林
e4cfaa012e docs: 部署文档优先引导使用华为云 SWR 公开镜像
计全官方已在华为云 SWR 上维护一套公开可匿名拉取的基础镜像与 jeepay
应用镜像,国内网络下比 Docker Hub 稳定许多。让 README 与部署文档显式
强调这一点,避免用户误以为默认路径还要配置 Docker Hub 加速器。

- README.md 部署方式表格下新增"国内零配置直达"提示,明确默认镜像
  来自 SWR 公开仓库,不依赖 Docker Hub、无需登录与加速器。
- docs/deploy/shell.md 顶部补 SWR 默认说明;"自定义镜像源"章节改写
  为高级场景(内网仓库 / 固定版本 / 切回 Docker Hub 上游)。
- docs/deploy/compose.md 顶部补 SWR 默认说明;"配置 Docker 国内镜像
  加速"从"强烈建议"降级为"仅在不走 SWR 时需要";"镜像发布"章节标题
  追加"终端用户跳过",避免被误解为部署必要步骤。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 12:06:41 +08:00
大森林
4eac0f1b1a docs: 拆分部署/功能/项目结构/截图独立文档
为精简 README 做准备,把原先混在 README 里的细节章节按主题拆出:

- docs/deploy/shell.md:Shell 一键安装、默认端口、卸载、自定义镜像源、
  RocketMQ 启动失败排查。
- docs/deploy/compose.md:Docker Compose 部署全流程,含国内镜像加速、
  启动前校验、默认端口 / 账号 / 版本、配置说明、启动后验证,以及面向
  维护者的 Docker Hub / 华为云 SWR 发布脚本使用说明。
- docs/deploy/troubleshooting.md:NPE、M1 Rosetta、前端构建、认证异常、
  镜像拉取 403 等常见问题。
- docs/features.md:功能模块截图与接口市场分类(三方支付、银行、四方)。
- docs/screenshots.md:系统演示截图集。
- docs/project-structure.md:仓库目录树与仓库关系。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 11:45:46 +08:00