# 情感博物馆 Jenkins 部署说明 ## 概述 本文档描述如何在Jenkins中配置和使用部署脚本来自动化部署情感博物馆项目的后端微服务和前端应用。 ## 部署脚本说明 ### 1. 后端微服务部署 #### 主部署脚本 - **文件路径**: `backend/deploy-all.sh` - **功能**: 一键部署所有后端微服务 - **特性**: - 支持单个服务失败不影响其他服务部署 - 详细的部署日志和错误报告 - 支持Jenkins环境变量 - 容器化部署到远程服务器 #### 单服务部署脚本 每个微服务模块都有独立的部署脚本: - `backend/emotion-gateway/deploy.sh` - 网关服务 - `backend/emotion-user/deploy.sh` - 用户服务 - `backend/emotion-ai/deploy.sh` - AI服务 - `backend/emotion-record/deploy.sh` - 记录服务 - `backend/emotion-growth/deploy.sh` - 成长服务 - `backend/emotion-websocket/deploy.sh` - WebSocket服务 - `backend/emotion-auth/deploy.sh` - 认证服务 ### 2. 前端应用部署 #### 前端部署脚本 - **文件路径**: `web-flowith/deploy.sh` - **功能**: 构建并部署前端应用到远程服务器 - **特性**: - 自动构建Vue应用 - 备份旧版本 - 配置Nginx反向代理 - 健康检查 ## Jenkins配置 ### 1. 环境变量配置 在Jenkins中配置以下环境变量: #### 必需变量 ```bash # 部署目标服务器 DEPLOY_HOST=root@47.111.10.27 # 后端部署配置 REMOTE_BUILD_DIR=/data/builds REMOTE_DOCKER_DIR=/data/docker DEPLOY_ENV=test PROJECT_NAME=emotion-museum # 前端部署配置 REMOTE_WEB_DIR=/data/www/emotion-museum ``` #### 可选变量 ```bash # 数据库配置 MYSQL_HOST=47.111.10.27 MYSQL_PORT=3306 MYSQL_DATABASE=emotion_museum MYSQL_USERNAME=root # Redis配置 REDIS_HOST=47.111.10.27 REDIS_PORT=6379 REDIS_PASSWORD= REDIS_DATABASE=0 # Nacos配置 NACOS_SERVER_ADDR=47.111.10.27:8848 NACOS_USERNAME=nacos NACOS_PASSWORD=Peanut2817*# # AI服务配置 COZE_API_TOKEN=your_coze_api_token # JWT配置 JWT_SECRET=emotion-museum-secret-key-2025 ``` ### 2. Jenkins Pipeline 配置 #### 后端微服务Pipeline ```groovy pipeline { agent any environment { DEPLOY_HOST = 'root@47.111.10.27' DEPLOY_ENV = 'test' PROJECT_NAME = 'emotion-museum' } stages { stage('Checkout') { steps { git branch: 'main', url: 'your-git-repo-url' } } stage('Deploy Backend Services') { steps { dir('backend') { sh './deploy-all.sh' } } } } post { always { // 发送部署结果通知 emailext ( subject: "部署结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}", body: "部署状态: ${currentBuild.result}\n构建链接: ${env.BUILD_URL}", to: "your-email@example.com" ) } } } ``` #### 前端应用Pipeline ```groovy pipeline { agent any environment { DEPLOY_HOST = 'root@47.111.10.27' REMOTE_WEB_DIR = '/data/www/emotion-museum' } stages { stage('Checkout') { steps { git branch: 'main', url: 'your-git-repo-url' } } stage('Deploy Frontend') { steps { dir('web-flowith') { sh './deploy.sh' } } } } post { always { emailext ( subject: "前端部署结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}", body: "部署状态: ${currentBuild.result}\n访问地址: http://47.111.10.27/emotion-museum/", to: "your-email@example.com" ) } } } ``` ### 3. 单服务部署Job配置 为每个微服务创建单独的Jenkins Job: ```groovy pipeline { agent any parameters { choice( name: 'SERVICE_NAME', choices: ['emotion-gateway', 'emotion-user', 'emotion-ai', 'emotion-record', 'emotion-growth', 'emotion-websocket', 'emotion-auth'], description: '选择要部署的服务' ) } environment { DEPLOY_HOST = 'root@47.111.10.27' DEPLOY_ENV = 'test' } stages { stage('Checkout') { steps { git branch: 'main', url: 'your-git-repo-url' } } stage('Deploy Single Service') { steps { dir("backend/${params.SERVICE_NAME}") { sh './deploy.sh' } } } } } ``` ## 部署流程 ### 1. 全量部署流程 1. **代码检出**: 从Git仓库拉取最新代码 2. **环境检查**: 检查远程服务器连接和本地构建环境 3. **服务构建**: 使用Maven构建所有微服务 4. **容器部署**: 逐个部署服务到Docker容器 5. **健康检查**: 验证服务启动状态 6. **部署报告**: 生成详细的部署结果报告 ### 2. 单服务部署流程 1. **服务构建**: 构建指定的微服务 2. **容器更新**: 停止旧容器,启动新容器 3. **健康检查**: 验证服务状态 4. **结果反馈**: 返回部署结果 ### 3. 前端部署流程 1. **依赖安装**: 安装Node.js依赖 2. **项目构建**: 构建Vue生产版本 3. **文件上传**: 上传构建产物到服务器 4. **Nginx配置**: 配置反向代理和静态文件服务 5. **健康检查**: 验证前端页面和API代理 ## 监控和日志 ### 1. 部署日志 - **位置**: Jenkins构建日志 - **内容**: 详细的部署步骤和错误信息 - **格式**: 带时间戳和颜色标识的结构化日志 ### 2. 应用日志 - **后端日志**: `/data/logs/emotion-museum/` - **Nginx日志**: `/data/logs/nginx/` - **容器日志**: `docker logs ` ### 3. 健康检查 - **后端服务**: `http://47.111.10.27:/actuator/health` - **前端应用**: `http://47.111.10.27/emotion-museum/` - **API代理**: `http://47.111.10.27/api/` ## 故障排查 ### 1. 常见问题 #### 服务启动失败 ```bash # 查看容器日志 docker logs # 查看容器状态 docker ps -a | grep emotion # 重启服务 docker restart ``` #### 网络连接问题 ```bash # 检查端口占用 netstat -tlnp | grep # 检查防火墙 ufw status # 测试服务连通性 curl -f http://localhost:/actuator/health ``` #### 前端访问问题 ```bash # 检查Nginx配置 nginx -t # 重载Nginx配置 systemctl reload nginx # 查看Nginx日志 tail -f /data/logs/nginx/emotion-museum-error.log ``` ### 2. 回滚操作 #### 后端服务回滚 ```bash # 停止当前容器 docker stop # 启动备份版本 docker run -d --name ``` #### 前端应用回滚 ```bash # 恢复备份版本 cd /data/www/emotion-museum/backup cp -r backup_ ../web-flowith ``` ## 安全注意事项 1. **SSH密钥管理**: 确保Jenkins服务器的SSH密钥安全 2. **环境变量**: 敏感信息使用Jenkins凭据管理 3. **网络安全**: 限制服务器访问权限 4. **日志安全**: 避免在日志中暴露敏感信息 ## 联系信息 如有问题,请联系开发团队: - 邮箱: dev@emotion-museum.com - 文档更新: 2025-07-18