xyc
4 天以前 8b8971e94db61fb346598a2402d65c8ddb196d6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
TrafficAudit 交通货运统计审核系统 —— 部署包({stamp})
========================================================
 
【服务器上只要做这 3 步】(其它文件都不用动)
  第 1 步  改配置:用记事本打开 backend\application.yml,把数据库地址/账号/密码
           (spring.datasource 下面三项)和 jwt.secret 改成这台服务器的真实值。
  第 2 步  装服务:进入 backend 文件夹,右键 install-service.cmd →「以管理员身份运行」
           (直接双击也行,它会自己弹管理员确认)。脚本会注册开机自启服务并启动它。
  第 3 步  看结果:脚本最后会打印 OK 和网址;浏览器打开 http://<服务器IP>:8090
           (账号 admin / admin123),能看到登录页就算成功。
 
  哪些要拷、哪些不用拷:
    backend\   必须整个目录一起拷(jar、application.yml、docs、web、服务文件都在里面),
               不要只挑几个文件拷。
    db\        只有需要初始化/还原数据库时才用,平时可不拷。
    frontend\  不用拷(前端已内嵌在 jar 里,8090 端口直接访问)。
    本文件      可拷可不拷,就是这份说明书。
 
【目录结构】
  backend/
    traffic-audit-server-1.0.0-SNAPSHOT.jar  后端程序(含全部依赖,**已内嵌前端**)
    docs/                                    报表模板与运行数据目录(必需,勿删)
    application.yml                          外部配置(改这里即可,无需重新打包)
    start-backend.cmd / start-backend.sh     前台启动脚本(人工调试用,关了窗口就停)
    trafficAudit.exe                         WinSW 服务包装器(把 java 变成 Windows 服务,勿删勿改名)
    trafficAudit.xml                         WinSW 服务配置(服务名/启动方式/日志/失败重启策略)
    install-service.cmd                      双击入口:注册开机自启服务(会自动请求管理员权限)
    install-service.ps1                      上面那个 cmd 实际调用的脚本(注册/查看/重启/删除)
    start-backend-service.cmd                非交互启动器(无 pause、写 app.log,配合计划任务用)
    install-autostart.ps1                    备选:注册“计划任务”方式的开机自启
  frontend/
    dist/                                    前端构建产物(备用:想用 nginx 托管时用)
    nginx.conf.example                       nginx 配置示例
  db/
    init.sql                                 建库建表 + 预置账号(必须执行)
    sql_city_bus.sql                         城市客运-公交月度表(必须执行)
    sql_city_taxi.sql                        城市客运-出租月度表/出租授权表(必须执行)
    sql_wyc.sql                              网约车全省总量表/订单分市州表(必须执行)
    sql_holiday.sql                          专项统计-重要节假日表(旧库缺表时执行)
    sql_holiday_decimal_migration.sql        节假日数值列精度迁移(旧库升级)
    sql_holiday_comparison_base_migration.sql 节假日环比基期字段迁移(旧库升级)
    sql_holiday_previous_day_migration.sql    节假日前一日配置迁移(旧库升级)
  README-部署说明.txt
 
【部署机环境要求】
  JDK 8(必需)
  MySQL 5.7 / 8.0(必需)
  **不需要 Redis**(代码未使用;旧版说明里的 Redis 是遗留配置,可忽略)
  **不需要 nginx**(前端已内嵌进 jar,访问 8090 即可;nginx 仅为备选方案)
 
【操作系统兼容性】
  开机自启用的是 Windows 服务,而“自动启动 / 延迟启动 / 失败自动重启”是系统自带能力,
  从 Win7 SP1 到 Win11、Server 2008 R2 到 Server 2022/2025 机制完全一样。差别只在服务包装器
  trafficAudit.exe 依赖什么运行时:
  - 本包内的 trafficAudit.exe 是 WinSW 2.12.0 的 x64 自包含构建(自带 .NET 6 运行时,已校验 SHA-256),
    **不需要另外安装 .NET Framework**;推荐用于 64 位 Win10 / Win11 / Server 2016 及以上。
  - Win7 SP1 / Server 2008 R2 / Server 2012(R2):自包含版通常也能跑(Win7 SP1 需先打 KB2533623);
    若报缺少 api-ms-win-*.dll 之类,换成官方 thin 构建:把 WinSW.NET461.exe 下载后改名成
    trafficAudit.exe 覆盖(配置 trafficAudit.xml 不用改),它需 .NET Framework 4.6.1+:
      https://github.com/winsw/winsw/releases/download/v2.12.0/WinSW.NET461.exe
  - 32 位系统:把包装器换成 WinSW-x86.exe(同一下载页)。
  - Win7 / Server 2012 本身已过微软支持期,新服务器建议直接上 Server 2016 及以上。
  - 脚本要求:install-service.ps1 在 Windows PowerShell 2.0+ 下可用(Win7 自带 2.0,已做兼容);
    3.2 的计划任务脚本用到了 New-ScheduledTask* 命令,需要 Win8 / Server 2012 及以上。
 
【部署步骤】
  1. 初始化数据库(4 个脚本都要执行,顺序如下)
       mysql --default-character-set=utf8mb4 -u root -p < db/init.sql
       mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_bus.sql
       mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_taxi.sql
       mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_wyc.sql
     注:全新库的 init.sql 已含节假日 4 张表;若是在早期版本库上补节假日模块,再执行 db/sql_holiday.sql,并按需执行三个迁移脚本(数值精度、环比基期、前一日配置)。前一日迁移脚本可重复执行。
     预置账号:admin / admin123(首次登录后请改密码)
 
  2. 改配置 backend/application.yml
     - spring.datasource.url / username / password :改成部署机的 MySQL(默认端口 3306)
     - jwt.secret :改成一串随机字符串(**必须是 Base64 合法字符且长度是 4 的倍数**,如 32 位十六进制;填中文会登录失败)
     - deepseek.api-key :需要 AI 分析时填,不需要可留空
     注:application.yml 与 jar 同级即生效,不用重新打包。
 
  3. 启动后端(在 backend 目录下;这步只是手工试跑,关窗口就停,要开机自启请看 3.1)
     Windows:双击 start-backend.cmd
     Linux:  sh start-backend.sh
     成功标志:出现 "Started TrafficAuditApplication" 与 "Tomcat started on port(s): 8090"
 
  3.1 Windows 开机自启(推荐:注册成 Windows 服务,一次配置长期生效)
     前提:backend 目录下的 trafficAudit.exe / trafficAudit.xml / install-service.cmd / install-service.ps1
           都已随本部署包提供,不需要另外下载 WinSW,也不需要给 java 装别的东西。
     最省事:在 backend 目录右键 install-service.cmd →「以管理员身份运行」
             (直接双击也行,它会自己弹 UAC 管理员确认)。
     等价的手工方式(在 backend 目录下,用【管理员】PowerShell):
       powershell -NoProfile -ExecutionPolicy Bypass -File install-service.ps1
     效果:注册 Windows 服务 TrafficAuditBackend,开机自动启动(延迟启动,先等 MySQL 就绪),
           不需要任何用户登录;java 进程异常退出由服务管理器自动重启(10 秒 / 30 秒 / 60 秒递增重试,
           1 小时后重试计数清零)。服务以 LocalSystem 身份运行。
     脚本会自动定位 java.exe(JAVA_HOME → PATH → JavaSoft 注册表 → Program Files),
     并把绝对路径写进 trafficAudit.xml(SYSTEM 服务的 PATH 与登录用户不同,写绝对路径更稳)。
     常用参数:
       -Status                           查看服务状态(不需要管理员)
       -Restart                          重启服务        -Remove  停止并删除服务
       -NoStart                          只注册不启动    -JavaPath "D:\jdk8\bin\java.exe"  手动指定 JDK
     日志:backend\logs\trafficAudit.out.log(运行输出)与 trafficAudit.err.log(错误输出),
           单个文件 10MB,保留 10 个滚动文件。
     验证:脚本装完会自动探测端口,打印 OK + 本机/对外网址;起不来时直接打印 logs\*.log 最后 15 行,
           按提示改 application.yml 后执行 install-service.ps1 -Restart 即可。也可手工用浏览器打开
           http://<部署机IP>:8090 确认。
     注意:
       - 开机自启靠服务的“自动”启动类型;如果把它改成“手动”,就不会再随机器启动。
       - 重复执行 install-service.ps1 是安全的:会先停服务再重新注册并启动。
       - 同一台机不要同时启用下面的计划任务方式,两个进程会抢 8090 端口。
       - 建议把部署包放在 D:\trafficAudit 这类简单路径;放在某些用户目录下时 LocalSystem
         可能没有写权限,日志会报权限错误。
 
  3.2 备选:计划任务方式(不想把后端装成服务时用,与 3.1 二选一)
     在 backend 目录下,用【管理员】PowerShell 执行:
       powershell -NoProfile -ExecutionPolicy Bypass -File install-autostart.ps1
     效果:注册计划任务 TrafficAuditBackend,开机延迟 60 秒后以 SYSTEM 身份运行 start-backend-service.cmd,
           不需要用户登录,失败自动重试 3 次,运行日志写在 backend\app.log。
     常用参数:-DelaySeconds 90(改延迟秒数)  -StartNow(注册后立即启动一次)
               -Status(查看状态)             -Remove(删除开机自启)
     注:启动器优先用 JAVA_HOME\bin\java.exe,找不到时回退 PATH;检测到 8090 已在监听则直接退出。
 
  4. 访问系统
     浏览器打开 http://<部署机IP>:8090  (前端已内嵌,页面与接口同源)
     账号:admin / admin123
 
【数据迁移(可选)】
  想把本机数据一并搬到新机器,用 mysqldump(本机 MySQL 若不在 3306,按实际端口改):
     mysqldump -h 127.0.0.1 -P 3306 -u root -p --databases traffic_audit > traffic_audit_full.sql
  再在新机器执行:
     mysql -u root -p < traffic_audit_full.sql
  注意:全量 dump 会带上本机的账号密码,覆盖 init.sql 预置的 admin 账号。
 
【常见问题】
  0. 启动报 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO):
     “using password: NO” = 后端拿到的数据库密码是空串(不是密码错)。
     检查 backend/application.yml 是否与 jar 同级且 spring.datasource.password 已填真实密码;
     若未改 application.yml,也可用环境变量 TRAFFIC_DB_PASSWORD 代替。改完重启即可,无需重新打包。
  1. 启动报「未找到数据目录 docs」/ 导出报「未找到模板文件」:
     必须在 backend 目录下启动(jar 与 docs 同级),不要只拷 jar。
  2. 报表导出报「未找到汇总表母版《YYYY年M月道路运输量汇总表.xlsx》」:
     docs/生成汇总大表 下缺少该月份母版;把源机器的该文件拷过去。
  3. 8090 端口被占用:改 application.yml 的 server.port 后重启。
  4. 页面打开是空白:确认访问的是 http://<IP>:8090 根路径,且浏览器强制刷新(Ctrl+F5)。
  5. 上传大文件失败:后端限制 100MB,已配置;如前面还挂了 nginx,需同步放大 client_max_body_size。
  6. 服务已注册但 8090 打不开:看 backend\logs\trafficAudit.err.log 的报错内容;
     服务方式下用的是 backend\application.yml,password 必须是真实 MySQL 密码(占位文字会导致 using password: NO)。
  7. 服务报“拒绝访问”或写不了日志:部署目录权限不足。
     把部署包放到 D:\trafficAudit 这类简单路径,或给 LocalSystem 授予该目录的读写权限。
  8. 想临时取消开机自启但保留服务:Set-Service TrafficAuditBackend -StartupType Manual
 
【停止服务】
  服务方式: Stop-Service TrafficAuditBackend        (重新启动:Start-Service TrafficAuditBackend)
             彻底删除开机自启:install-service.ps1 -Remove
  前台启动: 关闭 start-backend.cmd 窗口
  计划任务: Stop-ScheduledTask -TaskName TrafficAuditBackend
  Linux:    Ctrl+C,或 kill 对应 java 进程(ps -ef | grep java)