| | |
| | | |
| | | ## 最新(2026-10-03) |
| | | |
| | | ### 补充(10-03 下午):服务器部署报 “Access denied ... (using password: NO)” —— 根因与修复 |
| | | - **现象**:把 `deploy/traffic-audit-release-20261002/` 部署到 `61.183.254.94` 后,后端启动报 `java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)`。 |
| | | - **根因**:jar 内置配置里库口令是占位符 `${TRAFFIC_DB_PASSWORD:}`(默认空串),而 10-02 那个包**只含 jar + web + dist**,没有外置 `application.yml`、没有 `docs/`、`db/`、启动脚本。部署机没有任何外部配置覆盖,Spring 就拿空密码连本机 MySQL → `using password: NO`(注意:这是“末传密码”,不是密码错)。 |
| | | - **服务器侧一步修复(无需重打包)**:在 jar 同级放 `application.yml`,把 `spring.datasource.url/username/password` 改成现场真实值后重启即可;也可用环境变量 `TRAFFIC_DB_PASSWORD` 代替。启动脚本已加预检提醒(缺 `application.yml` / password 仍是占位文字都会 WARN)。修复后若报“未找到数据目录 docs”则说明包内缺 `backend/docs`,从新包或源机器拷。 |
| | | - **打包工具已修(原 “打包工具待修” 两项均已落实)**:`pack-deploy.ps1` 重写为五步:① 用新增模板 `deploy-templates/jar-application.yml`(**全占位符**)临时替换源码配置后 `mvn clean package`,无论成败都还原真实配置;② 解压 jar 去密自检;③ 前端构建;④ 组装**完整包**:`backend/{jar, application.yml, start-backend.cmd/.sh, docs/, web/}` + `frontend/dist` + `db/*.sql` + README(`backend/web` 从 dist 自动同步,逐文件一致);⑤ 整包明文密钥扫描。新增 `-SkipBackend` 可复用现有 jar 快速重组包。 |
| | | - **模板同步修正**:`deploy-templates/backend/application.yml` 的 `server.port` 由 8080 改回 8090(原值会导致后端起在 8080)、补 `static-locations: file:./web/` 与 password 陷阱注释;`README-部署说明.txt` 常见问题新增该报错处置;`docs/打包部署说明.md` 排错表新增该行;`application.yml.example` 环境变量名统一为 `TRAFFIC_DB_USER/TRAFFIC_DB_PASSWORD/TRAFFIC_JWT_SECRET`(原来误用 `MYSQL_PASSWORD`/`JWT_SECRET`,与 `start-dev.ps1` 不一致)。 |
| | | - **新包(本地,不入库)**:`deploy/traffic-audit-deploy-20261003/`(388 文件 / 93.07 MB,zip 76.37 MB),已验证:jar 内置配置全占位符(去密自检通过)、`backend/web` 与 `frontend/dist` 逐文件一致(各 44 个)、`backend/docs/生成汇总大表` 母版存在、`功能测试报告/工作日结/问题汇总/_cache` 已排除。 |
| | | - **踩坑(重要)**:本机 PowerShell 5.1 把无 BOM 的 `.ps1` 当 ANSI 读,中文注释会变成乱码并导致脚本解析失败。`pack-deploy.ps1` 必须保存为 **UTF-8 with BOM**(仓库其他 `*.ps1` 也都是 BOM);排查中曾实际踩到。 |
| | | |
| | | - **运行状态(写交接时)**:后端 8090、前端 8080 均未监听;新对话如继续开发或测试,先执行 `powershell -NoProfile -ExecutionPolicy Bypass -File start-dev.ps1`。数据库仍为 `127.0.0.1:3305/traffic_audit`,MySQL 服务未停。 |
| | | - **发布构建(已完成)**:应“发布编译”要求,已完成后端 `mvn clean package -DskipTests` 和前端 `npm run build`。jar 内已做去密自检,只保留环境变量占位符;构建后本机真实 `src/main/resources/application.yml` 已原样恢复。 |
| | | - **发布产物(本地,未入库)**: |
| | |
| | | - **Git/工作区(本段更新前)**:`HEAD = origin/main = 37f5209`;当前无已跟踪文件改动。未跟踪项有 `_tmp_holiday_verify/`(历史验证产物)和 `docs.zip`(约 31.6 MB,用户本地产物);二者均保留,新对话不要误删或误提交。 |
| | | - **下一步**:如需部署,直接使用上面发布目录或 zip;如需继续修复发布工具,先实现“占位符模板自动切换 + `backend/web` 自动组装 + jar 去密自检”后再重新产出发布包。 |
| | | |
| | | ### Windows 开机自启(10-03 追加,用户选“方案 B”:注册成 Windows 服务) |
| | | - **先回答过的问题**:`start-backend.cmd` **不能**直接做开机自启(末尾有 `pause`、无日志重定向、依赖 PATH)。给出 A(计划任务)/B(Windows 服务)/C 三方案后,用户选 **B**。 |
| | | - **新增模板(已入库)**: |
| | | - `deploy-templates/backend/trafficAudit.xml`:WinSW 服务配置——id `TrafficAuditBackend`、`startmode=Automatic` + `delayedAutoStart=true`(等 MySQL 先就绪)、`onfailure restart 10s/30s/60s` + `resetfailure 1 hour`、`workingdirectory=%BASE%`、日志 `logs\trafficAudit.out.log|err.log`(10MB × 10 滚动)。 |
| | | - `deploy-templates/backend/install-service.ps1`:管理员安装/查看/重启/删除(`-Status/-Restart/-Remove/-NoStart/-JavaPath`);自动定位 java(JAVA_HOME → PATH → JavaSoft 注册表 → Program Files)并把绝对路径写进 XML 的 `executable` 元素;重复执行幂等;非管理员直接拒绝。 |
| | | - `start-backend-service.cmd` + `install-autostart.ps1`(计划任务方式)保留为**备选**;注意 `New-ScheduledTask*` 需 Win8/Server 2012+,且**不可与服务方式同时启用**(会抢 8090)。 |
| | | - `pack-deploy.ps1`:新增 WinSW 获取(缓存 `deploy-templates/tools/winsw.exe` 并校 SHA-256,缺则从 GitHub 下载 v2.12.0 x64)与 `-SkipServiceWrapper`;包内输出 `backend\trafficAudit.exe`(改名以匹配 XML 文件名)。`.gitignore` 新增 `deploy-templates/tools/`(17.4MB 二进制不入库)。 |
| | | - **WinSW = Windows Service Wrapper**:把普通程序包成 Windows 服务。java.exe 自己不是服务程序,直接 `sc create` 会报“服务没有及时响应启动或控制请求”;WinSW 实现了服务控制协议再拉起 `java -jar`,并管重启与日志。 |
| | | - **实测验证(本机,未真正安装服务)**:`trafficAudit.exe status` 能读打包 XML 并输出 `NonExistent`(解析通过);故意写坏 XML → `FATAL - The configuration file cound not be loaded`(证明该校验路径真实有效);`install-service.ps1 -Status` 正常输出“未安装”,无参数 / `-Remove` 在非管理员下抛“必须管理员”且不产生注册项。 |
| | | - **踩坑(重要)**:XML 改写最初用正则 `(?s)<executable>.*?</executable>`,会**先命中注释里的 `<executable>` 字样**,把注释头与 service 开头整段吞掉 → XML 非法。已改为 DOM(`SelectSingleNode('/service/executable')`)并把注释里的裸标签改掉。另:新增打包代码曾多一个 `}` 导致语法错,已用 `Parser::ParseFile` AST 复核,两个 ps1 现在语法 OK 且均为 UTF-8 with BOM。 |
| | | - **兼容性(用户问“Win7/Win10/Win11/Server 是不是都可以”)**:服务机制完全一样(自动启动/延迟启动/失败重启都是系统能力),差别只在包装器依赖什么运行时。实测二进制:`WinSW-x64.exe` 2.12.0 是**自包含 .NET 6 单文件**(含 `singlefilehost`/`System.Private.CoreLib`/`Microsoft.NETCore.App 6.0.13`/`net6.0`),**不需要装 .NET Framework**;老系统(Win7 SP1/2008R2/2012R2)若报 `api-ms-win-*.dll` 缺失,可换官方 `WinSW.NET461.exe`(0.6MB,需 .NET 4.6.1+,改名成 `trafficAudit.exe` 即可,XML 不动);32 位系统换 `WinSW-x86.exe`。 |
| | | - **安全提示**:WinSW 官方产物**未做 Authenticode 签名**(本机 `Get-AuthenticodeSignature` = NotSigned),因此以固定 SHA-256 作完整性校验:`05B82D46AD331CC16BDC00DE5C6332C1EF818DF8CEEFCD49C726553209B3A0DA`(与 GitHub 发布资产 18,243,033 字节一致)。 |
| | | - **未验证项(需在目标机做一次)**:本机当前不是管理员,**没真正 install 过服务**;开机自启、失败重启、日志滚动要在服务器上按 README 3.1 执行一次确认。 |
| | | - **新包(本地,不入库)**:`deploy/traffic-audit-deploy-20261003-3/`(393 文件 / 110.49 MB,zip 83.77 MB)。已验证:服务三件套在 `backend\`、包内 `trafficAudit.exe` SHA-256 与固定值一致、`backend\web` 与 `frontend/dist` 各 44 文件、jar 去密自检通过、无明文 key。**旧的 `traffic-audit-deploy-20261003/` 与 `-2/` 已被取代**,部署请用 `-3`(旧包待用户确认后再删)。 |
| | | - **运行状态(写本条时)**:开发用后端 8090(PID 43040)、前端 8080(PID 43152)均在跑;数据库 `127.0.0.1:3305/traffic_audit`。 |
| | | |
| | | ## 最新(2026-10-02) |
| | | |
| | | - **新模块(用户已验收,本次提交/推送)**:新增“专项统计-重要节假日”模块,含节假日配置、营业性客流、非营业性车流、客运系数 4 张表;系统配置菜单仅 admin 可维护,专项统计-节假日支持导入、导出、模板下载和 Word 快报下载。 |