214 lines
6.0 KiB
PowerShell
214 lines
6.0 KiB
PowerShell
# 准备部署包脚本
|
||
# 用途:将项目打包,方便上传到飞牛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
|
||
|