Files
happy-life-star/docs/deployment/Jenkins部署说明.md
T
peanut 26f0cdd760 feat: 完成项目整理优化和生产环境配置
🧹 项目结构优化:
- 删除重复和过时的文件
- 整理文档到docs目录结构
- 优化配置文件到configs目录
- 创建清晰的PROJECT_STRUCTURE.md

🔧 中间件配置:
- 重启MySQL/Redis/Nacos中间件
- 使用现有数据目录,确保数据完整性
- 统一密码配置: MySQL(EmotionMuseum2025*#), Nacos(Peanut2817*#)

🌐 Nginx配置:
- 配置前端路径: /emotion-museum
- 配置API代理: /api/ -> 19000
- 配置WebSocket代理: /ws/ -> 19007
- 添加健康检查端点: /health

📋 部署脚本优化:
- restart-middleware.sh - 中间件重启脚本
- setup-nginx.sh - Nginx配置脚本
- cleanup-project.sh - 项目清理脚本
- one-click-deploy.sh - 一键部署脚本

📖 文档完善:
- DEPLOYMENT_FINAL.md - 最终部署指南
- PROJECT_STRUCTURE.md - 项目结构说明
- 完整的运维和故障排查指南

 生产环境就绪:
- 中间件: MySQL/Redis/Nacos 运行正常
- Nginx: 反向代理配置完成
- 访问地址: http://47.111.10.27/emotion-museum
- 健康检查: http://47.111.10.27/health

🎯 项目现状:
- 10个微服务模块完整
- 前后端分离架构
- 容器化部署
- 统一配置管理
- 完整的部署和运维体系
2025-07-21 13:55:36 +08:00

7.2 KiB

情感博物馆 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中配置以下环境变量:

必需变量

# 部署目标服务器
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

可选变量

# 数据库配置
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

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

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:

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 <container_name>

3. 健康检查

  • 后端服务: http://47.111.10.27:<port>/actuator/health
  • 前端应用: http://47.111.10.27/emotion-museum/
  • API代理: http://47.111.10.27/api/

故障排查

1. 常见问题

服务启动失败

# 查看容器日志
docker logs <service_name>

# 查看容器状态
docker ps -a | grep emotion

# 重启服务
docker restart <service_name>

网络连接问题

# 检查端口占用
netstat -tlnp | grep <port>

# 检查防火墙
ufw status

# 测试服务连通性
curl -f http://localhost:<port>/actuator/health

前端访问问题

# 检查Nginx配置
nginx -t

# 重载Nginx配置
systemctl reload nginx

# 查看Nginx日志
tail -f /data/logs/nginx/emotion-museum-error.log

2. 回滚操作

后端服务回滚

# 停止当前容器
docker stop <service_name>

# 启动备份版本
docker run -d --name <service_name> <backup_image>

前端应用回滚

# 恢复备份版本
cd /data/www/emotion-museum/backup
cp -r backup_<timestamp> ../web-flowith

安全注意事项

  1. SSH密钥管理: 确保Jenkins服务器的SSH密钥安全
  2. 环境变量: 敏感信息使用Jenkins凭据管理
  3. 网络安全: 限制服务器访问权限
  4. 日志安全: 避免在日志中暴露敏感信息

联系信息

如有问题,请联系开发团队: