167 lines
6.2 KiB
PowerShell
167 lines
6.2 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
# Script de démarrage rapide pour ObsiViewer en mode développement
|
|
|
|
param(
|
|
[string]$VaultPath = "./vault",
|
|
[switch]$SkipMeili,
|
|
[switch]$ResetMeili,
|
|
[switch]$Help
|
|
)
|
|
|
|
if ($Help) {
|
|
Write-Host @"
|
|
Usage: .\start-dev.ps1 [-VaultPath <path>] [-SkipMeili] [-Help]
|
|
|
|
Options:
|
|
-VaultPath <path> Chemin vers votre vault Obsidian (défaut: ./vault)
|
|
-SkipMeili Ne pas démarrer Meilisearch
|
|
-ResetMeili Supprimer le conteneur et le volume Meilisearch avant de redémarrer
|
|
-SkipMeili Ne pas démarrer Meilisearch
|
|
-Help Afficher cette aide
|
|
|
|
Exemples:
|
|
.\start-dev.ps1
|
|
.\start-dev.ps1 -VaultPath C:\Users\moi\Documents\MonVault
|
|
.\start-dev.ps1 -SkipMeili
|
|
"@
|
|
exit 0
|
|
}
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
Write-Host "🚀 Démarrage d'ObsiViewer en mode développement" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
# Diagnostic: Vérifier les variables Meilisearch existantes
|
|
$meiliVars = Get-ChildItem Env: | Where-Object { $_.Name -like 'MEILI*' }
|
|
if ($meiliVars) {
|
|
Write-Host "⚠️ Variables Meilisearch détectées dans l'environnement:" -ForegroundColor Yellow
|
|
foreach ($var in $meiliVars) {
|
|
Write-Host " $($var.Name) = $($var.Value)" -ForegroundColor Gray
|
|
}
|
|
Write-Host " Ces variables seront purgées..." -ForegroundColor Yellow
|
|
Write-Host ""
|
|
}
|
|
|
|
# Vérifier que le vault existe
|
|
if (-not (Test-Path $VaultPath)) {
|
|
Write-Host "⚠️ Le vault n'existe pas: $VaultPath" -ForegroundColor Yellow
|
|
Write-Host " Création du dossier..." -ForegroundColor Yellow
|
|
New-Item -ItemType Directory -Path $VaultPath -Force | Out-Null
|
|
}
|
|
|
|
$VaultPathAbsolute = Resolve-Path $VaultPath
|
|
Write-Host "📁 Vault: $VaultPathAbsolute" -ForegroundColor Green
|
|
|
|
# Vérifier si .env existe
|
|
if (-not (Test-Path ".env")) {
|
|
Write-Host "⚠️ Fichier .env manquant" -ForegroundColor Yellow
|
|
if (Test-Path ".env.example") {
|
|
Write-Host " Copie de .env.example vers .env..." -ForegroundColor Yellow
|
|
Copy-Item ".env.example" ".env"
|
|
}
|
|
}
|
|
|
|
# Purger TOUTES les variables d'environnement Meilisearch conflictuelles
|
|
$meiliVarsToPurge = Get-ChildItem Env: | Where-Object { $_.Name -like 'MEILI*' }
|
|
if ($meiliVarsToPurge) {
|
|
Write-Host "🧹 Purge des variables Meilisearch existantes..." -ForegroundColor Cyan
|
|
foreach ($var in $meiliVarsToPurge) {
|
|
Remove-Item "Env:\$($var.Name)" -ErrorAction SilentlyContinue
|
|
Write-Host " ✓ $($var.Name) supprimée" -ForegroundColor Gray
|
|
}
|
|
Write-Host ""
|
|
}
|
|
|
|
# Définir les variables d'environnement pour la session
|
|
$env:VAULT_PATH = $VaultPathAbsolute
|
|
$env:MEILI_MASTER_KEY = "devMeiliKey123"
|
|
$env:MEILI_HOST = "http://127.0.0.1:7700"
|
|
$env:PORT = "4000"
|
|
|
|
Write-Host "✅ Variables d'environnement définies:" -ForegroundColor Green
|
|
Write-Host " VAULT_PATH=$env:VAULT_PATH" -ForegroundColor Gray
|
|
Write-Host " MEILI_MASTER_KEY=devMeiliKey123" -ForegroundColor Gray
|
|
Write-Host " MEILI_HOST=$env:MEILI_HOST" -ForegroundColor Gray
|
|
|
|
# Démarrer Meilisearch si demandé
|
|
if (-not $SkipMeili) {
|
|
Write-Host ""
|
|
Write-Host "🔍 Démarrage de Meilisearch..." -ForegroundColor Cyan
|
|
|
|
if ($ResetMeili) {
|
|
Write-Host "🧹 Réinitialisation de Meilisearch (conteneur + volume)..." -ForegroundColor Yellow
|
|
try {
|
|
Push-Location "docker-compose"
|
|
docker compose down -v meilisearch 2>$null | Out-Null
|
|
Pop-Location
|
|
} catch {
|
|
Pop-Location 2>$null
|
|
}
|
|
# Forcer la suppression ciblée si nécessaire
|
|
docker rm -f obsiviewer-meilisearch 2>$null | Out-Null
|
|
docker volume rm -f docker-compose_meili_data 2>$null | Out-Null
|
|
}
|
|
|
|
# Vérifier si Meilisearch est déjà en cours
|
|
$meiliRunning = docker ps --filter "name=obsiviewer-meilisearch" --format "{{.Names}}" 2>$null
|
|
|
|
if ($meiliRunning) {
|
|
Write-Host " ✓ Meilisearch déjà en cours" -ForegroundColor Green
|
|
} else {
|
|
npm run meili:up
|
|
Write-Host " ⏳ Attente du démarrage de Meilisearch..." -ForegroundColor Yellow
|
|
}
|
|
|
|
# Attendre la santé du service /health
|
|
$healthTimeoutSec = 30
|
|
$healthUrl = "http://127.0.0.1:7700/health"
|
|
$startWait = Get-Date
|
|
while ($true) {
|
|
try {
|
|
$resp = Invoke-RestMethod -Uri $healthUrl -Method GET -TimeoutSec 3
|
|
if ($resp.status -eq "available") {
|
|
Write-Host " ✓ Meilisearch est prêt" -ForegroundColor Green
|
|
break
|
|
}
|
|
} catch {
|
|
# ignore and retry
|
|
}
|
|
if (((Get-Date) - $startWait).TotalSeconds -ge $healthTimeoutSec) {
|
|
Write-Host " ⚠️ Timeout d'attente de Meilisearch (continuer quand même)" -ForegroundColor Yellow
|
|
break
|
|
}
|
|
Start-Sleep -Milliseconds 500
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "📊 Indexation du vault..." -ForegroundColor Cyan
|
|
npm run meili:reindex
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "✅ Configuration terminée!" -ForegroundColor Green
|
|
Write-Host ""
|
|
Write-Host "Les variables d'environnement sont définies dans cette session PowerShell." -ForegroundColor Yellow
|
|
Write-Host ""
|
|
Write-Host "Pour démarrer l'application, ouvrez 2 terminaux:" -ForegroundColor Yellow
|
|
Write-Host ""
|
|
Write-Host "Terminal 1 (Backend):" -ForegroundColor Cyan
|
|
Write-Host " node server/index.mjs" -ForegroundColor White
|
|
Write-Host " (Les variables VAULT_PATH, MEILI_MASTER_KEY sont déjà définies)" -ForegroundColor Gray
|
|
Write-Host ""
|
|
Write-Host "Terminal 2 (Frontend):" -ForegroundColor Cyan
|
|
Write-Host " npm run dev" -ForegroundColor White
|
|
Write-Host ""
|
|
Write-Host "⚠️ IMPORTANT: Si vous fermez ce terminal, les variables seront perdues." -ForegroundColor Yellow
|
|
Write-Host " Relancez ce script ou définissez manuellement:" -ForegroundColor Yellow
|
|
Write-Host " `$env:VAULT_PATH='$VaultPathAbsolute'" -ForegroundColor Gray
|
|
Write-Host " `$env:MEILI_MASTER_KEY='devMeiliKey123'" -ForegroundColor Gray
|
|
Write-Host " Remove-Item Env:\MEILI_API_KEY -ErrorAction SilentlyContinue" -ForegroundColor Gray
|
|
Write-Host ""
|
|
Write-Host "Accès:" -ForegroundColor Yellow
|
|
Write-Host " Frontend: http://localhost:3000" -ForegroundColor White
|
|
Write-Host " Backend API: http://localhost:4000" -ForegroundColor White
|
|
Write-Host " Meilisearch: http://localhost:7700" -ForegroundColor White
|
|
Write-Host ""
|