flnxi-Wu/scripts/deploy/execute-remote-deploy.ps1
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

95 lines
3.0 KiB
PowerShell

# Execute remote deployment script
param(
[string]$Server = "45.249.208.118",
[string]$User = "root",
[string]$ProjectPath = "/root/youyidian-3d"
)
$ErrorActionPreference = "Stop"
Write-Host "Executing remote deployment..." -ForegroundColor Yellow
Write-Host "Server: $Server" -ForegroundColor Gray
Write-Host "Project Path: $ProjectPath" -ForegroundColor Gray
Write-Host ""
# Create deployment script content
$bashScript = @"
#!/bin/bash
set -e
cd $ProjectPath
echo "Backing up uploads..."
if [ -d "uploads" ]; then
mkdir -p backups
cp -r uploads backups/uploads-$(date +%Y%m%d-%H%M%S) 2>/dev/null || true
fi
echo "Extracting new version..."
if [ -f "project-deploy.tar.gz" ]; then
tar -xzf project-deploy.tar.gz
rm -f project-deploy.tar.gz
else
echo "Error: project-deploy.tar.gz not found"
exit 1
fi
echo "Restoring uploads directory..."
if [ -d "backups" ]; then
latest_backup=$(ls -td backups/uploads-* 2>/dev/null | head -1)
if [ -n "$latest_backup" ] && [ -d "$latest_backup" ]; then
mkdir -p uploads
cp -r "$latest_backup"/* uploads/ 2>/dev/null || true
fi
fi
mkdir -p uploads
chmod -R 777 uploads
echo "Stopping old containers..."
docker compose down 2>/dev/null || docker-compose down 2>/dev/null || true
echo "Building and starting new containers..."
docker compose up -d --build --force-recreate || docker-compose up -d --build --force-recreate
echo "Waiting for containers to start..."
sleep 20
echo "Running database migrations..."
if [ -f prisma/schema.prisma ]; then
docker compose exec -T app npx prisma db push --accept-data-loss --schema=/app/prisma/schema.prisma 2>/dev/null || docker-compose exec -T app npx prisma db push --accept-data-loss --schema=/app/prisma/schema.prisma 2>/dev/null || echo "Database migration completed or skipped"
fi
echo "Checking container status..."
docker compose ps || docker-compose ps
echo "Viewing application logs (last 50 lines)..."
docker compose logs app --tail=50 || docker-compose logs app --tail=50
echo "Deployment completed!"
"@
# Save script to temp file
$tempScript = Join-Path $env:TEMP "remote-deploy-$(Get-Date -Format 'yyyyMMdd-HHmmss').sh"
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllText($tempScript, $bashScript, $utf8NoBom)
Write-Host "Uploading deployment script..." -ForegroundColor Gray
$remoteScript = "/tmp/deploy-$(Get-Date -Format 'yyyyMMdd-HHmmss').sh"
scp $tempScript "${User}@${Server}:$remoteScript"
if ($LASTEXITCODE -eq 0) {
Write-Host "Executing deployment script on server..." -ForegroundColor Gray
Write-Host "Note: Please enter SSH password if prompted" -ForegroundColor Yellow
Write-Host ""
ssh "${User}@${Server}" "chmod +x $remoteScript; bash $remoteScript; rm -f $remoteScript"
} else {
Write-Host "Failed to upload deployment script" -ForegroundColor Red
}
# Cleanup
Remove-Item $tempScript -Force -ErrorAction SilentlyContinue
Write-Host ""
Write-Host "Deployment process completed!" -ForegroundColor Green