This repository has been archived on 2026-01-03. You can view files and clone it, but cannot push or open issues or pull requests.
Files
lions-user-manager/scripts/setup-database-production.ps1

215 lines
8.3 KiB
PowerShell
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 ""