#!/usr/bin/env pwsh <# .SYNOPSIS Script pour configurer la base de données PostgreSQL en production .DESCRIPTION Ce script configure PostgreSQL pour Lions User Manager : - Création de la base de données lions_audit - Création de l'utilisateur lions_audit_user - Octroi des privilèges .PARAMETER VpsHost Host SSH du VPS (ex: lions@176.57.150.2) .PARAMETER Namespace Namespace Kubernetes pour PostgreSQL (défaut: postgresql) .PARAMETER PostgresUser Utilisateur PostgreSQL (défaut: lionsuser) .PARAMETER DatabaseName Nom de la base de données (défaut: lions_audit) .PARAMETER DatabaseUser Nom de l'utilisateur de la base (défaut: lions_audit_user) .PARAMETER DatabasePassword Mot de passe pour l'utilisateur de la base .EXAMPLE .\setup-database-production.ps1 -VpsHost "lions@176.57.150.2" -DatabasePassword "strong-password-123" #> param( [Parameter(Mandatory=$true)] [string]$VpsHost, [Parameter(Mandatory=$false)] [string]$Namespace = "postgresql", [Parameter(Mandatory=$false)] [string]$PostgresUser = "lionsuser", [Parameter(Mandatory=$false)] [string]$DatabaseName = "lions_audit", [Parameter(Mandatory=$false)] [string]$DatabaseUser = "lions_audit_user", [Parameter(Mandatory=$true)] [string]$DatabasePassword ) $ErrorActionPreference = "Stop" # Couleurs function Write-Success { Write-Host "✅ $args" -ForegroundColor Green } function Write-Info { Write-Host "ℹ️ $args" -ForegroundColor Cyan } function Write-Warning { Write-Host "⚠️ $args" -ForegroundColor Yellow } function Write-Error { Write-Host "❌ $args" -ForegroundColor Red } function Write-Step { Write-Host "`n🚀 $args" -ForegroundColor Magenta } Write-Host @" ╔═══════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ 🗄️ CONFIGURATION BASE DE DONNÉES PRODUCTION 🗄️ ║ ║ ║ ╚═══════════════════════════════════════════════════════════════════════════════╝ "@ -ForegroundColor Cyan Write-Info "VPS Host: $VpsHost" Write-Info "Namespace: $Namespace" Write-Info "Database: $DatabaseName" Write-Info "Database User: $DatabaseUser" Write-Info "" # 1. Trouver le pod PostgreSQL Write-Step "1. Recherche du pod PostgreSQL..." $getPodCmd = "kubectl get pods -n $Namespace -o jsonpath='{.items[0].metadata.name}'" try { $POSTGRES_POD = ssh.exe $VpsHost $getPodCmd if ([string]::IsNullOrEmpty($POSTGRES_POD)) { Write-Error "Aucun pod PostgreSQL trouvé dans le namespace $Namespace" exit 1 } Write-Success "Pod PostgreSQL trouvé: $POSTGRES_POD" } catch { Write-Error "Erreur lors de la recherche du pod: $($_.Exception.Message)" exit 1 } # 2. Lister les bases de données existantes Write-Step "2. Liste des bases de données existantes..." $listDbCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d postgres -c '\l'" try { ssh.exe $VpsHost $listDbCmd } catch { Write-Warning "Erreur lors de la liste des bases: $($_.Exception.Message)" } # 3. Vérifier si la base existe déjà Write-Step "3. Vérification de l'existence de la base de données..." $checkDbCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d postgres -tAc \"SELECT 1 FROM pg_database WHERE datname='$DatabaseName'\"" try { $dbExists = ssh.exe $VpsHost $checkDbCmd if ($dbExists -eq "1") { Write-Warning "La base de données $DatabaseName existe déjà" $createDb = Read-Host "Voulez-vous la recréer ? (oui/non)" if ($createDb -eq "oui") { $dropDbCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d postgres -c 'DROP DATABASE IF EXISTS $DatabaseName;'" ssh.exe $VpsHost $dropDbCmd Write-Success "Base de données supprimée" } else { Write-Info "Base de données conservée" } } } catch { Write-Warning "Erreur lors de la vérification: $($_.Exception.Message)" } # 4. Créer la base de données Write-Step "4. Création de la base de données $DatabaseName..." $createDbCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d postgres -c 'CREATE DATABASE $DatabaseName OWNER $PostgresUser;'" try { ssh.exe $VpsHost $createDbCmd Write-Success "Base de données $DatabaseName créée" } catch { Write-Warning "Erreur lors de la création (peut-être qu'elle existe déjà): $($_.Exception.Message)" } # 5. Créer l'utilisateur Write-Step "5. Création de l'utilisateur $DatabaseUser..." $createUserCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d postgres -c \"CREATE USER $DatabaseUser WITH PASSWORD '$DatabasePassword';\"" try { ssh.exe $VpsHost $createUserCmd Write-Success "Utilisateur $DatabaseUser créé" } catch { Write-Warning "Erreur lors de la création de l'utilisateur (peut-être qu'il existe déjà): $($_.Exception.Message)" } # 6. Octroyer les privilèges Write-Step "6. Octroi des privilèges..." $grantDbCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d postgres -c 'GRANT ALL PRIVILEGES ON DATABASE $DatabaseName TO $DatabaseUser;'" try { ssh.exe $VpsHost $grantDbCmd Write-Success "Privilèges accordés sur la base de données" } catch { Write-Warning "Erreur lors de l'octroi des privilèges: $($_.Exception.Message)" } # 7. Octroyer les privilèges sur le schéma public Write-Step "7. Octroi des privilèges sur le schéma public..." $grantSchemaCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $PostgresUser -d $DatabaseName -c 'GRANT ALL ON SCHEMA public TO $DatabaseUser;'" try { ssh.exe $VpsHost $grantSchemaCmd Write-Success "Privilèges accordés sur le schéma public" } catch { Write-Warning "Erreur lors de l'octroi des privilèges sur le schéma: $($_.Exception.Message)" } # 8. Test de connexion Write-Step "8. Test de connexion à la base de données..." $testConnCmd = "kubectl exec -n $Namespace $POSTGRES_POD -- psql -U $DatabaseUser -d $DatabaseName -c 'SELECT version();'" try { $version = ssh.exe $VpsHost $testConnCmd Write-Success "Connexion réussie !" Write-Info "Version PostgreSQL: $version" } catch { Write-Error "Échec de la connexion: $($_.Exception.Message)" exit 1 } # 9. Résumé Write-Step "9. Résumé de la configuration..." Write-Host @" ╔═══════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ✅ CONFIGURATION BASE DE DONNÉES TERMINÉE ✅ ║ ║ ║ ╚═══════════════════════════════════════════════════════════════════════════════╝ "@ -ForegroundColor Green Write-Host "📋 INFORMATIONS IMPORTANTES:" -ForegroundColor Yellow Write-Host "" Write-Host "🗄️ BASE DE DONNÉES:" -ForegroundColor Cyan Write-Host " Nom: $DatabaseName" Write-Host " Utilisateur: $DatabaseUser" Write-Host " Mot de passe: $DatabasePassword" Write-Host "" Write-Host "🔗 CONNEXION:" -ForegroundColor Cyan Write-Host " Host: lions-db.lions.svc.cluster.local (Service Kubernetes)" Write-Host " Port: 5432" Write-Host " Database: $DatabaseName" Write-Host "" Write-Host "⚠️ ACTIONS REQUISES:" -ForegroundColor Yellow Write-Host " 1. Sauvegardez le mot de passe de la base de données" Write-Host " 2. Créez le secret Kubernetes avec ces informations" Write-Host " 3. Vérifiez que Flyway peut exécuter les migrations" Write-Host ""