95 lines
3.0 KiB
PowerShell
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
|