# devup **Repository Path**: programmer-turn-to-duck/devup ## Basic Information - **Project Name**: devup - **Description**: 一个简易的测试环境部署工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-07 - **Last Updated**: 2026-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 轻量 Java 应用自动部署方案 ## 项目结构 ``` . ├── deploy_server/ # FastAPI 部署后台(运行在 Linux 目标服务器上) │ ├── main.py │ ├── models.py │ ├── config.py │ ├── deploy.py │ ├── deploy-config.json │ ├── requirements.txt │ └── static/ │ └── admin.html # Web 管理后台(Tailwind CSS) └── deploy_client/ # Python tkinter GUI 客户端(运行在 Windows 本地) ├── main.py ├── config.py ├── config.json.example └── requirements.txt ``` ## 部署后台 (deploy_server) ### 安装依赖 ```bash cd deploy_server pip install -r requirements.txt ``` ### 配置 编辑 `deploy-config.json`,按项目 key 配置: | 字段 | 说明 | |---|---| | `save_dir` | jar 包保存目录 | | `filename` | 固定文件名,覆盖旧版本 | | `post_commands` | 后置指令,支持 `${save_dir}` 和 `${saved_file}` 变量替换 | | `env_vars` | 额外环境变量 | | `api_key` | 接口鉴权密钥(与客户端配置对应) | | `skip_jar_validation` | 是否跳过 JAR/ZIP 魔数校验(测试时设为 `true`) | ### 启动 ```bash python main.py ``` 默认监听 `0.0.0.0:8080`。 配置文件默认读取同级目录下的 `deploy-config.json`,如需指定其他路径可修改 `main.py` 中的 `ConfigManager` 初始化参数。 ### 接口 | 接口 | 方法 | 说明 | |---|---|---| | `/deploy` | POST | 接收 key、api_key、file,返回 task_id | | `/task/{id}` | GET | 查询任务状态与日志 | | `/keys` | GET | 返回所有可用 key 列表 | | `/admin` | GET | Web 管理后台页面 | | `/admin/configs` | GET | 获取所有配置详情 | | `/admin/configs` | POST | 保存/更新配置 | | `/admin/configs/{key}` | DELETE | 删除配置 | ### 特性 - **配置热加载**:每 5 秒检测 `deploy-config.json` 修改时间,变更后自动重载 - **同 key 串行**:同一个 key 的部署任务排队执行,不同 key 可并行 - **旧文件备份**:覆盖前自动备份为 `.bak` - **日志留存**:内存保留最近 20 条任务日志 - **文件校验**:上传完成后检查 ZIP 魔数,确保是合法 JAR ### Web 管理后台 访问 `http://server:8080/admin`,使用 HTTP Basic Auth 登录(默认用户名 `admin` / 密码 `admin`,可通过环境变量修改)。 ```bash # 自定义管理员账号密码 DEPLOY_ADMIN_USER=root DEPLOY_ADMIN_PASS=yourpassword python main.py ``` 管理后台功能: - 查看所有部署配置的列表 - 新增配置(填写 key、save_dir、filename、post_commands、api_key 等) - 编辑已有配置 - 删除配置 所有修改会实时持久化到 `deploy-config.json`,同时触发配置热加载。 ## 本地客户端 (deploy_client) ### 安装依赖 ```bash cd deploy_client pip install -r requirements.txt ``` ### 配置 在客户端同级目录下创建 `config.json`(可参考 `config.json.example`): ```json { "hospitalSign:portal": { "server": "http://deploy-server:8080", "api_key": "sk-xxx", "local_path_pattern": "D:/CACODE/hospitalSignApi/operation/target/hospitalSign_portal_hy-dev-*.jar" } } ``` - `local_path_pattern` 支持 glob 通配符(如 `*.jar`) - 匹配多个文件时,自动取修改时间最新的一个 ### 启动 ```bash python main.py ``` ### 使用流程 1. 下拉框选择项目 key 2. 自动扫描目录,匹配最新 jar,显示文件名和修改时间 3. 点击【开始部署】上传文件 4. 实时轮询任务状态,日志滚动显示 5. 2 分钟内自动判断成功 / 失败 / 超时 ## 安全设计 - **接口鉴权**:通过 `api_key` 校验 - **指令隔离**:`post_commands` 由服务端配置决定,客户端无法传入任意命令 - **路径隔离**:每个 key 只能写入自己的 `save_dir` - **文件校验**:限制最大 500MB,校验 JAR 魔数 ## 扩展预留 - 增加 `notify_webhook` 字段,部署完成推送到企业微信/钉钉 - `env_vars` 支持按 key 注入不同环境变量 - 如需审批,可在 `post_commands` 前加状态机拦截 - 如需支持多服务器,配置中可增加 `target_host` 字段,后台通过 SSH 分发