Premiere commit - Omika

This commit is contained in:
2026-10-23 18:46:50 +02:00
commit 8ea76c1b24
2155 changed files with 984301 additions and 0 deletions
+125
View File
@@ -0,0 +1,125 @@
# ============================================================
# Omika - Installation du service Windows OmikaApi (deploiement 1/6)
# ============================================================
# CIBLE : Windows Server 2025 (SRV-OMIKA), PowerShell ADMINISTRATEUR.
# NE PAS executer depuis le poste de developpement.
#
# CE QUE CE SCRIPT FAIT :
# 1. Cree les dossiers propres a l'API (journalisation + spool JSONL).
# 2. Pose les ACL NTFS minimales (avec CONTROLE du code retour d'icacls).
# 3. Valide le compte de service (existence + droit de connexion).
# 4. Cree le service Windows OmikaApi (idempotent, StartupType Manual).
# 5. Verifie ce qui a ete reellement cree (binaire, compte, etat).
#
# CE QU'IL NE FAIT PAS :
# - AUCUN demarrage de service.
# - AUCUN secret ecrit (variables d'environnement = action manuelle).
# - AUCUNE regle firewall, AUCUN IIS, AUCUNE modification HFSQL/PostgreSQL.
# - AUCUNE copie de binaires (voir Install-OmikaServerFiles.ps1).
#
# PREREQUIS MANUELS :
# - Le compte local dedie existe et possede le droit « Ouvrir une session en
# tant que service » (secpol.msc). Ce script le VERIFIE et avertit.
# - La publication est deja copiee dans <InstallRoot>\Apps\OmikaApi
# (Omika.Api.exe present).
#
# IDEMPOTENT : une seconde execution ne recree rien et signale toute divergence
# entre le service existant et le binaire/compte attendus.
# Prend en charge -WhatIf (aucune modification reelle).
#
# EXEMPLES :
# .\Install-OmikaApi.ps1
# .\Install-OmikaApi.ps1 -WhatIf
# .\Install-OmikaApi.ps1 -Desinstaller # rollback du service
# ============================================================
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[string]$InstallRoot = 'C:\Omika',
[string]$ServiceName = 'OmikaApi',
[string]$Account = '.\svc_omika_api',
[ValidateSet('Manual', 'Automatic', 'Disabled')]
[string]$StartupType = 'Manual',
# Rollback : supprime le service (refuse si le service tourne encore).
[switch]$Desinstaller
)
$ErrorActionPreference = 'Stop'
Import-Module (Join-Path $PSScriptRoot 'Omika.Deploy.Common.psm1') -Force
# Le module a son propre etat de session : $WhatIfPreference ne s'y propage pas.
$Simulation = [bool]$WhatIfPreference
# --- Definition du service ---------------------------------------------------
$NomAffiche = 'Omika Api'
$DossierApps = 'OmikaApi'
$Executable = 'Omika.Api.exe'
$Description = 'Omika - API metier (Kestrel) : bootstrap mobile, synchronisation, documents, exposition SRV_LANGUES.'
# Dossiers dont CE service est proprietaire (droit Modifier).
$DossiersModifier = @(
'Logs\Api',
'Data\Api\Diagnostics\Jsonl'
)
try {
Assert-OmikaAdmin
$chemins = Get-OmikaPaths -InstallRoot $InstallRoot
$cheminExe = Join-Path (Join-Path $chemins.Apps $DossierApps) $Executable
# --- Rollback ------------------------------------------------------------
if ($Desinstaller) {
Write-OmikaStep "Desinstallation du service $ServiceName"
Remove-OmikaService -Name $ServiceName -WhatIf:$Simulation | Out-Null
Write-OmikaServiceSummary -Name $ServiceName -Supprime
exit 0
}
# --- 1. Dossiers ---------------------------------------------------------
Write-OmikaStep 'Dossiers du service'
foreach ($relatif in $DossiersModifier) {
New-OmikaDirectory -Path (Join-Path $InstallRoot $relatif) -WhatIf:$Simulation | Out-Null
}
# --- 2. ACL --------------------------------------------------------------
Write-OmikaStep 'ACL NTFS minimales'
foreach ($relatif in $DossiersModifier) {
Grant-OmikaAcl -Path (Join-Path $InstallRoot $relatif) -Account $Account -Right 'M' `
-RequireExisting -WhatIf:$Simulation | Out-Null
}
# --- 3. Compte de service ------------------------------------------------
Write-OmikaStep 'Compte de service'
Assert-OmikaServiceAccount -Account $Account | Out-Null
# --- 4. Service Windows --------------------------------------------------
Write-OmikaStep "Creation du service Windows ($StartupType)"
Install-OmikaService -Name $ServiceName -DisplayName $NomAffiche `
-ExePath $cheminExe -Account $Account -Description $Description `
-StartupType $StartupType -WhatIf:$Simulation | Out-Null
# --- 5. Recapitulatif ----------------------------------------------------
Write-OmikaServiceSummary -Name $ServiceName -ExePath $cheminExe -Account $Account -Rappels @(
'Injecter les secrets en variables MACHINE (aucun secret dans ce script) :'
' Hfsql / LicenseConnection / SyncConnection / ServiceConnection / FilePasswords'
' ConnectionStrings__DiagnosticsDatabase (si l''API lit PostgreSQL)'
' DiagnosticsIdentity__HmacKey (ActorKey, min 256 bits Base64)'
' MobileAuth__SigningKey (OBLIGATOIRE : echec au demarrage sinon)'
' DiagnosticDeployment__ClientCode / __ServerInstanceId'
' Observability__Remote__Directory (IDENTIQUE au Worker Diagnostics)'
' ASPNETCORE_ENVIRONMENT=Production'
' ASPNETCORE_URLS=http://127.0.0.1:<PORT_API>'
'Verifier le provider OLE DB PCSOFT.HFSQL (64 bits) enregistre.'
'Installer LibreOffice si la generation PDF des rapports est utilisee.'
'DiagnosticsForwarding__Enabled reste false : ne l''activer que pour un serveur client distant.'
)
exit 0
}
catch {
Write-OmikaFail $_.Exception.Message
exit 1
}