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
  2. Azure CLI installé
  3. Docker installé

Étape 1 : Configuration Initiale

Installer et Configurer Azure CLI

# Utilisation de Homebrew
brew install azure-cli

# Connexion à Azure

az login

# Configurer Docker pour ACR

az acr login --name casebenderacr

Initialiser le Projet

# 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

# 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

# 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

# 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

# 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

# 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

# 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)

# 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

# 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

# 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

# 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

# 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

# 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

# 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é