优化:已知问题

This commit is contained in:
2025-07-22 13:27:07 +08:00
parent 2b5ff62ff0
commit 505afb8c0d
29 changed files with 2144 additions and 6 deletions

220
deploy-prod.sh Executable file
View File

@@ -0,0 +1,220 @@
#!/bin/bash
# AI Chat 生产环境部署脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查必要的工具
check_requirements() {
log_info "检查部署环境..."
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装,请先安装 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
log_success "环境检查通过"
}
# 创建必要的目录
create_directories() {
log_info "创建必要的目录..."
mkdir -p logs/nginx
mkdir -p logs/proxy
mkdir -p ssl
mkdir -p backups
log_success "目录创建完成"
}
# 备份当前部署
backup_current() {
if [ -d "dist" ]; then
log_info "备份当前部署..."
timestamp=$(date +%Y%m%d_%H%M%S)
tar -czf "backups/backup_${timestamp}.tar.gz" dist/ logs/ 2>/dev/null || true
log_success "备份完成: backups/backup_${timestamp}.tar.gz"
fi
}
# 构建应用
build_app() {
log_info "构建应用..."
if [ ! -f "package.json" ]; then
log_error "package.json 不存在,请确保在项目根目录运行此脚本"
exit 1
fi
# 检查是否有pnpm
if command -v pnpm &> /dev/null; then
log_info "使用 pnpm 安装依赖..."
pnpm install --frozen-lockfile
pnpm run build:h5
elif command -v npm &> /dev/null; then
log_info "使用 npm 安装依赖..."
npm ci
npm run build:h5
else
log_error "未找到 npm 或 pnpm"
exit 1
fi
if [ ! -d "dist" ]; then
log_error "构建失败dist 目录不存在"
exit 1
fi
log_success "应用构建完成"
}
# 部署应用
deploy_app() {
local mode=$1
log_info "开始部署应用 (模式: $mode)..."
case $mode in
"basic")
docker-compose -f docker-compose.prod.yml down 2>/dev/null || true
docker-compose -f docker-compose.prod.yml up -d --build
;;
"https")
if [ ! -f "ssl/fullchain.pem" ] || [ ! -f "ssl/privkey.pem" ]; then
log_warning "SSL证书不存在请先配置SSL证书"
log_info "将使用基础模式部署..."
docker-compose -f docker-compose.prod.yml down 2>/dev/null || true
docker-compose -f docker-compose.prod.yml up -d --build
else
docker-compose -f docker-compose.prod.yml --profile https down 2>/dev/null || true
docker-compose -f docker-compose.prod.yml --profile https up -d --build
fi
;;
"monitoring")
docker-compose -f docker-compose.prod.yml --profile monitoring down 2>/dev/null || true
docker-compose -f docker-compose.prod.yml --profile monitoring up -d --build
;;
*)
log_error "未知的部署模式: $mode"
exit 1
;;
esac
log_success "应用部署完成"
}
# 等待服务启动
wait_for_service() {
log_info "等待服务启动..."
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
if curl -s http://localhost/health > /dev/null 2>&1; then
log_success "服务启动成功"
return 0
fi
log_info "等待服务启动... ($attempt/$max_attempts)"
sleep 2
((attempt++))
done
log_warning "服务启动超时,请检查日志"
return 1
}
# 显示部署信息
show_deployment_info() {
log_success "🎉 部署完成!"
echo ""
echo "📋 部署信息:"
echo " - 访问地址: http://localhost"
echo " - 健康检查: http://localhost/health"
echo " - 日志目录: ./logs/"
echo ""
echo "🔧 管理命令:"
echo " - 查看状态: docker-compose -f docker-compose.prod.yml ps"
echo " - 查看日志: docker-compose -f docker-compose.prod.yml logs -f"
echo " - 停止服务: docker-compose -f docker-compose.prod.yml down"
echo " - 重启服务: docker-compose -f docker-compose.prod.yml restart"
echo ""
echo "📊 监控:"
echo " - 容器状态: docker stats"
echo " - 系统资源: htop"
echo ""
}
# 主函数
main() {
echo "🚀 AI Chat 生产环境部署脚本"
echo "================================"
# 检查参数
if [ $# -eq 0 ]; then
echo "请选择部署模式:"
echo "1) 基础模式 (HTTP)"
echo "2) HTTPS模式"
echo "3) 监控模式"
echo "4) 仅构建"
echo ""
read -p "请输入选择 (1-4): " choice
case $choice in
1) MODE="basic" ;;
2) MODE="https" ;;
3) MODE="monitoring" ;;
4) MODE="build-only" ;;
*) log_error "无效选择"; exit 1 ;;
esac
else
MODE=$1
fi
# 执行部署步骤
check_requirements
create_directories
backup_current
build_app
if [ "$MODE" != "build-only" ]; then
deploy_app $MODE
wait_for_service
show_deployment_info
else
log_success "构建完成,跳过部署"
fi
}
# 运行主函数
main "$@"