> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Déploiement sur Azure

> Déployez CaseBender sur Microsoft Azure

## Aperçu

Ce guide vous accompagne dans le déploiement de CaseBender sur Azure en utilisant des images Docker préconstruites avec Azure Container Apps et des services managés.

## Prérequis

1. [Compte Azure](https://azure.microsoft.com/)
2. [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) installé
3. [Docker](https://docs.docker.com/get-docker/) installé

## Étape 1 : Configuration Initiale

### Installer et Configurer Azure CLI

<CodeGroup>
  ```bash macOS theme={null}
  # Utilisation de Homebrew
  brew install azure-cli

  # Connexion à Azure

  az login

  # Configurer Docker pour ACR

  az acr login --name casebenderacr

  ```

  ```bash Linux theme={null}
  # Installer Azure CLI
  curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

  # Connexion à Azure
  az login

  # Configurer Docker pour ACR
  az acr login --name casebenderacr
  ```

  ```powershell Windows theme={null}
  # Utilisation de winget
  winget install -e --id Microsoft.AzureCLI

  # Connexion à Azure
  az login

  # Configurer Docker pour ACR
  az acr login --name casebenderacr
  ```
</CodeGroup>

### Initialiser le Projet

```bash theme={null}
# Définir les variables
RESOURCE_GROUP="casebender-rg"
LOCATION="eastus"

# Créer un groupe de ressources
az group create --name $RESOURCE_GROUP --location $LOCATION

# Activer les services requis
az provider register --namespace Microsoft.ContainerRegistry
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.Storage
```

## Étape 2 : Configurer l'Infrastructure Azure

### Créer un Compte de Stockage

```bash theme={null}
# Créer un compte de stockage
az storage account create \
  --name casebenderstorage \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --sku Standard_LRS \
  --encryption-services blob

# Créer un conteneur blob
az storage container create \
  --name casebender \
  --account-name casebenderstorage \
  --auth-mode key \
  --public-access off

# Obtenir la clé du compte de stockage
STORAGE_KEY=$(az storage account keys list \
  --account-name casebenderstorage \
  --resource-group $RESOURCE_GROUP \
  --query '[0].value' -o tsv)

# Créer une identité managée pour l'accès au stockage
az identity create \
  --name casebender-storage-identity \
  --resource-group $RESOURCE_GROUP

# Obtenir l'ID de l'identité managée
IDENTITY_ID=$(az identity show \
  --name casebender-storage-identity \
  --resource-group $RESOURCE_GROUP \
  --query id -o tsv)

# Attribuer le rôle Storage Blob Data Contributor
az role assignment create \
  --assignee-object-id $(az identity show --name casebender-storage-identity --resource-group $RESOURCE_GROUP --query principalId -o tsv) \
  --role "Storage Blob Data Contributor" \
  --scope $(az storage account show --name casebenderstorage --resource-group $RESOURCE_GROUP --query id -o tsv)
```

### Configurer Azure Database pour PostgreSQL

```bash theme={null}
# Créer un serveur PostgreSQL
az postgres flexible-server create \
  --resource-group $RESOURCE_GROUP \
  --name casebender-db \
  --admin-user superadmin \
  --admin-password <votre-mot-de-passe-securise> \
  --sku-name Standard_B2s \
  --storage-size 32 \
  --version 14

# Créer une base de données
az postgres flexible-server db create \
  --resource-group $RESOURCE_GROUP \
  --server-name casebender-db \
  --database-name casebender
```

### Configurer Azure Cache pour Redis

```bash theme={null}
# Créer un cache Redis
az redis create \
  --resource-group $RESOURCE_GROUP \
  --name casebender-redis \
  --sku Basic \
  --vm-size c0 \
  --location $LOCATION
```

## Étape 3 : Créer et Configurer le Registre de Conteneurs

```bash theme={null}
# Créer un Azure Container Registry
az acr create \
  --resource-group $RESOURCE_GROUP \
  --name casebenderacr \
  --sku Standard \
  --admin-enabled true

# Obtenir les identifiants du registre
ACR_USERNAME=$(az acr credential show --name casebenderacr --query username -o tsv)
ACR_PASSWORD=$(az acr credential show --name casebenderacr --query "passwords[0].value" -o tsv)

# Récupérer les images CaseBender
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest

# Taguer les images pour ACR
docker tag casebender/casebender:latest casebenderacr.azurecr.io/casebender/app:latest
docker tag casebender/workflow-processor:latest casebenderacr.azurecr.io/casebender/workflow-processor:latest
docker tag casebender/misp-processor:latest casebenderacr.azurecr.io/casebender/misp-processor:latest

# Pousser les images vers ACR
docker push casebenderacr.azurecr.io/casebender/app:latest
docker push casebenderacr.azurecr.io/casebender/workflow-processor:latest
docker push casebenderacr.azurecr.io/casebender/misp-processor:latest
```

## Étape 4 : Déployer les Services

### Créer un Environnement Container Apps

```bash theme={null}
# Créer un environnement Container Apps
az containerapp env create \
  --name casebender-env \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION

# Créer l'application principale
az containerapp create \
  --name casebender-app \
  --resource-group $RESOURCE_GROUP \
  --environment casebender-env \
  --image casebenderacr.azurecr.io/casebender/app:latest \
  --target-port 3000 \
  --ingress external \
  --registry-server casebenderacr.azurecr.io \
  --registry-username $ACR_USERNAME \
  --registry-password $ACR_PASSWORD \
  --user-assigned-identity $IDENTITY_ID \
  --env-vars \
    AUTH_SECRET=<votre-secret-auth> \
    AUTH_SALT=<votre-sel-auth> \
    POSTGRES_PRISMA_URL="postgresql://superadmin:<mot-de-passe>@casebender-db.postgres.database.azure.com:5432/casebender" \
    REDIS_URL="redis://casebender-redis.redis.cache.windows.net:6380?ssl=true&password=<cle-redis>" \
    AZURE_STORAGE_ACCOUNT="casebenderstorage" \
    AZURE_STORAGE_CONTAINER="casebender" \
    AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=casebenderstorage;AccountKey=${STORAGE_KEY};EndpointSuffix=core.windows.net"

# Créer le processeur de workflow
az containerapp create \
  --name workflow-processor \
  --resource-group $RESOURCE_GROUP \
  --environment casebender-env \
  --image casebenderacr.azurecr.io/casebender/workflow-processor:latest \
  --registry-server casebenderacr.azurecr.io \
  --registry-username $ACR_USERNAME \
  --registry-password $ACR_PASSWORD \
  --min-replicas 1 \
  --max-replicas 1 \
  --env-vars \
    POSTGRES_PRISMA_URL="postgresql://superadmin:<mot-de-passe>@casebender-db.postgres.database.azure.com:5432/casebender" \
    REDIS_URL="redis://casebender-redis.redis.cache.windows.net:6380?ssl=true&password=<cle-redis>"

# Créer le processeur MISP
az containerapp create \
  --name misp-processor \
  --resource-group $RESOURCE_GROUP \
  --environment casebender-env \
  --image casebenderacr.azurecr.io/casebender/misp-processor:latest \
  --registry-server casebenderacr.azurecr.io \
  --registry-username $ACR_USERNAME \
  --registry-password $ACR_PASSWORD \
  --min-replicas 1 \
  --max-replicas 1 \
  --env-vars \
    POSTGRES_PRISMA_URL="postgresql://superadmin:<mot-de-passe>@casebender-db.postgres.database.azure.com:5432/casebender" \
    REDIS_URL="redis://casebender-redis.redis.cache.windows.net:6380?ssl=true&password=<cle-redis>"
```

## Étape 5 : Configurer Azure Front Door

```bash theme={null}
# Créer un profil Front Door
az afd profile create \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --sku Standard_AzureFrontDoor

# Créer un point de terminaison
az afd endpoint create \
  --endpoint-name casebender \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP

# Créer un groupe d'origine
az afd origin-group create \
  --origin-group-name casebender-origin-group \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --probe-path "/" \
  --probe-protocol Http \
  --probe-request-type GET

# Ajouter une origine
az afd origin create \
  --origin-group-name casebender-origin-group \
  --origin-name casebender-origin \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --host-name <url-de-votre-container-app> \
  --origin-host-header <url-de-votre-container-app> \
  --priority 1 \
  --weight 1000 \
  --enabled-state Enabled
```

## Étape 6 : Configurer un Domaine Personnalisé (Optionnel)

```bash theme={null}
# Ajouter un domaine personnalisé à Front Door
az afd custom-domain create \
  --custom-domain-name casebender-domain \
  --host-name votre-domaine.com \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --minimum-tls-version TLS12

# Activer HTTPS
az afd custom-domain enable-https \
  --custom-domain-name casebender-domain \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP
```

## Surveillance et Maintenance

### Configurer Application Insights

```bash theme={null}
# Créer Application Insights
az monitor app-insights component create \
  --app casebender-insights \
  --location $LOCATION \
  --resource-group $RESOURCE_GROUP \
  --application-type web

# Obtenir la clé d'instrumentation
az monitor app-insights component show \
  --app casebender-insights \
  --resource-group $RESOURCE_GROUP \
  --query instrumentationKey \
  --output tsv
```

### Configurer des Alertes

```bash theme={null}
# Créer un groupe d'action
az monitor action-group create \
  --name casebender-alerts \
  --resource-group $RESOURCE_GROUP \
  --action email admin email@votredomaine.com

# Créer une règle d'alerte
az monitor metrics alert create \
  --name "utilisation-cpu-elevee" \
  --resource-group $RESOURCE_GROUP \
  --scopes <id-ressource-container-app> \
  --condition "avg CPU > 80" \
  --window-size 5m \
  --evaluation-frequency 1m \
  --action <id-groupe-action>
```

### Consulter les Journaux

```bash theme={null}
# Voir les journaux de l'application conteneur
az containerapp logs show \
  --name casebender-app \
  --resource-group $RESOURCE_GROUP \
  --follow
```

## Configuration de la Mise à l'Échelle

```bash theme={null}
# Configurer les règles de mise à l'échelle
az containerapp update \
  --name casebender-app \
  --resource-group $RESOURCE_GROUP \
  --min-replicas 1 \
  --max-replicas 10 \
  --scale-rule-name http-rule \
  --scale-rule-type http \
  --scale-rule-http-concurrency 50
```

## Sauvegarde et Reprise après Sinistre

### Configurer les Sauvegardes de Base de Données

```bash theme={null}
# Activer les sauvegardes automatisées
az postgres flexible-server update \
  --resource-group $RESOURCE_GROUP \
  --name casebender-db \
  --backup-retention 7
```

### Configurer la Géo-Réplication

```bash theme={null}
# Créer des ressources dans une région secondaire
az postgres flexible-server replica create \
  --name casebender-db-secondary \
  --source-server casebender-db \
  --resource-group $RESOURCE_GROUP \
  --location westus
```

## Meilleures Pratiques de Sécurité

1. Activer Azure Defender pour tous les services
2. Implémenter Azure Private Link
3. Utiliser des Identités Managées
4. Évaluations de sécurité régulières
5. Activer la journalisation des diagnostics

## Optimisation des Coûts

1. Utiliser le plan de consommation pour Container Apps
2. Implémenter des règles d'auto-scaling
3. Choisir des niveaux de service appropriés
4. Surveiller les modèles d'utilisation
5. Utiliser des Instances Réservées Azure

## Prochaines Étapes

* Configurer CI/CD avec Azure DevOps
* Implémenter une surveillance complète
* Configurer la reprise après sinistre
* Revoir la conformité de sécurité
