ObsiViewer/start-dev.ps1

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 ""