paper-burner/scripts/deploy.ps1

119 lines
4.2 KiB
PowerShell

# Paper Burner X - Windows 一键部署脚本
# PowerShell
Write-Host ""
Write-Host "======================================" -ForegroundColor Blue
Write-Host " Paper Burner X - 一键部署脚本" -ForegroundColor Blue
Write-Host "======================================" -ForegroundColor Blue
Write-Host ""
# 1. 检查 .env 文件
Write-Host "[1/6] 检查配置文件..." -ForegroundColor Yellow
if (-not (Test-Path ".env")) {
Write-Host "→ 创建 .env 文件" -ForegroundColor Yellow
Copy-Item ".env.example" ".env"
Write-Host "⚠️ 请编辑 .env 文件并配置以下必要项:" -ForegroundColor Red
Write-Host " - DB_PASSWORD"
Write-Host " - JWT_SECRET"
Write-Host " - ADMIN_EMAIL"
Write-Host " - ADMIN_PASSWORD"
Write-Host ""
Read-Host "配置完成后按回车继续"
}
Write-Host "✓ 配置文件检查完成" -ForegroundColor Green
Write-Host ""
# 2. 安装后端依赖
Write-Host "[2/6] 安装后端依赖..." -ForegroundColor Yellow
Set-Location server
if (-not (Test-Path "node_modules")) {
npm install
Write-Host "✓ 依赖安装完成" -ForegroundColor Green
} else {
Write-Host "✓ 依赖已存在" -ForegroundColor Green
}
Set-Location ..
Write-Host ""
# 3. 生成 Prisma Client
Write-Host "[3/6] 生成 Prisma Client..." -ForegroundColor Yellow
Set-Location server
npx prisma generate
Write-Host "✓ Prisma Client 生成完成" -ForegroundColor Green
Set-Location ..
Write-Host ""
# 4. 启动 Docker 服务
Write-Host "[4/6] 启动 Docker 服务..." -ForegroundColor Yellow
docker-compose up -d postgres
Write-Host "→ 等待数据库启动..." -ForegroundColor Yellow
Start-Sleep -Seconds 5
Write-Host "✓ 数据库已启动" -ForegroundColor Green
Write-Host ""
# 5. 运行数据库迁移
Write-Host "[5/6] 初始化数据库..." -ForegroundColor Yellow
Set-Location server
npx prisma migrate deploy
Write-Host "✓ 数据库初始化完成" -ForegroundColor Green
Set-Location ..
Write-Host ""
# 6. 启动应用
Write-Host "[6/6] 启动应用服务..." -ForegroundColor Yellow
docker-compose up -d app
Write-Host "✓ 应用已启动" -ForegroundColor Green
Write-Host ""
# 等待应用启动
Write-Host "→ 等待应用启动..." -ForegroundColor Yellow
Start-Sleep -Seconds 3
# 检查健康状态
Write-Host "→ 检查服务健康状态..." -ForegroundColor Yellow
$healthy = $false
for ($i = 1; $i -le 10; $i++) {
try {
$response = Invoke-WebRequest -Uri "http://localhost:3000/api/health" -UseBasicParsing -ErrorAction SilentlyContinue
if ($response.StatusCode -eq 200) {
Write-Host "✓ 服务健康检查通过" -ForegroundColor Green
$healthy = $true
break
}
} catch {
Start-Sleep -Seconds 2
}
}
if (-not $healthy) {
Write-Host "✗ 服务启动失败,请检查日志:" -ForegroundColor Red
Write-Host " docker-compose logs -f app"
exit 1
}
Write-Host ""
Write-Host "======================================" -ForegroundColor Green
Write-Host " 🎉 部署成功!" -ForegroundColor Green
Write-Host "======================================" -ForegroundColor Green
Write-Host ""
Write-Host "访问地址:" -ForegroundColor Blue
Write-Host " 主应用: http://localhost:3000" -ForegroundColor Green
Write-Host " 管理面板: http://localhost:3000/admin" -ForegroundColor Green
Write-Host " API健康: http://localhost:3000/api/health" -ForegroundColor Green
Write-Host ""
$adminEmail = (Get-Content .env | Select-String "ADMIN_EMAIL=" | ForEach-Object { $_ -replace "ADMIN_EMAIL=", "" })
$adminPassword = (Get-Content .env | Select-String "ADMIN_PASSWORD=" | ForEach-Object { $_ -replace "ADMIN_PASSWORD=", "" })
Write-Host "管理员账户:" -ForegroundColor Blue
Write-Host " 邮箱: $adminEmail"
Write-Host " 密码: $adminPassword"
Write-Host ""
Write-Host "常用命令:" -ForegroundColor Blue
Write-Host " 查看日志: docker-compose logs -f app"
Write-Host " 停止服务: docker-compose down"
Write-Host " 重启服务: docker-compose restart"
Write-Host ""
Write-Host "⚠️ 首次登录后请立即修改管理员密码!" -ForegroundColor Yellow
Write-Host ""