# 准备部署包脚本 # 用途:将项目打包,方便上传到飞牛OS服务器 # 使用:.\scripts\prepare-deploy-package.ps1 Write-Host "=== 准备部署包 ===" -ForegroundColor Cyan $projectPath = "d:\3danzhuang\furniture-3d-system" $outputPath = "d:\3danzhuang\deploy-package" # 检查项目目录 if (-not (Test-Path $projectPath)) { Write-Host "❌ 项目目录不存在: $projectPath" -ForegroundColor Red exit 1 } # 创建输出目录 if (Test-Path $outputPath) { Write-Host "清理旧的部署包..." -ForegroundColor Yellow Remove-Item $outputPath -Recurse -Force } New-Item -ItemType Directory -Path $outputPath -Force | Out-Null Write-Host "`n复制项目文件..." -ForegroundColor Yellow # 复制项目文件(排除不需要的文件) $excludePatterns = @( "node_modules", ".next", ".git", "backups", "*.log", ".env", ".env.local", ".env.*.local" ) Get-ChildItem -Path $projectPath -Recurse | Where-Object { $item = $_ $relativePath = $item.FullName.Substring($projectPath.Length + 1) $shouldExclude = $false foreach ($pattern in $excludePatterns) { if ($relativePath -like "*\$pattern\*" -or $relativePath -like "$pattern\*" -or $relativePath -like "*\$pattern") { $shouldExclude = $true break } } -not $shouldExclude } | Copy-Item -Destination { $_.FullName.Replace($projectPath, $outputPath) } -Force Write-Host "✅ 文件复制完成" -ForegroundColor Green # 创建服务器端部署脚本 Write-Host "`n创建服务器端部署脚本..." -ForegroundColor Yellow $deployScript = @' #!/bin/bash set -e echo "=== 飞牛OS部署脚本 ===" echo "" # 检查Docker环境 echo "检查Docker环境..." docker --version || { echo "❌ Docker未安装"; exit 1; } docker-compose --version || { echo "❌ Docker Compose未安装"; exit 1; } echo "✅ Docker环境正常" echo "" # 检查.env文件 echo "检查环境变量文件..." if [ ! -f .env ]; then echo "⚠️ .env文件不存在,创建默认配置..." cat > .env << 'EOF' DATABASE_URL=postgresql://furniture:furniture123@postgres:5432/furniture_db?schema=public S3_ENDPOINT=http://minio:9000 S3_PUBLIC_ENDPOINT=http://192.168.42.252:9000 S3_REGION=us-east-1 S3_ACCESS_KEY=minioadmin S3_SECRET_KEY=minioadmin123 S3_BUCKET=furniture-3d-models JWT_SECRET=change-me-in-production-use-strong-random-string NODE_ENV=production NEXT_TELEMETRY_DISABLED=1 PORT=3000 WEB_PORT=3000 EOF echo "✅ 已创建默认.env文件" echo "⚠️ 请修改.env文件中的JWT_SECRET为强密码!" else echo "✅ .env文件已存在" fi echo "" # 停止现有服务 echo "停止现有服务..." docker-compose -f docker-compose.prod.yml down || true echo "" # 构建并启动服务 echo "构建并启动服务..." echo "(首次构建可能需要5-10分钟,请耐心等待...)" docker-compose -f docker-compose.prod.yml build app docker-compose -f docker-compose.prod.yml up -d echo "" # 等待服务启动 echo "等待服务启动..." sleep 15 # 检查服务状态 echo "检查服务状态..." docker-compose -f docker-compose.prod.yml ps echo "" # 初始化数据库(如果需要) echo "初始化数据库..." docker-compose -f docker-compose.prod.yml exec -T app npx prisma db push || echo "⚠️ 数据库初始化失败,请检查日志" echo "" # 检查健康状态 echo "检查健康状态..." sleep 5 curl -f http://localhost:3000/api/health && echo "✅ 服务健康" || echo "⚠️ 健康检查失败,请查看日志" echo "" echo "=== 部署完成 ===" echo "" echo "访问地址:" echo " 应用: http://192.168.42.252:3000" echo " MinIO控制台: http://192.168.42.252:9001" echo "" echo "常用命令:" echo " 查看日志: docker-compose -f docker-compose.prod.yml logs -f" echo " 查看状态: docker-compose -f docker-compose.prod.yml ps" echo " 停止服务: docker-compose -f docker-compose.prod.yml down" '@ $deployScript | Out-File -FilePath "$outputPath\deploy.sh" -Encoding UTF8 -NoNewline Write-Host "✅ 部署脚本创建完成" -ForegroundColor Green # 创建README $readme = @' # 部署包说明 ## 使用方法 1. 将整个 deploy-package 目录上传到服务器 /opt/furniture-3d-system 2. 在服务器上执行: ```bash cd /opt/furniture-3d-system chmod +x deploy.sh ./deploy.sh ``` ## 手动部署步骤 如果自动脚本失败,可以手动执行: ```bash cd /opt/furniture-3d-system # 创建.env文件(如果不存在) # 编辑.env文件,确保配置正确 # 启动服务 docker-compose -f docker-compose.prod.yml up -d # 查看日志 docker-compose -f docker-compose.prod.yml logs -f # 初始化数据库 docker-compose -f docker-compose.prod.yml exec app npx prisma db push docker-compose -f docker-compose.prod.yml exec app npx prisma db seed ``` ## 访问地址 - 应用: http://192.168.42.252:3000 - MinIO控制台: http://192.168.42.252:9001 - 用户名: minioadmin - 密码: minioadmin123 ## 故障排查 查看日志: ```bash docker-compose -f docker-compose.prod.yml logs -f app ``` 检查健康状态: ```bash curl http://localhost:3000/api/health ``` '@ $readme | Out-File -FilePath "$outputPath\README.md" -Encoding UTF8 Write-Host "`n=== 部署包准备完成 ===" -ForegroundColor Green Write-Host "`n部署包位置: $outputPath" -ForegroundColor Cyan Write-Host "`n下一步操作:" -ForegroundColor Yellow Write-Host "1. 使用WinSCP或其他SFTP工具连接到 192.168.42.252" -ForegroundColor White Write-Host "2. 将 $outputPath 目录上传到服务器的 /opt/furniture-3d-system" -ForegroundColor White Write-Host "3. 在服务器上执行: cd /opt/furniture-3d-system && chmod +x deploy.sh && ./deploy.sh" -ForegroundColor White Write-Host "`n或者参考: scripts\deploy-feiniu-manual.md" -ForegroundColor Gray