diff --git a/Himp.TaskScheduling.Hangfire/Docker部署说明.md b/Himp.TaskScheduling.Hangfire/Docker部署说明.md new file mode 100644 index 0000000..f37d734 --- /dev/null +++ b/Himp.TaskScheduling.Hangfire/Docker部署说明.md @@ -0,0 +1,277 @@ +# Himp任务调度系统 Docker部署指南 + +本文档提供了完整的Docker环境安装和应用部署指南。 + +## 🚀 快速开始 + +### 第一步:安装Docker环境 + +运行自动安装脚本: +```cmd +install_docker.bat +``` + +**注意**: +- 需要管理员权限 +- 可能需要重启计算机 +- 确保启用WSL 2功能 + +### 第二步:构建Docker镜像 + +等Docker安装完成并启动后,运行: +```cmd +build_docker_image.bat +``` + +### 第三步:部署和管理容器 + +运行管理脚本: +```cmd +deploy_container.bat +``` + +## 📋 系统要求 + +### Windows系统要求 +- Windows 10 64位:专业版、企业版或教育版 (build 19045 或更高) +- Windows 11 64位:任何版本 22H2 或更高 +- 至少 4GB RAM +- 启用硬件虚拟化 (BIOS/UEFI设置) + +### WSL 2要求 +- WSL 版本 2.1.5 或更高 +- 已启用"适用于Linux的Windows子系统"功能 + +## 🐳 项目Docker配置 + +### 现有配置文件 + +1. **Dockerfile** (`Himp.TaskScheduling.Hangfire/Dockerfile`) + - 基于 `mcr.microsoft.com/dotnet/aspnet:8.0` + - 多阶段构建 + - 已配置亚洲/上海时区 + - 包含SSL配置优化 + +2. **docker-compose.yml** + - 服务编排配置 + - 端口映射:8080、8081 + - 日志卷挂载 + - 环境变量配置 + +3. **.dockerignore** + - 排除构建不需要的文件 + - 优化构建上下文 + +### 应用技术栈 +- .NET 8.0 Web API +- Hangfire 任务调度 +- Redis 缓存 +- SQL Server 数据库 +- MQTT 客户端 +- Serilog 日志 + +## 🔧 安装步骤详解 + +### 手动安装Docker (可选) + +如果自动脚本失败,可以手动安装: + +1. **安装WSL 2** + ```cmd + # 以管理员身份运行 + wsl --install + ``` + +2. **下载Docker Desktop** + - 访问:https://www.docker.com/products/docker-desktop/ + - 下载Windows版本 + +3. **安装Docker Desktop** + ```cmd + "Docker Desktop Installer.exe" install --accept-license --backend=wsl-2 + ``` + +4. **启动并配置** + - 启动Docker Desktop应用 + - 接受服务协议 + - 等待初始化完成 + +## 🏗️ 构建镜像 + +### 自动构建 +```cmd +build_docker_image.bat +``` + +### 手动构建 +```cmd +cd F:\临河工作文件\交接文档\临河项目\临河未修改版本\源文件\任务调度\Himp.TaskScheduling.Hangfire +docker build -t himp-task-scheduling:latest -f Himp.TaskScheduling.Hangfire/Dockerfile . +``` + +### 构建参数说明 +- `-t himp-task-scheduling:latest`:镜像名称和标签 +- `-f Himp.TaskScheduling.Hangfire/Dockerfile`:指定Dockerfile路径 +- `.`:构建上下文(当前目录) + +## 🚀 运行容器 + +### 方式1:单独运行 +```cmd +docker run -d \ + --name himp-task-container \ + -p 8080:8080 \ + -p 8081:8081 \ + -v ./logs:/app/Logs \ + -e ASPNETCORE_ENVIRONMENT=Production \ + himp-task-scheduling:latest +``` + +### 方式2:使用docker-compose +```cmd +docker-compose up -d +``` + +### 访问应用 +- HTTP: http://localhost:8080 +- HTTPS: https://localhost:8081 + +## 📊 管理命令 + +### 查看容器状态 +```cmd +docker ps -a +``` + +### 查看日志 +```cmd +docker logs himp-task-container +docker logs -f himp-task-container # 实时日志 +``` + +### 进入容器 +```cmd +docker exec -it himp-task-container /bin/bash +``` + +### 停止容器 +```cmd +docker stop himp-task-container +``` + +### 删除容器 +```cmd +docker rm himp-task-container +``` + +## 💾 镜像管理 + +### 查看镜像 +```cmd +docker images himp-task-scheduling +``` + +### 导出镜像 +```cmd +docker save -o himp-task-scheduling.tar himp-task-scheduling:latest +``` + +### 导入镜像 +```cmd +docker load -i himp-task-scheduling.tar +``` + +### 推送到仓库 +```cmd +# 标记镜像 +docker tag himp-task-scheduling:latest your-registry/himp-task-scheduling:latest + +# 推送镜像 +docker push your-registry/himp-task-scheduling:latest +``` + +## 🔧 故障排除 + +### 常见问题 + +1. **Docker命令无法识别** + - 确保Docker Desktop已启动 + - 重启命令行终端 + +2. **端口占用** + ```cmd + netstat -ano | findstr :8080 + taskkill /PID /F + ``` + +3. **权限问题** + - 确保用户在docker-users组中 + - 以管理员身份运行 + +4. **WSL问题** + ```cmd + wsl --shutdown + wsl --unregister docker-desktop + # 重启Docker Desktop + ``` + +### 日志查看 +```cmd +# Docker Desktop日志 +# %APPDATA%\Docker\log.txt + +# 容器应用日志 +docker logs himp-task-container + +# 宿主机日志目录 +.\logs\ +``` + +## 🔒 安全注意事项 + +1. **生产环境** + - 修改默认端口 + - 配置防火墙规则 + - 使用HTTPS证书 + - 设置环境变量保护敏感信息 + +2. **网络安全** + - 限制容器网络访问 + - 使用Docker secrets管理密钥 + - 定期更新基础镜像 + +## 📈 性能优化 + +### 资源限制 +```cmd +docker run -d \ + --name himp-task-container \ + --memory="2g" \ + --cpus="1.5" \ + -p 8080:8080 \ + himp-task-scheduling:latest +``` + +### 多阶段构建优化 +- Dockerfile已使用多阶段构建 +- 减少最终镜像大小 +- 提高构建效率 + +## 📞 技术支持 + +如遇到问题,可以: +1. 查看Docker Desktop日志 +2. 检查容器运行状态 +3. 验证网络连接 +4. 确认端口占用情况 + +--- + +**版本信息** +- 应用版本:.NET 8.0 +- Docker版本:要求 20.10.0+ +- 创建日期:2025年1月 + +**维护者** +- 项目:Himp任务调度系统 +- 部署:Docker容器化方案 \ No newline at end of file diff --git a/Himp.TaskScheduling.Hangfire/build_docker_image.bat b/Himp.TaskScheduling.Hangfire/build_docker_image.bat new file mode 100644 index 0000000..fe17b2e --- /dev/null +++ b/Himp.TaskScheduling.Hangfire/build_docker_image.bat @@ -0,0 +1,88 @@ +@echo off +echo ===================================================== +echo Docker镜像构建脚本 - Himp任务调度系统 +echo ===================================================== +echo. + +echo 1. 检查Docker是否已安装并运行... +docker --version >nul 2>&1 +if errorlevel 1 ( + echo Docker未安装或未启动! + echo 请先安装Docker Desktop并启动服务。 + echo 运行 install_docker.bat 来安装Docker。 + pause + exit /b 1 +) else ( + echo Docker已安装 + docker --version +) + +echo. +echo 2. 检查Docker服务状态... +docker info >nul 2>&1 +if errorlevel 1 ( + echo Docker服务未启动! + echo 请启动Docker Desktop应用程序。 + pause + exit /b 1 +) else ( + echo Docker服务正常运行 +) + +echo. +echo 3. 切换到项目根目录... +cd /d "%~dp0" +if not exist "Himp.TaskScheduling.Hangfire\Dockerfile" ( + echo 错误:找不到Dockerfile文件! + echo 请确保在项目根目录下运行此脚本。 + pause + exit /b 1 +) + +echo. +echo 4. 显示当前目录结构... +dir /b + +echo. +echo 5. 开始构建Docker镜像... +echo 镜像名称: himp-task-scheduling:latest +echo. + +echo 正在构建Docker镜像,请耐心等待... +docker build -t himp-task-scheduling:latest -f Himp.TaskScheduling.Hangfire/Dockerfile . + +if errorlevel 1 ( + echo. + echo ❌ 镜像构建失败! + echo 请检查Dockerfile和项目配置。 + pause + exit /b 1 +) else ( + echo. + echo ✅ 镜像构建成功! +) + +echo. +echo 6. 验证构建的镜像... +docker images himp-task-scheduling + +echo. +echo 7. 可选操作: +echo. +echo 运行容器: +echo docker run -d -p 8080:8080 -p 8081:8081 --name himp-task-container himp-task-scheduling:latest +echo. +echo 使用docker-compose运行: +echo docker-compose up -d +echo. +echo 保存镜像为tar文件: +echo docker save -o himp-task-scheduling.tar himp-task-scheduling:latest +echo. +echo 查看运行中的容器: +echo docker ps +echo. + +echo ===================================================== +echo 镜像构建完成! +echo ===================================================== +pause \ No newline at end of file diff --git a/Himp.TaskScheduling.Hangfire/deploy_container.bat b/Himp.TaskScheduling.Hangfire/deploy_container.bat new file mode 100644 index 0000000..67daebc --- /dev/null +++ b/Himp.TaskScheduling.Hangfire/deploy_container.bat @@ -0,0 +1,155 @@ +@echo off +echo ===================================================== +echo Docker容器部署管理脚本 +echo ===================================================== +echo. + +:menu +echo 请选择操作: +echo. +echo 1. 启动容器 (单独运行) +echo 2. 使用docker-compose启动 +echo 3. 停止容器 +echo 4. 查看容器状态 +echo 5. 查看容器日志 +echo 6. 进入容器终端 +echo 7. 删除容器 +echo 8. 导出镜像为tar文件 +echo 9. 清理未使用的资源 +echo 0. 退出 +echo. +set /p choice=请输入选择 (0-9): + +if "%choice%"=="1" goto start_container +if "%choice%"=="2" goto start_compose +if "%choice%"=="3" goto stop_container +if "%choice%"=="4" goto show_status +if "%choice%"=="5" goto show_logs +if "%choice%"=="6" goto enter_container +if "%choice%"=="7" goto remove_container +if "%choice%"=="8" goto export_image +if "%choice%"=="9" goto cleanup +if "%choice%"=="0" goto exit +goto menu + +:start_container +echo. +echo 启动单个容器... +docker run -d ^ + --name himp-task-container ^ + -p 8080:8080 ^ + -p 8081:8081 ^ + -v "%cd%\logs:/app/Logs" ^ + -e ASPNETCORE_ENVIRONMENT=Production ^ + himp-task-scheduling:latest + +if errorlevel 1 ( + echo ❌ 容器启动失败! +) else ( + echo ✅ 容器启动成功! + echo 应用访问地址: + echo - HTTP: http://localhost:8080 + echo - HTTPS: https://localhost:8081 +) +pause +goto menu + +:start_compose +echo. +echo 使用docker-compose启动... +if exist "docker-compose.yml" ( + docker-compose up -d + if errorlevel 1 ( + echo ❌ docker-compose启动失败! + ) else ( + echo ✅ 服务启动成功! + ) +) else ( + echo ❌ 找不到docker-compose.yml文件! +) +pause +goto menu + +:stop_container +echo. +echo 停止容器... +docker stop himp-task-container 2>nul +docker-compose down 2>nul +echo 容器已停止 +pause +goto menu + +:show_status +echo. +echo 容器状态: +docker ps -a --filter "name=himp" +echo. +echo 镜像列表: +docker images himp-task-scheduling +pause +goto menu + +:show_logs +echo. +echo 查看容器日志: +docker logs -f himp-task-container +pause +goto menu + +:enter_container +echo. +echo 进入容器终端... +docker exec -it himp-task-container /bin/bash +pause +goto menu + +:remove_container +echo. +echo 删除容器... +docker stop himp-task-container 2>nul +docker rm himp-task-container 2>nul +echo 容器已删除 +pause +goto menu + +:export_image +echo. +echo 导出镜像... +set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% +set timestamp=%timestamp: =0% +set filename=himp-task-scheduling_%timestamp%.tar + +docker save -o "%filename%" himp-task-scheduling:latest +if errorlevel 1 ( + echo ❌ 导出失败! +) else ( + echo ✅ 镜像已导出为: %filename% + echo 文件大小: + dir "%filename%" +) +pause +goto menu + +:cleanup +echo. +echo 清理未使用的Docker资源... +echo 这将删除: +echo - 未使用的容器 +echo - 未使用的网络 +echo - 未使用的镜像 +echo - 构建缓存 +echo. +set /p confirm=确认清理?(y/N): +if /i "%confirm%"=="y" ( + docker system prune -a -f + echo ✅ 清理完成! +) else ( + echo 已取消清理 +) +pause +goto menu + +:exit +echo. +echo 感谢使用Docker部署脚本! +exit /b 0 \ No newline at end of file diff --git a/Himp.TaskScheduling.Hangfire/install_docker.bat b/Himp.TaskScheduling.Hangfire/install_docker.bat new file mode 100644 index 0000000..ecc5d47 --- /dev/null +++ b/Himp.TaskScheduling.Hangfire/install_docker.bat @@ -0,0 +1,67 @@ +@echo off +echo ===================================================== +echo Docker Desktop 自动安装脚本 +echo ===================================================== +echo. + +echo 1. 检查Windows版本和系统要求... +ver + +echo. +echo 2. 检查是否已安装WSL... +wsl --version 2>nul +if errorlevel 1 ( + echo WSL未安装,正在安装WSL 2... + echo 请在管理员权限下运行以下命令: + echo wsl --install + echo. + echo 安装WSL后请重启计算机,然后重新运行此脚本 + pause + exit /b 1 +) else ( + echo WSL已安装 +) + +echo. +echo 3. 下载Docker Desktop for Windows... +set DOCKER_URL=https://desktop.docker.com/win/main/amd64/Docker%%20Desktop%%20Installer.exe +set DOCKER_INSTALLER=Docker_Desktop_Installer.exe + +echo 正在下载Docker Desktop安装程序... +powershell -Command "& {Invoke-WebRequest -Uri '%DOCKER_URL%' -OutFile '%DOCKER_INSTALLER%'}" + +if not exist "%DOCKER_INSTALLER%" ( + echo 下载失败!请检查网络连接或手动下载。 + echo 下载地址:https://www.docker.com/products/docker-desktop/ + pause + exit /b 1 +) + +echo. +echo 4. 开始安装Docker Desktop... +echo 安装过程中可能需要管理员权限,请允许。 +echo. + +"%DOCKER_INSTALLER%" install --accept-license --backend=wsl-2 + +echo. +echo 5. 安装完成! +echo. +echo 请按照以下步骤完成设置: +echo 1. 重启计算机(如果提示需要) +echo 2. 启动Docker Desktop +echo 3. 接受Docker Desktop服务协议 +echo 4. 等待Docker Desktop完全启动 +echo. +echo 安装完成后,请运行: docker --version +echo 验证安装是否成功。 +echo. + +pause + +echo 正在清理临时文件... +if exist "%DOCKER_INSTALLER%" del "%DOCKER_INSTALLER%" + +echo. +echo 安装脚本执行完成! +pause \ No newline at end of file