|
|
# 医院物业 SaaS 管理后台 — Windows 部署指南
|
|
|
|
|
|
> 本文档指导在 Windows Server / Windows 10/11 上完整部署本系统,包含 MariaDB、Redis、后端应用的安装与配置。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 目录
|
|
|
|
|
|
1. [环境要求](#1-环境要求)
|
|
|
2. [安装 JDK 17](#2-安装-jdk-17)
|
|
|
3. [安装 MariaDB 10.6+](#3-安装-mariadb-106)
|
|
|
4. [安装 Redis for Windows](#4-安装-redis-for-windows)
|
|
|
5. [初始化数据库](#5-初始化数据库)
|
|
|
6. [编译打包](#6-编译打包)
|
|
|
7. [配置应用](#7-配置应用)
|
|
|
8. [启动应用](#8-启动应用)
|
|
|
9. [注册为 Windows 服务(开机自启)](#9-注册为-windows-服务开机自启)
|
|
|
10. [验证部署](#10-验证部署)
|
|
|
11. [防火墙配置](#11-防火墙配置)
|
|
|
12. [日常运维](#12-日常运维)
|
|
|
13. [常见问题](#13-常见问题)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 1. 环境要求
|
|
|
|
|
|
| 组件 | 最低版本 | 推荐版本 | 说明 |
|
|
|
|------|----------|----------|------|
|
|
|
| 操作系统 | Windows Server 2016 / Win 10 | Windows Server 2019+ | 64 位 |
|
|
|
| JDK | 17 | 17 (Eclipse Temurin) | 不要用 JRE,需完整 JDK 编译 |
|
|
|
| Maven | 3.9+ | 3.9.x | 仅编译时需要 |
|
|
|
| MariaDB | 10.6 | 10.11 LTS | 兼容 MySQL 协议 |
|
|
|
| Redis | 6.0 | 7.x (Windows 移植版) | 缓存与权限广播 |
|
|
|
| 内存 | 4 GB | 8 GB+ | 后端默认 512MB JVM |
|
|
|
| 磁盘 | 10 GB | 50 GB+ | 含数据库与日志 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 2. 安装 JDK 17
|
|
|
|
|
|
### 2.1 下载安装
|
|
|
|
|
|
1. 访问 [Eclipse Temurin 下载页](https://adoptium.net/temurin/releases/?version=17)
|
|
|
2. 选择 **Windows x64 .msi** 安装包
|
|
|
3. 运行安装程序,勾选 **Set JAVA_HOME variable**
|
|
|
4. 默认安装路径:`C:\Program Files\Eclipse Adoptium\jdk-17.x.x.x-hotspot`
|
|
|
|
|
|
### 2.2 验证
|
|
|
|
|
|
```powershell
|
|
|
java -version
|
|
|
# 输出应包含 openjdk version "17.x.x"
|
|
|
|
|
|
echo $env:JAVA_HOME
|
|
|
# 应输出 JDK 安装路径
|
|
|
```
|
|
|
|
|
|
### 2.3 手动配置环境变量(如安装时未自动配置)
|
|
|
|
|
|
1. 右键 **此电脑** → **属性** → **高级系统设置** → **环境变量**
|
|
|
2. 新建系统变量:
|
|
|
- 变量名:`JAVA_HOME`
|
|
|
- 变量值:`C:\Program Files\Eclipse Adoptium\jdk-17.x.x.x-hotspot`
|
|
|
3. 编辑 `Path`,添加:`%JAVA_HOME%\bin`
|
|
|
|
|
|
---
|
|
|
|
|
|
## 3. 安装 MariaDB 10.6+
|
|
|
|
|
|
### 3.1 下载安装
|
|
|
|
|
|
1. 访问 [MariaDB 下载页](https://mariadb.org/download/)
|
|
|
2. 选择 **Windows x86_64 MSI** 安装包
|
|
|
3. 运行安装程序:
|
|
|
- 设置 root 密码(本例使用 `root`)
|
|
|
- 勾选 **Enable networking**(端口 3306)
|
|
|
- 字符集选择 **UTF-8 (utf8mb4)**
|
|
|
- 勾选 **Install as Windows Service**,服务名 `MySQL`(MariaDB 默认服务名)
|
|
|
|
|
|
### 3.2 验证
|
|
|
|
|
|
```powershell
|
|
|
# 使用完整路径(根据实际安装版本调整)
|
|
|
& "C:\Program Files\MariaDB 10.3\bin\mysql.exe" -uroot -proot -e "SELECT VERSION();"
|
|
|
```
|
|
|
|
|
|
### 3.3 配置字符集(如安装时未设置)
|
|
|
|
|
|
编辑 MariaDB 配置文件 `C:\ProgramData\MariaDB\data\my.ini`(或安装目录下的 `my.ini`),在 `[mysqld]` 段添加:
|
|
|
|
|
|
```ini
|
|
|
[mysqld]
|
|
|
character-set-server = utf8mb4
|
|
|
collation-server = utf8mb4_unicode_ci
|
|
|
|
|
|
[client]
|
|
|
default-character-set = utf8mb4
|
|
|
|
|
|
[mysql]
|
|
|
default-character-set = utf8mb4
|
|
|
```
|
|
|
|
|
|
修改后重启服务:
|
|
|
|
|
|
```powershell
|
|
|
Restart-Service MySQL
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 4. 安装 Redis for Windows
|
|
|
|
|
|
Redis 官方不提供 Windows 版本,需使用社区移植版。
|
|
|
|
|
|
### 方案 A:使用 Memurai(推荐,商用需授权)
|
|
|
|
|
|
1. 访问 [Memurai 官网](https://www.memurai.com/get-memurai) 下载安装
|
|
|
2. 安装后自动注册为 Windows 服务,默认端口 6379
|
|
|
|
|
|
### 方案 B:使用 tporadowski/redis-portable
|
|
|
|
|
|
1. 访问 [GitHub Releases](https://github.com/tporadowski/redis/releases) 下载 `.msi` 安装包
|
|
|
2. 安装时勾选 **Add to PATH** 和 **Install as Windows Service**
|
|
|
3. 默认端口 6379,无密码
|
|
|
|
|
|
### 方案 C:使用 WSL2 运行原生 Redis
|
|
|
|
|
|
```powershell
|
|
|
# 在 WSL2 Ubuntu 中
|
|
|
sudo apt update && sudo apt install redis-server -y
|
|
|
sudo sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
|
|
|
sudo service redis-server start
|
|
|
|
|
|
# 验证(Windows 侧连接 WSL 的 Redis)
|
|
|
redis-cli -h $(wsl hostname -I | ForEach-Object { $_.Trim() }) ping
|
|
|
```
|
|
|
|
|
|
### 验证 Redis
|
|
|
|
|
|
```powershell
|
|
|
# 如果安装了 redis-cli
|
|
|
redis-cli ping
|
|
|
# 应输出 PONG
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 5. 初始化数据库
|
|
|
|
|
|
### 5.1 执行建表脚本
|
|
|
|
|
|
```powershell
|
|
|
# 进入项目目录
|
|
|
cd D:\git\git\医院后勤管理
|
|
|
|
|
|
# 执行初始化脚本(根据 MariaDB 实际安装路径调整)
|
|
|
& "C:\Program Files\MariaDB 10.3\bin\mysql.exe" -uroot -proot --default-character-set=utf8mb4 -e "source D:/git/git/医院后勤管理/backend/src/main/resources/db/init.sql"
|
|
|
```
|
|
|
|
|
|
### 5.2 验证
|
|
|
|
|
|
```powershell
|
|
|
& "C:\Program Files\MariaDB 10.3\bin\mysql.exe" -uroot -proot --default-character-set=utf8mb4 hospital_mgmt -e "SHOW TABLES; SELECT id, username, user_type FROM sys_user;"
|
|
|
```
|
|
|
|
|
|
应看到 48 张表和一条 `superadmin` 初始管理员记录。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 6. 编译打包
|
|
|
|
|
|
### 6.1 安装 Maven
|
|
|
|
|
|
1. 访问 [Maven 下载页](https://maven.apache.org/download.cgi)
|
|
|
2. 下载 **Binary zip archive** (`apache-maven-3.9.x-bin.zip`)
|
|
|
3. 解压到 `C:\apache-maven-3.9.x`
|
|
|
4. 添加环境变量:
|
|
|
- 新建 `MAVEN_HOME` = `C:\apache-maven-3.9.x`
|
|
|
- 在 `Path` 中添加 `%MAVEN_HOME%\bin`
|
|
|
|
|
|
验证:
|
|
|
|
|
|
```powershell
|
|
|
mvn -version
|
|
|
# 应输出 Maven 3.9.x + Java 17
|
|
|
```
|
|
|
|
|
|
### 6.2 编译打包
|
|
|
|
|
|
```powershell
|
|
|
cd D:\git\git\医院后勤管理\backend
|
|
|
|
|
|
# 编译打包(跳过测试,生产部署前建议先跑测试)
|
|
|
mvn clean package -DskipTests
|
|
|
|
|
|
# 生成的 jar 包位置
|
|
|
# backend\target\hospital-mgmt-1.0.0.jar
|
|
|
```
|
|
|
|
|
|
### 6.3 部署目录结构
|
|
|
|
|
|
建议创建独立部署目录:
|
|
|
|
|
|
```powershell
|
|
|
# 创建部署目录
|
|
|
New-Item -ItemType Directory -Path "C:\hospital-mgmt" -Force
|
|
|
New-Item -ItemType Directory -Path "C:\hospital-mgmt\logs" -Force
|
|
|
New-Item -ItemType Directory -Path "C:\hospital-mgmt\config" -Force
|
|
|
|
|
|
# 复制 jar 包
|
|
|
Copy-Item "D:\git\git\医院后勤管理\backend\target\hospital-mgmt-1.0.0.jar" "C:\hospital-mgmt\app.jar"
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 7. 配置应用
|
|
|
|
|
|
### 7.1 创建外部配置文件
|
|
|
|
|
|
在 `C:\hospital-mgmt\config\` 下创建 `application-prod.yml`:
|
|
|
|
|
|
```yaml
|
|
|
server:
|
|
|
port: 8080
|
|
|
servlet:
|
|
|
context-path: /api/v1
|
|
|
|
|
|
spring:
|
|
|
datasource:
|
|
|
driver-class-name: org.mariadb.jdbc.Driver
|
|
|
url: jdbc:mariadb://localhost:3306/hospital_mgmt?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
|
|
|
username: root
|
|
|
password: root # 修改为实际密码
|
|
|
hikari:
|
|
|
maximum-pool-size: 20
|
|
|
minimum-idle: 10
|
|
|
idle-timeout: 600000
|
|
|
max-lifetime: 1800000
|
|
|
data:
|
|
|
redis:
|
|
|
host: localhost
|
|
|
port: 6379
|
|
|
password: # 如 Redis 设置了密码,在此填写
|
|
|
lettuce:
|
|
|
pool:
|
|
|
max-active: 16
|
|
|
max-idle: 8
|
|
|
min-idle: 4
|
|
|
|
|
|
mybatis-plus:
|
|
|
configuration:
|
|
|
map-underscore-to-camel-case: true
|
|
|
global-config:
|
|
|
db-config:
|
|
|
id-type: assign_id
|
|
|
logic-delete-field: deleted
|
|
|
logic-delete-value: 1
|
|
|
logic-not-delete-value: 0
|
|
|
mapper-locations: classpath*:mapper/**/*.xml
|
|
|
|
|
|
jwt:
|
|
|
secret: your-production-jwt-secret-at-least-32-chars-long # 生产环境务必修改!
|
|
|
expiration: 7200
|
|
|
refresh-expiration: 604800
|
|
|
|
|
|
permission:
|
|
|
redis-channel: permission:changed
|
|
|
|
|
|
async:
|
|
|
pool:
|
|
|
core-size: 4
|
|
|
max-size: 8
|
|
|
queue-capacity: 1000
|
|
|
|
|
|
upload:
|
|
|
max-size: 20
|
|
|
|
|
|
springdoc:
|
|
|
api-docs:
|
|
|
path: /swagger-docs
|
|
|
swagger-ui:
|
|
|
path: /swagger-ui.html
|
|
|
|
|
|
logging:
|
|
|
level:
|
|
|
com.hospital.mgmt: INFO
|
|
|
file:
|
|
|
name: C:/hospital-mgmt/logs/hospital-mgmt.log
|
|
|
logback:
|
|
|
rollingpolicy:
|
|
|
max-file-size: 50MB
|
|
|
max-history: 30
|
|
|
```
|
|
|
|
|
|
### 7.2 关键配置项说明
|
|
|
|
|
|
| 配置项 | 说明 | 默认值 | 生产建议 |
|
|
|
|--------|------|--------|----------|
|
|
|
| `spring.datasource.password` | 数据库密码 | root | 使用强密码 |
|
|
|
| `spring.data.redis.password` | Redis 密码 | (空) | 建议设置 |
|
|
|
| `jwt.secret` | JWT 签名密钥 | (内置默认) | **必须修改**,至少32字符 |
|
|
|
| `jwt.expiration` | Token 有效期(秒) | 7200 (2h) | 按需调整 |
|
|
|
| `logging.file.name` | 日志文件路径 | (控制台) | 指定文件路径 |
|
|
|
| `spring.datasource.hikari.maximum-pool-size` | 最大连接数 | 20 | 根据并发量调整 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 8. 启动应用
|
|
|
|
|
|
### 8.1 命令行前台启动(测试用)
|
|
|
|
|
|
```powershell
|
|
|
cd C:\hospital-mgmt
|
|
|
|
|
|
java -Xms256m -Xmx512m -XX:+UseG1GC ^
|
|
|
-Dspring.config.additional-location=file:./config/ ^
|
|
|
-Dspring.profiles.active=prod ^
|
|
|
-jar app.jar
|
|
|
```
|
|
|
|
|
|
看到以下日志表示启动成功:
|
|
|
|
|
|
```
|
|
|
Started HospitalMgmtApplication in x.xxx seconds
|
|
|
```
|
|
|
|
|
|
### 8.2 后台启动
|
|
|
|
|
|
```powershell
|
|
|
Start-Process -FilePath "java" `
|
|
|
-ArgumentList "-Xms256m","-Xmx512m","-XX:+UseG1GC","-Dspring.config.additional-location=file:./config/","-Dspring.profiles.active=prod","-jar","app.jar" `
|
|
|
-WorkingDirectory "C:\hospital-mgmt" `
|
|
|
-WindowStyle Hidden `
|
|
|
-RedirectStandardOutput "C:\hospital-mgmt\logs\startup.log" `
|
|
|
-RedirectStandardError "C:\hospital-mgmt\logs\startup-error.log"
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 9. 注册为 Windows 服务(开机自启)
|
|
|
|
|
|
推荐使用 [WinSW](https://github.com/winsw/winsw) 将 Java 应用注册为 Windows 服务。
|
|
|
|
|
|
### 9.1 下载 WinSW
|
|
|
|
|
|
1. 从 [WinSW Releases](https://github.com/winsw/winsw/releases) 下载 `WinSW-x64.exe`
|
|
|
2. 重命名为 `hospital-mgmt-service.exe`
|
|
|
3. 复制到 `C:\hospital-mgmt\`
|
|
|
|
|
|
### 9.2 创建服务配置文件
|
|
|
|
|
|
在 `C:\hospital-mgmt\` 下创建 `hospital-mgmt-service.xml`:
|
|
|
|
|
|
```xml
|
|
|
<service>
|
|
|
<id>hospital-mgmt</id>
|
|
|
<name>Hospital Management Backend</name>
|
|
|
<description>医院物业 SaaS 管理后台后端服务</description>
|
|
|
<executable>%JAVA_HOME%\bin\java.exe</executable>
|
|
|
<arguments>-Xms256m -Xmx512m -XX:+UseG1GC -Dspring.config.additional-location=file:./config/ -Dspring.profiles.active=prod -jar app.jar</arguments>
|
|
|
<workingdirectory>C:\hospital-mgmt</workingdirectory>
|
|
|
<logpath>C:\hospital-mgmt\logs\service</logpath>
|
|
|
<log mode="roll-by-size">
|
|
|
<sizeThreshold>10240</sizeThreshold>
|
|
|
<keepFiles>5</keepFiles>
|
|
|
</log>
|
|
|
<onfailure action="restart" delay="10 sec"/>
|
|
|
<onfailure action="restart" delay="30 sec"/>
|
|
|
<onfailure action="restart" delay="60 sec"/>
|
|
|
<resetfailure>5 minutes</resetfailure>
|
|
|
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
|
|
|
<startmode>Automatic</startmode>
|
|
|
<depend>MariaDB</depend>
|
|
|
</service>
|
|
|
```
|
|
|
|
|
|
> **注意**:`<depend>` 中的 `MariaDB` 需与实际 MariaDB Windows 服务名一致。可通过 `Get-Service *maria*,*mysql*` 查看服务名。
|
|
|
|
|
|
### 9.3 安装并启动服务
|
|
|
|
|
|
```powershell
|
|
|
# 以管理员身份运行
|
|
|
cd C:\hospital-mgmt
|
|
|
|
|
|
# 安装服务
|
|
|
.\hospital-mgmt-service.exe install
|
|
|
|
|
|
# 启动服务
|
|
|
.\hospital-mgmt-service.exe start
|
|
|
|
|
|
# 查看状态
|
|
|
.\hospital-mgmt-service.exe status
|
|
|
|
|
|
# 或使用 Windows 命令
|
|
|
Get-Service hospital-mgmt
|
|
|
```
|
|
|
|
|
|
### 9.4 常用服务管理命令
|
|
|
|
|
|
```powershell
|
|
|
# 停止
|
|
|
.\hospital-mgmt-service.exe stop
|
|
|
|
|
|
# 卸载
|
|
|
.\hospital-mgmt-service.exe uninstall
|
|
|
|
|
|
# 重启
|
|
|
.\hospital-mgmt-service.exe restart
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 10. 验证部署
|
|
|
|
|
|
### 10.1 检查应用状态
|
|
|
|
|
|
```powershell
|
|
|
# 检查服务是否运行
|
|
|
Get-Service hospital-mgmt
|
|
|
|
|
|
# 检查端口是否监听
|
|
|
netstat -ano | findstr :8080
|
|
|
|
|
|
# 测试 API 健康检查
|
|
|
Invoke-RestMethod -Uri "http://localhost:8080/api/v1/swagger-docs" -Method Head
|
|
|
```
|
|
|
|
|
|
### 10.2 检查数据库连接
|
|
|
|
|
|
```powershell
|
|
|
& "C:\Program Files\MariaDB 10.3\bin\mysql.exe" -uroot -proot hospital_mgmt -e "SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='hospital_mgmt';"
|
|
|
```
|
|
|
|
|
|
### 10.3 检查 Redis 连接
|
|
|
|
|
|
```powershell
|
|
|
redis-cli ping
|
|
|
# PONG
|
|
|
```
|
|
|
|
|
|
### 10.4 访问 Swagger UI
|
|
|
|
|
|
浏览器打开:`http://localhost:8080/api/v1/swagger-ui.html`
|
|
|
|
|
|
### 10.5 测试登录
|
|
|
|
|
|
```powershell
|
|
|
# 使用默认管理员账号登录
|
|
|
$body = @{
|
|
|
username = "superadmin"
|
|
|
password = "admin123"
|
|
|
} | ConvertTo-Json
|
|
|
|
|
|
Invoke-RestMethod -Uri "http://localhost:8080/api/v1/auth/login" -Method Post -Body $body -ContentType "application/json"
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 11. 防火墙配置
|
|
|
|
|
|
如果需要从其他机器访问,需开放端口:
|
|
|
|
|
|
```powershell
|
|
|
# 以管理员身份运行
|
|
|
|
|
|
# 开放后端 API 端口
|
|
|
New-NetFirewallRule -DisplayName "Hospital Mgmt API" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
|
|
|
|
|
|
# 开放 MariaDB 端口(如需远程访问数据库)
|
|
|
New-NetFirewallRule -DisplayName "MariaDB" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow
|
|
|
|
|
|
# 开放 Redis 端口(如需远程访问,不建议)
|
|
|
# New-NetFirewallRule -DisplayName "Redis" -Direction Inbound -Protocol TCP -LocalPort 6379 -Action Allow
|
|
|
```
|
|
|
|
|
|
> **安全建议**:Redis 和 MariaDB 端口不应对外网开放,仅后端应用本机访问即可。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 12. 日常运维
|
|
|
|
|
|
### 12.1 日志位置
|
|
|
|
|
|
| 日志 | 路径 |
|
|
|
|------|------|
|
|
|
| 应用日志 | `C:\hospital-mgmt\logs\hospital-mgmt.log` |
|
|
|
| WinSW 服务日志 | `C:\hospital-mgmt\logs\service\` |
|
|
|
| MariaDB 日志 | MariaDB 安装目录 `data\*.err` |
|
|
|
| Redis 日志 | Redis 安装目录或 Windows 事件日志 |
|
|
|
|
|
|
### 12.2 日志清理
|
|
|
|
|
|
应用日志默认保留 30 天(通过 logback 配置)。如需手动清理:
|
|
|
|
|
|
```powershell
|
|
|
# 删除 30 天前的日志
|
|
|
Get-ChildItem "C:\hospital-mgmt\logs\" -Recurse -File |
|
|
|
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
|
|
|
Remove-Item -Force
|
|
|
```
|
|
|
|
|
|
### 12.3 数据库备份
|
|
|
|
|
|
```powershell
|
|
|
# 创建备份目录
|
|
|
New-Item -ItemType Directory -Path "C:\hospital-mgmt\backups" -Force
|
|
|
|
|
|
# 执行备份
|
|
|
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
|
|
& "C:\Program Files\MariaDB 10.3\bin\mysqldump.exe" -uroot -proot --default-character-set=utf8mb4 --single-transaction hospital_mgmt > "C:\hospital-mgmt\backups\hospital_mgmt_$timestamp.sql"
|
|
|
```
|
|
|
|
|
|
可配合 Windows 任务计划程序实现自动备份:
|
|
|
|
|
|
```powershell
|
|
|
# 创建每天凌晨2点的备份任务
|
|
|
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\hospital-mgmt\backup.ps1"
|
|
|
$trigger = New-ScheduledTaskTrigger -Daily -At 2am
|
|
|
Register-ScheduledTask -TaskName "HospitalMgmt-DB-Backup" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest
|
|
|
```
|
|
|
|
|
|
### 12.4 应用更新
|
|
|
|
|
|
```powershell
|
|
|
# 1. 停止服务
|
|
|
cd C:\hospital-mgmt
|
|
|
.\hospital-mgmt-service.exe stop
|
|
|
|
|
|
# 2. 备份旧版本
|
|
|
Copy-Item "app.jar" "app.jar.bak" -Force
|
|
|
|
|
|
# 3. 替换 jar 包
|
|
|
Copy-Item "D:\git\git\医院后勤管理\backend\target\hospital-mgmt-1.0.0.jar" "app.jar" -Force
|
|
|
|
|
|
# 4. 启动服务
|
|
|
.\hospital-mgmt-service.exe start
|
|
|
|
|
|
# 5. 验证
|
|
|
Get-Service hospital-mgmt
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 13. 常见问题
|
|
|
|
|
|
### Q1: 启动报错 `Communications link failure`(数据库连接失败)
|
|
|
|
|
|
**排查步骤**:
|
|
|
1. 确认 MariaDB 服务正在运行:`Get-Service MySQL`
|
|
|
2. 确认端口可达:`Test-NetConnection localhost -Port 3306`
|
|
|
3. 确认用户名密码正确:`mysql -uroot -proot -e "SELECT 1;"`
|
|
|
4. 检查配置文件中 `spring.datasource.url` 是否正确
|
|
|
|
|
|
### Q2: 启动报错 `Unable to connect to Redis`(Redis 连接失败)
|
|
|
|
|
|
**排查步骤**:
|
|
|
1. 确认 Redis 服务运行:`Get-Service *redis*`
|
|
|
2. 测试连接:`redis-cli ping`
|
|
|
3. 如 Redis 设置了密码,确认 `spring.data.redis.password` 配置正确
|
|
|
4. 如使用 WSL2 运行 Redis,需将 `spring.data.redis.host` 改为 WSL 的 IP 地址
|
|
|
|
|
|
### Q3: 端口 8080 被占用
|
|
|
|
|
|
```powershell
|
|
|
# 查找占用进程
|
|
|
netstat -ano | findstr :8080
|
|
|
|
|
|
# 结束进程(替换 PID)
|
|
|
taskkill /PID <PID> /F
|
|
|
|
|
|
# 或修改应用端口
|
|
|
# 在 application-prod.yml 中修改 server.port
|
|
|
```
|
|
|
|
|
|
### Q4: JVM 内存不足
|
|
|
|
|
|
编辑 `hospital-mgmt-service.xml` 中的 `<arguments>` 部分,增大内存:
|
|
|
|
|
|
```
|
|
|
-Xms512m -Xmx1024m
|
|
|
```
|
|
|
|
|
|
### Q5: 日志中文乱码
|
|
|
|
|
|
1. 确保 Windows 系统区域设置支持 UTF-8:
|
|
|
- **设置** → **时间和语言** → **语言和区域** → **管理语言设置** → **更改系统区域设置** → 勾选 **Beta: 使用 Unicode UTF-8 提供全球语言支持**
|
|
|
2. 重启电脑
|
|
|
|
|
|
### Q6: 服务启动后立即停止
|
|
|
|
|
|
1. 查看服务日志:`C:\hospital-mgmt\logs\service\`
|
|
|
2. 查看应用日志:`C:\hospital-mgmt\logs\hospital-mgmt.log`
|
|
|
3. 手动前台启动排查:`java -jar app.jar -Dspring.profiles.active=prod`
|
|
|
|
|
|
### Q7: MariaDB 服务名与 WinSW 配置不一致
|
|
|
|
|
|
```powershell
|
|
|
# 查看实际 MariaDB 服务名
|
|
|
Get-Service | Where-Object { $_.Name -match "maria|mysql" }
|
|
|
|
|
|
# 修改 hospital-mgmt-service.xml 中 <depend> 为实际服务名
|
|
|
# 例如:<depend>MySQL</depend> 或 <depend>MariaDB10</depend>
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 附录:一键部署脚本
|
|
|
|
|
|
将以下内容保存为 `C:\hospital-mgmt\deploy.ps1`,可快速完成部署:
|
|
|
|
|
|
```powershell
|
|
|
# ============================================
|
|
|
# 医院物业 SaaS 管理后台 - Windows 一键部署脚本
|
|
|
# 使用方式: 以管理员身份运行 PowerShell
|
|
|
# .\deploy.ps1
|
|
|
# ============================================
|
|
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
|
|
# ---- 配置区 ----
|
|
|
$ProjectDir = "D:\git\git\医院后勤管理"
|
|
|
$DeployDir = "C:\hospital-mgmt"
|
|
|
$MariaDBPath = "C:\Program Files\MariaDB 10.3\bin"
|
|
|
$DbUser = "root"
|
|
|
$DbPass = "root"
|
|
|
$DbName = "hospital_mgmt"
|
|
|
|
|
|
Write-Host "===== 医院物业 SaaS 管理后台 - 部署开始 =====" -ForegroundColor Cyan
|
|
|
|
|
|
# 1. 创建部署目录
|
|
|
Write-Host "[1/6] 创建部署目录..." -ForegroundColor Yellow
|
|
|
New-Item -ItemType Directory -Path $DeployDir -Force | Out-Null
|
|
|
New-Item -ItemType Directory -Path "$DeployDir\logs" -Force | Out-Null
|
|
|
New-Item -ItemType Directory -Path "$DeployDir\config" -Force | Out-Null
|
|
|
New-Item -ItemType Directory -Path "$DeployDir\backups" -Force | Out-Null
|
|
|
|
|
|
# 2. 编译打包
|
|
|
Write-Host "[2/6] 编译打包..." -ForegroundColor Yellow
|
|
|
Push-Location "$ProjectDir\backend"
|
|
|
mvn clean package -DskipTests -q
|
|
|
if ($LASTEXITCODE -ne 0) { throw "Maven 打包失败" }
|
|
|
Pop-Location
|
|
|
|
|
|
# 3. 复制文件
|
|
|
Write-Host "[3/6] 复制文件..." -ForegroundColor Yellow
|
|
|
Copy-Item "$ProjectDir\backend\target\hospital-mgmt-1.0.0.jar" "$DeployDir\app.jar" -Force
|
|
|
|
|
|
# 4. 初始化数据库
|
|
|
Write-Host "[4/6] 初始化数据库..." -ForegroundColor Yellow
|
|
|
$mysqlExe = "$MariaDBPath\mysql.exe"
|
|
|
if (Test-Path $mysqlExe) {
|
|
|
& $mysqlExe -u$DbUser -p$DbPass --default-character-set=utf8mb4 -e "source $($ProjectDir -replace '\\','/')/backend/src/main/resources/db/init.sql"
|
|
|
Write-Host " 数据库初始化完成" -ForegroundColor Green
|
|
|
} else {
|
|
|
Write-Host " 警告: 未找到 mysql.exe ($mysqlExe),请手动执行 init.sql" -ForegroundColor Red
|
|
|
}
|
|
|
|
|
|
# 5. 复制配置文件(如不存在)
|
|
|
Write-Host "[5/6] 配置文件..." -ForegroundColor Yellow
|
|
|
if (-not (Test-Path "$DeployDir\config\application-prod.yml")) {
|
|
|
Copy-Item "$ProjectDir\backend\src\main\resources\application-prod.yml" "$DeployDir\config\application-prod.yml"
|
|
|
Write-Host " 已复制默认生产配置,请检查并修改!" -ForegroundColor Yellow
|
|
|
} else {
|
|
|
Write-Host " 配置文件已存在,跳过" -ForegroundColor Green
|
|
|
}
|
|
|
|
|
|
# 6. 完成提示
|
|
|
Write-Host "[6/6] 部署完成!" -ForegroundColor Green
|
|
|
Write-Host ""
|
|
|
Write-Host "===== 下一步操作 =====" -ForegroundColor Cyan
|
|
|
Write-Host "1. 编辑配置文件: $DeployDir\config\application-prod.yml"
|
|
|
Write-Host "2. 前台测试启动:"
|
|
|
Write-Host " cd $DeployDir"
|
|
|
Write-Host " java -Xms256m -Xmx512m -Dspring.config.additional-location=file:./config/ -Dspring.profiles.active=prod -jar app.jar"
|
|
|
Write-Host "3. 注册为 Windows 服务(需下载 WinSW):"
|
|
|
Write-Host " .\hospital-mgmt-service.exe install"
|
|
|
Write-Host "4. 访问 Swagger: http://localhost:8080/api/v1/swagger-ui.html"
|
|
|
Write-Host "5. 默认管理员: superadmin / admin123"
|
|
|
Write-Host ""
|
|
|
Write-Host "===== 部署结束 =====" -ForegroundColor Cyan
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 默认账号
|
|
|
|
|
|
| 角色 | 用户名 | 密码 |
|
|
|
|------|--------|------|
|
|
|
| 超级管理员 | superadmin | admin123 |
|
|
|
|
|
|
> **生产环境务必修改默认密码和 JWT 密钥!**
|