Initial commit: add AutoDeploy project
This commit is contained in:
107
README.md
Normal file
107
README.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# AutoDeploy
|
||||
|
||||
AutoDeploy 是一个面向 Windows 的 Spring Boot + Vue 本地自动化部署工具。它通过图形界面扫描前后端项目、检查开发环境、生成部署步骤,并依次完成后端构建、前端依赖安装、SQL 导入和服务启动。
|
||||
|
||||
## 主要功能
|
||||
|
||||
- 自动识别 Maven/Gradle Spring Boot 后端、一个或多个 Vue/Vite 前端以及 `.sql` 文件。
|
||||
- 从 Maven、Gradle 和 Spring Boot 配置中推断 Java 版本,推荐 JDK 8、11、17 或 21。
|
||||
- 检测 JDK、Maven、Gradle、Node.js、npm、Vue CLI、MySQL 和 Git。
|
||||
- 支持手动指定工具路径,并可将工具目录写入当前用户的 `PATH`;JDK、Maven 和 Gradle 会同步设置对应的环境变量。
|
||||
- 通过 `winget` 辅助安装常用开发环境,执行安装前会要求用户确认。
|
||||
- 使用 Maven 或 Gradle 构建后端;已有可运行 JAR 时自动跳过重复构建。
|
||||
- 前端缺少 `node_modules` 时自动执行 `npm install`,随后运行 `serve`、`dev` 或 `start` 脚本。
|
||||
- 可按顺序导入多个 SQL 文件,并启动后端、用户端和管理端。
|
||||
- 服务启动前检查端口占用并终止旧进程,等待新服务端口就绪后再继续。
|
||||
- 后端在独立控制台中显示实时输出,各服务同时保留运行日志。
|
||||
|
||||
## 运行环境
|
||||
|
||||
- Windows 10/11
|
||||
- Python 3.9 或更高版本(需包含 Tkinter,Windows 官方 Python 安装包默认提供)
|
||||
- 待部署项目所需的 JDK、Maven/Gradle、Node.js/npm 和 MySQL
|
||||
- 可选:`winget`,用于在界面中安装缺失工具
|
||||
|
||||
本项目本身只使用 Python 标准库,不需要执行 `pip install`。
|
||||
|
||||
## 快速开始
|
||||
|
||||
克隆项目后进入项目目录:
|
||||
|
||||
```powershell
|
||||
python main.py
|
||||
```
|
||||
|
||||
在工作台中按以下顺序操作:
|
||||
|
||||
1. 选择包含后端、前端和 SQL 文件的项目根目录。
|
||||
2. 点击“扫描项目”,确认识别到的组件和推荐 JDK 版本。
|
||||
3. 点击“检测环境”;缺失的工具可以通过“安装环境”处理,也可以手动选择可执行文件。
|
||||
4. 如果需要导入 SQL,填写 MySQL 用户、密码和数据库名。数据库名默认取第一个 SQL 文件的文件名。
|
||||
5. 点击“执行部署”,在运行日志中查看每个步骤和最终访问地址。
|
||||
|
||||
当前默认端口如下:
|
||||
|
||||
| 服务 | 端口 | 地址 |
|
||||
| --- | ---: | --- |
|
||||
| Spring Boot 后端 | 8080 | `http://localhost:8080` |
|
||||
| 管理端 | 8081 | `http://localhost:8081` |
|
||||
| 用户端 | 8082 | `http://localhost:8082` |
|
||||
|
||||
如果 Vue/Vite 配置文件中声明了端口,工具会优先读取该配置;端口发生冲突时部署会停止并给出提示。
|
||||
|
||||
## 项目识别规则
|
||||
|
||||
- 后端:查找 `pom.xml`、`build.gradle` 或 `build.gradle.kts`,并结合 Spring Boot 依赖和 `src/main/java` 判断候选项目。
|
||||
- 前端:查找 `package.json`,结合 Vue 依赖、构建脚本及 `vue.config.js`/`vite.config.*` 判断项目。
|
||||
- 前端角色:目录名包含 `admin`、`manage`、`后台` 等关键字时识别为管理端;包含 `user`、`client`、`web`、`用户` 等关键字时识别为用户端。
|
||||
- 启动脚本:依次使用 `serve`、`dev`、`start` 中第一个可用的 npm 脚本。
|
||||
- SQL:递归收集项目中的 `.sql` 文件;扫描时跳过 `.git`、`node_modules`、`target`、`build`、`dist` 等目录。
|
||||
|
||||
## 构建与运行流程
|
||||
|
||||
部署计划会根据扫描结果动态生成,典型顺序为:
|
||||
|
||||
1. 使用 `mvn clean package -DskipTests` 或 Gradle `bootJar` 构建后端。
|
||||
2. 为尚未安装依赖的前端执行 `npm install`。
|
||||
3. 使用 MySQL 命令行依次导入 SQL 文件。
|
||||
4. 使用 `java -jar` 启动后端,并等待 8080 端口就绪。
|
||||
5. 使用 npm 启动各前端开发服务器,并等待对应端口就绪。
|
||||
6. 在运行日志中输出所有服务的访问地址。
|
||||
|
||||
运行日志默认写入待部署项目根目录下的 `deploy` 文件夹:
|
||||
|
||||
- `backend.log`
|
||||
- `frontend-user.log`
|
||||
- `frontend-admin.log`
|
||||
|
||||
自定义工具路径保存在本机 `.deploy_tool_config/tool_paths.json` 中,该目录已加入 `.gitignore`。
|
||||
|
||||
## 测试
|
||||
|
||||
运行全部单元测试:
|
||||
|
||||
```powershell
|
||||
python -m unittest discover -s tests -p "test_*.py"
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
|
||||
```text
|
||||
.
|
||||
├── main.py # 程序入口
|
||||
├── deploy_tool/
|
||||
│ ├── gui.py # Tkinter 工作台
|
||||
│ ├── scanner.py # 项目扫描与组件识别
|
||||
│ ├── environment.py # 本机环境检测与工具发现
|
||||
│ ├── installer.py # winget 安装命令与 JDK 推荐
|
||||
│ ├── path_manager.py # 用户环境变量管理
|
||||
│ ├── deployer.py # 部署计划、命令执行与服务管理
|
||||
│ └── service_console.py # 后端独立控制台与日志转存
|
||||
├── tests/ # 单元测试
|
||||
└── docs/ # 设计说明与实现计划
|
||||
```
|
||||
|
||||
## 当前范围
|
||||
|
||||
当前版本聚焦 Windows 本机的开发/演示环境部署。远程服务器上传、Nginx 配置、Docker 部署、生产环境进程守护和凭据托管暂不在本版本范围内。
|
||||
Reference in New Issue
Block a user