furniture-3d-system-Wu/scripts/prepare-deploy-package.ps1

214 lines
6.0 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 准备部署包脚本
# 用途:将项目打包,方便上传到飞牛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 migrate deploy || echo "⚠️ 数据库迁移失败,请检查日志"
docker-compose -f docker-compose.prod.yml exec -T app npm run db:verify-master-data:all:strict || 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 migrate deploy
docker-compose -f docker-compose.prod.yml exec app npm run db:verify-master-data:all:strict
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