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个微服务模块完整
- 前后端分离架构
- 容器化部署
- 统一配置管理
- 完整的部署和运维体系
This commit is contained in:
2025-07-21 13:55:36 +08:00
parent 50c63f1b1a
commit 26f0cdd760
306 changed files with 1088 additions and 56000 deletions
+315
View File
@@ -0,0 +1,315 @@
# 情感博物馆 Jenkins Pipeline 配置指南
## 概述
本文档描述了优化后的Jenkins CI/CD流水线配置,采用分离式部署架构:
- **构建阶段**: 在Jenkins服务器上编译打包所有微服务
- **部署阶段**: 将jar包传输到远程应用服务器并进行容器化部署
## 部署脚本架构
### 1. 脚本分类
#### 🔨 构建脚本
- **`build-all.sh`**: 专门用于Jenkins构建阶段,编译所有微服务jar包
- **特点**: 仅在Jenkins服务器执行,不涉及远程操作
#### 🚀 部署脚本
- **`deploy-remote.sh`**: 专门用于远程部署,传输jar包并部署到应用服务器
- **特点**: 假设jar包已构建完成,专注于远程部署
#### 🔄 综合脚本
- **`deploy-all.sh`**: 支持多种模式的综合脚本
- **模式**:
- `full`: 完整模式 (构建+部署)
- `build`: 仅构建模式
- `deploy`: 仅部署模式
### 2. 服务列表
所有脚本支持以下10个微服务:
| 服务名称 | 端口 | 描述 |
|---------|------|------|
| emotion-gateway | 19000 | API网关服务 |
| emotion-user | 19001 | 用户管理服务 |
| emotion-ai | 19002 | AI聊天服务 |
| emotion-record | 19003 | 记录管理服务 |
| emotion-growth | 19004 | 成长跟踪服务 |
| emotion-explore | 19005 | 探索服务 |
| emotion-reward | 19006 | 奖励服务 |
| emotion-websocket | 19007 | WebSocket服务 |
| emotion-auth | 19008 | 认证服务 |
| emotion-stats | 19009 | 统计服务 |
## Jenkins Pipeline 配置
### 1. 推荐的Pipeline配置
#### 方案一:分离式Pipeline (推荐)
```groovy
pipeline {
agent any
environment {
DEPLOY_ENV = 'test'
PROJECT_NAME = 'emotion-museum'
REMOTE_HOST = 'root@47.111.10.27'
}
stages {
stage('Checkout') {
steps {
git branch: 'master', url: 'your-git-repo-url'
}
}
stage('Build') {
steps {
dir('backend') {
sh './build-all.sh'
}
}
post {
always {
// 归档构建产物
archiveArtifacts artifacts: 'backend/*/target/*.jar', fingerprint: true
}
}
}
stage('Deploy to Remote') {
steps {
dir('backend') {
sh './deploy-remote.sh'
}
}
}
stage('Health Check') {
steps {
script {
// 等待服务启动
sleep 30
// 检查关键服务
def services = ['19000', '19001', '19002', '19008']
services.each { port ->
sh "curl -f http://47.111.10.27:${port}/actuator/health || exit 1"
}
}
}
}
}
post {
always {
// 发送部署结果通知
emailext (
subject: "部署结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
body: """
部署状态: ${currentBuild.result}
构建链接: ${env.BUILD_URL}
部署环境: ${env.DEPLOY_ENV}
""",
to: "your-email@example.com"
)
}
success {
echo '🎉 部署成功!'
}
failure {
echo '❌ 部署失败,请检查日志'
}
}
}
```
#### 方案二:单一Pipeline
```groovy
pipeline {
agent any
environment {
DEPLOY_ENV = 'test'
DEPLOY_MODE = 'full' // full, build, deploy
PROJECT_NAME = 'emotion-museum'
}
stages {
stage('Checkout') {
steps {
git branch: 'master', url: 'your-git-repo-url'
}
}
stage('Deploy') {
steps {
dir('backend') {
sh './deploy-all.sh'
}
}
}
}
}
```
### 2. 环境变量配置
在Jenkins中配置以下环境变量:
#### 必需变量
```bash
# 部署配置
DEPLOY_ENV=test # 部署环境
DEPLOY_HOST=root@47.111.10.27 # 目标服务器
PROJECT_NAME=emotion-museum # 项目名称
# 远程路径配置
REMOTE_BUILD_DIR=/data/builds # jar包存储目录
REMOTE_DOCKER_DIR=/data/docker # Docker配置目录
```
#### 可选变量
```bash
# 部署模式 (仅deploy-all.sh使用)
DEPLOY_MODE=full # full, build, deploy
# 数据库配置
MYSQL_HOST=47.111.10.27
MYSQL_PASSWORD=EmotionMuseum2025*#
# Nacos配置
NACOS_SERVER_ADDR=47.111.10.27:8848
NACOS_PASSWORD=Peanut2817*#
```
### 3. 多环境部署配置
#### 测试环境
```groovy
environment {
DEPLOY_ENV = 'test'
DEPLOY_HOST = 'root@47.111.10.27'
}
```
#### 生产环境
```groovy
environment {
DEPLOY_ENV = 'prod'
DEPLOY_HOST = 'root@production-server'
}
```
## 使用方法
### 1. 本地测试
#### 仅构建
```bash
cd backend
./build-all.sh
```
#### 仅部署 (需要先有jar包)
```bash
cd backend
./deploy-remote.sh
```
#### 完整部署
```bash
cd backend
./deploy-all.sh
# 或指定模式
DEPLOY_MODE=full ./deploy-all.sh
```
### 2. Jenkins执行
#### 分离式执行
```bash
# 构建阶段
./build-all.sh
# 部署阶段
./deploy-remote.sh
```
#### 综合执行
```bash
# 根据DEPLOY_MODE环境变量决定执行模式
./deploy-all.sh
```
## 优势特点
### 1. 🔄 分离式架构
- **构建与部署分离**: Jenkins服务器专注构建,应用服务器专注运行
- **资源优化**: 避免在应用服务器上安装构建工具
- **安全性**: 减少应用服务器的攻击面
### 2. 🛡️ 容错机制
- **单服务失败不影响其他服务**: 继续部署其他服务
- **详细错误报告**: 每个服务的部署状态和错误信息
- **回滚支持**: 保留旧版本容器,支持快速回滚
### 3. 📊 监控与报告
- **实时日志**: 详细的部署过程日志
- **健康检查**: 自动验证服务启动状态
- **部署报告**: 完整的部署统计和结果报告
### 4. 🔧 灵活配置
- **多模式支持**: 支持仅构建、仅部署、完整部署
- **环境变量**: 支持Jenkins环境变量覆盖
- **多环境**: 支持test/prod等多环境部署
## 故障排查
### 1. 构建失败
```bash
# 检查Java和Maven版本
java -version
mvn -version
# 查看详细构建日志
./build-all.sh
```
### 2. 部署失败
```bash
# 检查SSH连接
ssh 'root@47.111.10.27' "echo 'test'"
# 检查远程Docker环境
ssh 'root@47.111.10.27' "docker --version"
# 查看容器日志
ssh 'root@47.111.10.27' "docker logs <service_name>"
```
### 3. 服务启动失败
```bash
# 检查端口占用
ssh 'root@47.111.10.27' "netstat -tlnp | grep <port>"
# 检查服务健康状态
curl -f http://47.111.10.27:<port>/actuator/health
```
## 联系支持
如遇到问题,请:
1. 查看Jenkins构建日志
2. 检查脚本执行日志
3. 验证环境变量配置
4. 联系开发团队并提供完整日志
---
**文档版本**: v2.0
**更新时间**: 2025-07-18
**维护团队**: 情感博物馆开发团队
+324
View File
@@ -0,0 +1,324 @@
# 情感博物馆 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 <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. 常见问题
#### 服务启动失败
```bash
# 查看容器日志
docker logs <service_name>
# 查看容器状态
docker ps -a | grep emotion
# 重启服务
docker restart <service_name>
```
#### 网络连接问题
```bash
# 检查端口占用
netstat -tlnp | grep <port>
# 检查防火墙
ufw status
# 测试服务连通性
curl -f http://localhost:<port>/actuator/health
```
#### 前端访问问题
```bash
# 检查Nginx配置
nginx -t
# 重载Nginx配置
systemctl reload nginx
# 查看Nginx日志
tail -f /data/logs/nginx/emotion-museum-error.log
```
### 2. 回滚操作
#### 后端服务回滚
```bash
# 停止当前容器
docker stop <service_name>
# 启动备份版本
docker run -d --name <service_name> <backup_image>
```
#### 前端应用回滚
```bash
# 恢复备份版本
cd /data/www/emotion-museum/backup
cp -r backup_<timestamp> ../web-flowith
```
## 安全注意事项
1. **SSH密钥管理**: 确保Jenkins服务器的SSH密钥安全
2. **环境变量**: 敏感信息使用Jenkins凭据管理
3. **网络安全**: 限制服务器访问权限
4. **日志安全**: 避免在日志中暴露敏感信息
## 联系信息
如有问题,请联系开发团队:
- 邮箱: dev@emotion-museum.com
- 文档更新: 2025-07-18
+308
View File
@@ -0,0 +1,308 @@
# 情感博物馆部署脚本使用说明
## 概述
本项目提供了完整的自动化部署脚本,支持本地部署和Jenkins CI/CD部署。所有脚本都经过优化,支持错误处理、详细日志输出和部署状态报告。
## 脚本列表
### 后端微服务部署脚本
#### 1. 全量部署脚本
- **路径**: `backend/deploy-all.sh`
- **功能**: 一键部署所有后端微服务
- **特性**:
- ✅ 单个服务失败不影响其他服务
- ✅ 详细的部署报告和错误日志
- ✅ 支持Jenkins环境变量
- ✅ 容器化部署
#### 2. 单服务部署脚本
每个微服务都有独立的部署脚本:
- `backend/emotion-gateway/deploy.sh` - API网关服务
- `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` - 认证服务
### 前端应用部署脚本
#### 3. 前端部署脚本
- **路径**: `web-flowith/deploy.sh`
- **功能**: 构建并部署Vue前端应用
- **特性**:
- ✅ 自动构建和优化
- ✅ 备份旧版本
- ✅ Nginx配置
- ✅ 健康检查
## 使用方法
### 本地部署
#### 部署所有后端服务
```bash
cd backend
./deploy-all.sh
```
#### 部署单个后端服务
```bash
cd backend/emotion-gateway
./deploy.sh
```
#### 部署前端应用
```bash
cd web-flowith
./deploy.sh
```
### Jenkins部署
#### 环境变量配置
在Jenkins中设置以下环境变量:
```bash
# 必需变量
DEPLOY_HOST=root@47.111.10.27
DEPLOY_ENV=test
PROJECT_NAME=emotion-museum
# 可选变量(使用默认值)
REMOTE_BUILD_DIR=/data/builds
REMOTE_DOCKER_DIR=/data/docker
REMOTE_WEB_DIR=/data/www/emotion-museum
```
#### Pipeline脚本示例
```groovy
pipeline {
agent any
environment {
DEPLOY_HOST = 'root@47.111.10.27'
DEPLOY_ENV = 'test'
}
stages {
stage('Deploy Backend') {
steps {
dir('backend') {
sh './deploy-all.sh'
}
}
}
stage('Deploy Frontend') {
steps {
dir('web-flowith') {
sh './deploy.sh'
}
}
}
}
}
```
## 部署配置
### 服务端口分配
- **API网关**: 19000
- **用户服务**: 19001
- **AI服务**: 19002
- **记录服务**: 19003
- **成长服务**: 19004
- **WebSocket服务**: 19007
- **认证服务**: 19008
### 远程服务器目录结构
```
/data/
├── builds/ # JAR包存储目录
│ ├── emotion-gateway-1.0.0.jar
│ ├── emotion-user-1.0.0.jar
│ └── ...
├── docker/ # Docker配置目录
│ ├── Dockerfile.emotion-gateway
│ ├── Dockerfile.emotion-user
│ └── ...
├── www/emotion-museum/ # 前端文件目录
│ ├── web-flowith/ # 前端应用
│ └── backup/ # 前端备份
└── logs/ # 日志目录
├── emotion-museum/ # 应用日志
└── nginx/ # Nginx日志
```
## 部署报告示例
### 后端服务部署报告
```
========================================
部署完成报告
========================================
项目名称: emotion-museum
部署环境: test
目标服务器: root@47.111.10.27
部署时间: 2025-07-18 14:30:25
总耗时: 180s
Jenkins构建: #42
========================================
📊 部署统计:
总服务数: 7
成功部署: 6
失败部署: 1
成功率: 85%
📋 服务部署详情:
服务名称 状态 耗时 备注
----------------------------------------
emotion-gateway ✅ 成功 25s http://47.111.10.27:19000
emotion-user ✅ 成功 30s http://47.111.10.27:19001
emotion-ai ✅ 成功 35s http://47.111.10.27:19002
emotion-record ✅ 成功 28s http://47.111.10.27:19003
emotion-growth ✅ 成功 32s http://47.111.10.27:19004
emotion-websocket ✅ 成功 20s http://47.111.10.27:19007
emotion-auth ❌ 失败 10s 查看错误日志
🐳 当前容器运行状态:
----------------------------------------
NAMES STATUS PORTS
emotion-gateway Up 2 minutes 0.0.0.0:19000->19000/tcp
emotion-user Up 2 minutes 0.0.0.0:19001->19001/tcp
emotion-ai Up 1 minute 0.0.0.0:19002->19002/tcp
...
```
### 前端部署报告
```
========================================
前端部署完成报告
========================================
项目名称: emotion-museum-frontend
目标服务器: root@47.111.10.27
部署路径: /data/www/emotion-museum/web-flowith
部署时间: 2025-07-18 14:35:10
总耗时: 45s
========================================
🌐 访问地址:
前端页面: http://47.111.10.27/emotion-museum/
API接口: http://47.111.10.27/api/
📁 远程文件信息:
部署目录大小: 2.3M
主要文件:
-rw-r--r-- 1 www-data www-data 1.2K index.html
drwxr-xr-x 2 www-data www-data 4.0K assets/
drwxr-xr-x 2 www-data www-data 4.0K images/
```
## 故障排查
### 常见问题及解决方案
#### 1. SSH连接失败
```bash
# 检查SSH密钥
ssh -T root@47.111.10.27
# 检查网络连通性
ping 47.111.10.27
```
#### 2. 服务构建失败
```bash
# 检查Java版本
java -version
# 检查Maven配置
mvn -version
# 清理并重新构建
mvn clean compile
```
#### 3. 容器启动失败
```bash
# 查看容器日志
docker logs <container_name>
# 检查端口占用
netstat -tlnp | grep <port>
# 检查Docker网络
docker network ls
```
#### 4. 前端构建失败
```bash
# 检查Node.js版本
node --version
# 清理依赖重新安装
rm -rf node_modules package-lock.json
npm install
```
### 日志查看
#### 部署日志
- Jenkins构建日志中包含完整的部署过程
- 每个步骤都有详细的时间戳和状态信息
#### 应用日志
```bash
# 查看容器日志
docker logs -f <service_name>
# 查看应用日志文件
tail -f /data/logs/emotion-museum/<service_name>.log
# 查看Nginx日志
tail -f /data/logs/nginx/emotion-museum-access.log
```
## 最佳实践
### 1. 部署前检查
- ✅ 确认代码已提交到正确分支
- ✅ 检查远程服务器资源使用情况
- ✅ 备份重要数据
- ✅ 通知相关人员部署计划
### 2. 部署过程监控
- ✅ 实时查看部署日志
- ✅ 监控服务器资源使用
- ✅ 检查服务健康状态
- ✅ 验证功能正常性
### 3. 部署后验证
- ✅ 访问前端页面确认正常
- ✅ 测试API接口功能
- ✅ 检查日志无异常
- ✅ 监控服务性能指标
### 4. 回滚准备
- ✅ 保留旧版本备份
- ✅ 准备回滚脚本
- ✅ 制定回滚计划
- ✅ 测试回滚流程
## 联系支持
如遇到部署问题,请:
1. **查看部署日志**: 详细的错误信息通常在日志中
2. **检查服务状态**: 使用健康检查接口验证服务状态
3. **联系开发团队**: 提供完整的错误日志和环境信息
---
**文档版本**: v1.0
**更新时间**: 2025-07-18
**维护团队**: 情感博物馆开发团队