From 0d9801346455d9ce03a3d453243786c050580a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BC=96=E7=A8=8B=E4=B8=93=E5=AE=B6?= Date: Wed, 25 Mar 2026 08:23:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Windows=20?= =?UTF-8?q?=E4=B8=93=E7=94=A8=E9=83=A8=E7=BD=B2=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - deploy-windows.bat: 一键部署脚本 (Node.js + PM2) - docker-windows.bat: Docker 一键部署脚本 - manage-windows.bat: 服务管理工具 (启动/停止/日志/自启) - check-env.bat: 环境检查工具 - uninstall.bat: 卸载清理工具 - WINDOWS_DEPLOY.md: Windows 部署完整文档 --- WINDOWS_DEPLOY.md | 358 +++++++++++++++++++++++++++++++++++++++++++++ check-env.bat | 95 ++++++++++++ deploy-windows.bat | 107 ++++++++++++++ docker-windows.bat | 76 ++++++++++ manage-windows.bat | 128 ++++++++++++++++ uninstall.bat | 71 +++++++++ 6 files changed, 835 insertions(+) create mode 100644 WINDOWS_DEPLOY.md create mode 100644 check-env.bat create mode 100644 deploy-windows.bat create mode 100644 docker-windows.bat create mode 100644 manage-windows.bat create mode 100644 uninstall.bat diff --git a/WINDOWS_DEPLOY.md b/WINDOWS_DEPLOY.md new file mode 100644 index 0000000..24d52ee --- /dev/null +++ b/WINDOWS_DEPLOY.md @@ -0,0 +1,358 @@ +# Windows 部署指南 + +## 📦 快速开始 + +### 方法一:一键部署(推荐) + +1. **双击运行** `deploy-windows.bat` +2. 按提示完成配置 +3. 部署完成后服务自动启动 + +### 方法二:Docker 部署 + +1. **双击运行** `docker-windows.bat` +2. 按提示完成配置 +3. Docker 自动构建并启动 + +--- + +## 🛠️ 脚本说明 + +| 脚本文件 | 用途 | +|---------|------| +| `deploy-windows.bat` | 一键部署脚本(Node.js + PM2) | +| `docker-windows.bat` | Docker 一键部署脚本 | +| `manage-windows.bat` | 服务管理工具(启动/停止/日志) | +| `check-env.bat` | 环境检查工具 | +| `uninstall.bat` | 卸载清理工具 | + +--- + +## 📋 前置要求 + +### Node.js 部署方式 + +- **Node.js** v18+ ([下载地址](https://nodejs.org/)) +- **npm**(随 Node.js 自动安装) + +### Docker 部署方式 + +- **Docker Desktop for Windows** ([下载地址](https://www.docker.com/products/docker-desktop/)) +- 启用 WSL2 后端(推荐) + +--- + +## 🔧 详细步骤 + +### 1. 环境检查 + +运行 `check-env.bat` 检查环境是否就绪。 + +```cmd +.\check-env.bat +``` + +根据输出安装缺失的组件。 + +--- + +### 2. 配置环境变量 + +编辑 `.env` 文件: + +```env +# 飞书配置 +FEISHU_APP_ID=cli_xxxxxxxxxx +FEISHU_APP_SECRET=xxxxxxxxxxxxxx +FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxx +FEISHU_ENCRYPT_KEY=xxxxxxxxxxxxxx + +# 飞书事件接收模式 +FEISHU_MODE=http + +# 七牛云配置(可选) +QINIU_ACCESS_KEY=xxxxxxxxxxxxxx +QINIU_SECRET_KEY=xxxxxxxxxxxxxx +QINIU_BUCKET=your-bucket-name +QINIU_REGION=z0 +QINIU_DOMAIN=https://your-cdn.com + +# 服务配置 +PORT=3030 +NODE_ENV=production +``` + +--- + +### 3. 配置七牛云 + +编辑 `config/qiniu-config.json`: + +```json +{ + "buckets": { + "default": { + "accessKey": "YOUR_ACCESS_KEY", + "secretKey": "YOUR_SECRET_KEY", + "bucket": "your-bucket-name", + "region": "z0", + "domain": "https://your-cdn.com" + } + }, + "uploadPaths": { + "ipa": "/ipa/app.ipa", + "apk": "/apk/app.apk" + }, + "uploadProfiles": { + "iOS": { + "bucket": "default", + "path": "ipa" + }, + "安卓": { + "bucket": "default", + "path": "apk" + } + } +} +``` + +--- + +### 4. 启动服务 + +#### 使用 PM2 + +```cmd +.\manage-windows.bat +``` + +选择 `1. 启动服务` + +#### 使用 Docker + +```cmd +docker-compose up -d +``` + +--- + +### 5. 设置开机自启 + +**PM2 方式**(需要管理员权限): + +```cmd +# 以管理员身份打开命令提示符 +pm2 startup +pm2 save +``` + +**Docker 方式**: + +Docker Desktop 会自动随系统启动。 + +--- + +## 📊 管理命令 + +### PM2 命令 + +```cmd +# 查看状态 +pm2 list + +# 查看日志 +pm2 logs qiniu-bot + +# 重启服务 +pm2 restart qiniu-bot + +# 停止服务 +pm2 stop qiniu-bot + +# 删除服务 +pm2 delete qiniu-bot + +# 清空日志 +pm2 flush +``` + +### Docker 命令 + +```cmd +# 查看日志 +docker-compose logs -f qiniu-bot + +# 重启服务 +docker-compose restart + +# 停止服务 +docker-compose stop + +# 启动服务 +docker-compose start + +# 停止并删除 +docker-compose down + +# 重新构建 +docker-compose build --no-cache +``` + +--- + +## 🔍 故障排查 + +### 问题 1: 端口 3030 被占用 + +**解决方案:** + +```cmd +# 查找占用进程 +netstat -ano | findstr :3030 + +# 杀掉进程(替换 PID) +taskkill /PID 12345 /F + +# 或修改 .env 中的 PORT +PORT=3031 +``` + +--- + +### 问题 2: PM2 未找到 + +**解决方案:** + +```cmd +# 全局安装 PM2 +npm install -g pm2 + +# 如果权限不足,以管理员身份运行 +# 或使用 yarn +yarn global add pm2 +``` + +--- + +### 问题 3: Docker 构建失败 + +**解决方案:** + +1. 确保 Docker Desktop 正在运行 +2. 增加 Docker 资源分配(设置 → Resources) +3. 使用国内镜像加速器: + +```json +// Docker Desktop 设置 → Docker Engine +{ + "registry-mirrors": [ + "https://docker.mirrors.ustc.edu.cn", + "https://hub-mirror.c.163.com" + ] +} +``` + +--- + +### 问题 4: 依赖安装失败 + +**解决方案:** + +```cmd +# 清理缓存 +npm cache clean --force + +# 删除 node_modules +rmdir /s /q node_modules + +# 重新安装 +npm install + +# 或使用淘宝镜像 +npm config set registry https://registry.npmmirror.com +npm install +``` + +--- + +### 问题 5: 飞书回调失败 + +**检查清单:** + +- [ ] 服务器有公网 IP 或使用内网穿透 +- [ ] 防火墙开放 3030 端口 +- [ ] 飞书开放平台配置正确的回调 URL +- [ ] `.env` 中 `FEISHU_VERIFICATION_TOKEN` 和 `FEISHU_ENCRYPT_KEY` 正确 + +**测试回调 URL:** + +```cmd +# 使用 ngrok 内网穿透 +ngrok http 3030 + +# 将生成的 URL 配置到飞书开放平台 +# 例如:https://xxxx.ngrok.io/feishu/event +``` + +--- + +## 📝 日志位置 + +### PM2 日志 + +``` +C:\Users\你的用户名\.pm2\logs\ +``` + +### Docker 日志 + +```cmd +docker-compose logs qiniu-bot +``` + +### 应用日志 + +``` +logs\*.log +``` + +--- + +## 🧹 卸载 + +运行 `uninstall.bat` 自动清理。 + +或手动执行: + +```cmd +# PM2 方式 +pm2 stop qiniu-bot +pm2 delete qiniu-bot +rmdir /s /q node_modules +del /q /s logs\*.* + +# Docker 方式 +docker-compose down +docker rmi qiniu-feishu-bot:latest +``` + +--- + +## 💡 最佳实践 + +1. **生产环境** 使用 Docker 部署(更稳定、易迁移) +2. **开发环境** 使用 PM2 部署(调试方便) +3. **定期备份** `config/` 和 `.env` 文件 +4. **监控日志** 使用 `pm2 logs` 或 `docker-compose logs -f` +5. **更新部署** 先备份配置,再拉取代码,最后重启服务 + +--- + +## 📞 获取帮助 + +如遇问题,请提供以下信息: + +1. 运行 `check-env.bat` 的输出 +2. 错误日志(`pm2 logs` 或 `docker-compose logs`) +3. `.env` 配置(隐藏敏感信息) +4. 操作系统版本 diff --git a/check-env.bat b/check-env.bat new file mode 100644 index 0000000..452848e --- /dev/null +++ b/check-env.bat @@ -0,0 +1,95 @@ +@echo off +chcp 65001 >nul +echo ======================================== +echo 环境检查工具 +echo ======================================== +echo. + +REM 检查 Node.js +echo [检查] Node.js... +where node >nul 2>nul +if %errorlevel% neq 0 ( + echo [✗] 未安装 Node.js + echo 下载地址:https://nodejs.org/ +) else ( + for /f "tokens=2" %%i in ('node -v') do echo [✓] Node.js 版本:%%i +) + +echo. +echo [检查] npm... +where npm >nul 2>nul +if %errorlevel% neq 0 ( + echo [✗] 未安装 npm +) else ( + for /f "tokens=*" %%i in ('npm -v') do echo [✓] npm 版本:%%i +) + +echo. +echo [检查] PM2... +where pm2 >nul 2>nul +if %errorlevel% neq 0 ( + echo [✗] 未安装 PM2 + echo 运行:npm install -g pm2 +) else ( + for /f "tokens=3" %%i in ('pm2 -v') do echo [✓] PM2 版本:%%i +) + +echo. +echo [检查] Docker... +where docker >nul 2>nul +if %errorlevel% neq 0 ( + echo [✗] 未安装 Docker + echo 下载地址:https://www.docker.com/products/docker-desktop/ +) else ( + for /f "tokens=*" %%i in ('docker --version') do echo [✓] Docker: %%i +) + +echo. +echo [检查] 端口 3030... +netstat -ano | findstr :3030 >nul 2>nul +if %errorlevel% equ 0 ( + echo [⚠] 端口 3030 已被占用 + echo 占用进程 PID: + netstat -ano | findstr :3030 +) else ( + echo [✓] 端口 3030 可用 +) + +echo. +echo [检查] .env 文件... +if exist .env ( + echo [✓] .env 文件存在 + echo. + echo [检查] 环境变量配置: + findstr /C:"FEISHU_APP_ID=" .env + findstr /C:"FEISHU_APP_SECRET=" .env + findstr /C:"FEISHU_VERIFICATION_TOKEN=" .env + findstr /C:"FEISHU_ENCRYPT_KEY=" .env +) else ( + echo [✗] .env 文件不存在 + echo 请复制 .env.example 并配置 +) + +echo. +echo [检查] node_modules... +if exist node_modules ( + echo [✓] 依赖已安装 +) else ( + echo [✗] 依赖未安装 + echo 运行:npm install +) + +echo. +echo [检查] config 目录... +if exist config\qiniu-config.json ( + echo [✓] 配置文件存在 +) else ( + echo [✗] 配置文件不存在 + echo 请创建 config\qiniu-config.json +) + +echo. +echo ======================================== +echo 检查完成! +echo ======================================== +pause diff --git a/deploy-windows.bat b/deploy-windows.bat new file mode 100644 index 0000000..f9dbf9a --- /dev/null +++ b/deploy-windows.bat @@ -0,0 +1,107 @@ +@echo off +chcp 65001 >nul +echo ======================================== +echo 七牛云上传 - 飞书机器人 Windows 部署 +echo ======================================== +echo. + +REM 检查 Node.js +where node >nul 2>nul +if %errorlevel% neq 0 ( + echo [错误] 未检测到 Node.js + echo 请先安装 Node.js v18+: https://nodejs.org/ + pause + exit /b 1 +) + +for /f "tokens=2" %%i in ('node -v') do set NODE_VERSION=%%i +echo [✓] Node.js 版本:%NODE_VERSION% + +REM 检查 npm +where npm >nul 2>nul +if %errorlevel% neq 0 ( + echo [错误] 未检测到 npm + pause + exit /b 1 +) + +echo. +echo [步骤 1/5] 安装依赖... +call npm install +if %errorlevel% neq 0 ( + echo [错误] 依赖安装失败 + pause + exit /b 1 +) +echo [✓] 依赖安装完成 + +echo. +echo [步骤 2/5] 配置环境变量... +if not exist .env ( + copy .env.example .env + echo [✓] 已创建 .env 文件 + echo. + echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + echo [重要] 请编辑 .env 文件并填入配置信息 + echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + echo. + notepad .env + echo. + set /p CONTINUE="配置完成后按回车继续..." +) else ( + echo [✓] .env 文件已存在 +) + +echo. +echo [步骤 3/5] 创建必要目录... +if not exist logs mkdir logs +if not exist config mkdir config +echo [✓] 目录创建完成 + +echo. +echo [步骤 4/5] 检查 PM2... +where pm2 >nul 2>nul +if %errorlevel% neq 0 ( + echo [!] PM2 未安装,正在安装... + call npm install -g pm2 + if %errorlevel% neq 0 ( + echo [错误] PM2 安装失败,请以管理员身份运行此脚本 + pause + exit /b 1 + ) + echo [✓] PM2 安装完成 +) else ( + echo [✓] PM2 已安装 +) + +echo. +echo [步骤 5/5] 启动服务... +call pm2 start pm2.config.cjs --name qiniu-bot +if %errorlevel% neq 0 ( + echo [错误] 服务启动失败 + pause + exit /b 1 +) + +echo. +echo ======================================== +echo 部署成功! +echo ======================================== +echo. +echo 服务状态查看:pm2 logs qiniu-bot +echo 停止服务:pm2 stop qiniu-bot +echo 重启服务:pm2 restart qiniu-bot +echo. + +REM 设置开机自启 +echo [提示] 是否设置开机自启?(Y/N) +set /p AUTOSTART= +if /i "%AUTOSTART%"=="Y" ( + echo. + echo [提示] 请以管理员身份运行以下命令设置开机自启: + echo pm2 startup + echo pm2 save + echo. +) + +pause diff --git a/docker-windows.bat b/docker-windows.bat new file mode 100644 index 0000000..2967781 --- /dev/null +++ b/docker-windows.bat @@ -0,0 +1,76 @@ +@echo off +chcp 65001 >nul +title 七牛云上传 - 飞书机器人 Docker 部署 + +REM 检查 Docker +where docker >nul 2>nul +if %errorlevel% neq 0 ( + echo [错误] 未检测到 Docker + echo 请先安装 Docker Desktop: https://www.docker.com/products/docker-desktop/ + pause + exit /b 1 +) + +echo [✓] Docker 已安装 +for /f "tokens=*" %%i in ('docker --version') do echo %%i + +echo. +echo [步骤 1/4] 配置环境变量... +if not exist .env ( + copy .env.example .env + echo [✓] 已创建 .env 文件 + echo. + echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + echo [重要] 请编辑 .env 文件并填入配置信息 + echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + echo. + notepad .env + echo. + set /p CONTINUE="配置完成后按回车继续..." +) else ( + echo [✓] .env 文件已存在 +) + +echo. +echo [步骤 2/4] 创建必要目录... +if not exist logs mkdir logs +if not exist config mkdir config +echo [✓] 目录创建完成 + +echo. +echo [步骤 3/4] 构建镜像... +call docker-compose build +if %errorlevel% neq 0 ( + echo [错误] 镜像构建失败 + pause + exit /b 1 +) +echo [✓] 镜像构建完成 + +echo. +echo [步骤 4/4] 启动容器... +call docker-compose up -d +if %errorlevel% neq 0 ( + echo [错误] 容器启动失败 + pause + exit /b 1 +) +echo [✓] 容器启动成功 + +echo. +echo ======================================== +echo Docker 部署成功! +echo ======================================== +echo. +echo 容器名称:qiniu-bot +echo 服务端口:3030 +echo. +echo 常用命令: +echo docker-compose logs -f qiniu-bot 查看日志 +echo docker-compose stop 停止服务 +echo docker-compose start 启动服务 +echo docker-compose restart 重启服务 +echo docker-compose down 停止并删除容器 +echo. + +pause diff --git a/manage-windows.bat b/manage-windows.bat new file mode 100644 index 0000000..78725e9 --- /dev/null +++ b/manage-windows.bat @@ -0,0 +1,128 @@ +@echo off +chcp 65001 >nul +title 七牛云上传 - 飞书机器人 管理工具 + +:MENU +cls +echo ======================================== +echo 七牛云上传 - 飞书机器人 管理工具 +echo ======================================== +echo. +echo 1. 启动服务 +echo 2. 停止服务 +echo 3. 重启服务 +echo 4. 查看状态 +echo 5. 查看日志 +echo 6. 清空日志 +echo 7. 开机自启设置 +echo 8. 取消开机自启 +echo 0. 退出 +echo. +echo ======================================== +set /p CHOICE="请选择操作 (0-8): " + +if "%CHOICE%"=="1" goto START +if "%CHOICE%"=="2" goto STOP +if "%CHOICE%"=="3" goto RESTART +if "%CHOICE%"=="4" goto STATUS +if "%CHOICE%"=="5" goto LOGS +if "%CHOICE%"=="6" goto CLEAR_LOGS +if "%CHOICE%"=="7" goto STARTUP +if "%CHOICE%"=="8" goto UNSTARTUP +if "%CHOICE%"=="0" goto EXIT + +echo 无效选择! +timeout /t 2 >nul +goto MENU + +:START +echo. +echo [正在启动服务...] +call pm2 start qiniu-bot +if %errorlevel% equ 0 ( + echo [✓] 服务启动成功 +) else ( + echo [错误] 服务启动失败 +) +pause +goto MENU + +:STOP +echo. +echo [正在停止服务...] +call pm2 stop qiniu-bot +if %errorlevel% equ 0 ( + echo [✓] 服务停止成功 +) else ( + echo [错误] 服务停止失败 +) +pause +goto MENU + +:RESTART +echo. +echo [正在重启服务...] +call pm2 restart qiniu-bot +if %errorlevel% equ 0 ( + echo [✓] 服务重启成功 +) else ( + echo [错误] 服务重启失败 +) +pause +goto MENU + +:STATUS +cls +echo. +call pm2 list +echo. +pause +goto MENU + +:LOGS +cls +echo. +echo [按 Ctrl+C 退出日志查看] +echo. +call pm2 logs qiniu-bot --lines 100 +goto MENU + +:CLEAR_LOGS +echo. +echo [正在清空日志...] +call pm2 flush +if %errorlevel% equ 0 ( + echo [✓] 日志已清空 +) else ( + echo [错误] 日志清空失败 +) +pause +goto MENU + +:STARTUP +echo. +echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +echo [重要] 请以管理员身份运行以下命令: +echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +echo. +echo pm2 startup +echo pm2 save +echo. +echo 复制上述命令到管理员命令提示符执行 +echo. +pause +goto MENU + +:UNSTARTUP +echo. +echo [正在取消开机自启...] +call pm2 unstartup +echo [✓] 开机自启已取消 +pause +goto MENU + +:EXIT +echo. +echo 再见! +timeout /t 2 >nul +exit /b 0 diff --git a/uninstall.bat b/uninstall.bat new file mode 100644 index 0000000..7da1dd8 --- /dev/null +++ b/uninstall.bat @@ -0,0 +1,71 @@ +@echo off +chcp 65001 >nul +echo ======================================== +echo 七牛云上传 - 飞书机器人 卸载工具 +echo ======================================== +echo. +echo [警告] 此操作将: +echo 1. 停止并删除 PM2 服务 +echo 2. 删除 node_modules +echo 3. 删除日志文件 +echo. +echo [注意] .env 和 config 文件将保留 +echo. + +set /p CONFIRM="确认要卸载吗?(Y/N): " +if /i not "%CONFIRM%"=="Y" ( + echo 已取消 + pause + exit /b 0 +) + +echo. +echo [步骤 1/4] 停止 PM2 服务... +where pm2 >nul 2>nul +if %errorlevel% equ 0 ( + call pm2 stop qiniu-bot + call pm2 delete qiniu-bot + echo [✓] PM2 服务已删除 +) else ( + echo [!] PM2 未安装,跳过 +) + +echo. +echo [步骤 2/4] 删除 node_modules... +if exist node_modules ( + rmdir /s /q node_modules + echo [✓] node_modules 已删除 +) else ( + echo [!] node_modules 不存在,跳过 +) + +echo. +echo [步骤 3/4] 删除日志... +if exist logs ( + del /q /s logs\*.* + echo [✓] 日志已清空 +) else ( + echo [!] logs 目录不存在,跳过 +) + +echo. +echo [步骤 4/4] 清理 PM2 缓存... +where pm2 >nul 2>nul +if %errorlevel% equ 0 ( + call pm2 flush + echo [✓] PM2 缓存已清理 +) + +echo. +echo ======================================== +echo 卸载完成! +echo ======================================== +echo. +echo 保留的文件: +echo - .env (配置文件) +echo - config/ (七牛云配置) +echo - 源代码文件 +echo. +echo 如需重新部署,运行 deploy-windows.bat +echo. +pause