# 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