Déployer en tant qu'Azure Web App

Langue: Français
Cet article a été traduit de l'anglais par IA et peut contenir des erreurs. Vos commentaires nous aideront à l'améliorer.

Ce guide vous explique comment déployer le serveur auto-hébergé d'ActivityInfo en tant qu'Azure Web App for Containers, en utilisant l'image Docker officielle. Il est destiné aux professionnels de l'informatique qui sont familiers avec Microsoft Azure.

Avant de commencer

Le serveur auto-hébergé d'ActivityInfo stocke ses données dans une base de données SQLite. Cela a deux conséquences pour un déploiement sur Azure Web App :

  • Vous devez attacher un volume persistant pour la base de données, car le système de fichiers propre à une Web App est réinitialisé à chaque fois que le conteneur est redémarré ou déplacé.
  • Vous devez exécuter une seule instance. Le serveur est conçu pour une mise à l'échelle verticale, et non horizontale : pour prendre en charge plus d'utilisateurs simultanés, attribuez à l'instance plus de cœurs de processeur et de mémoire plutôt que d'ajouter des instances.

Azure App Service termine également la connexion HTTPS pour vous et transmet le HTTP simple au conteneur. Vous exécutez donc ActivityInfo en mode proxy HTTPS.

Les étapes ci-dessous utilisent l'Azure CLI. Vous pouvez effectuer les mêmes étapes depuis le portail Azure si vous préférez. Connectez-vous d'abord avec :

az login

Définir les variables

Les commandes de ce guide réutilisent quelques valeurs. Définissez-les une seule fois, en choisissant vos propres noms d'application et de compte de stockage uniques au niveau mondial :

RESOURCE_GROUP=activityinfo-rg
LOCATION=westeurope
PLAN=activityinfo-plan
APP=my-activityinfo
STORAGE_ACCOUNT=aistorage$RANDOM
SHARE=activityinfo-data

Créer un groupe de ressources

az group create --name $RESOURCE_GROUP --location $LOCATION

Créer un plan App Service Linux

Créez un plan Linux avec un seul worker. Le niveau Basique B1 ou supérieur est requis pour le stockage personnalisé, un domaine personnalisé et le paramètre « Always On ».

az appservice plan create \
  --name $PLAN \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --is-linux \
  --sku B1 \
  --number-of-workers 1

Créer un partage de fichiers pour la base de données

Créez un compte de stockage et un partage Azure Files. ActivityInfo stocke sa base de données SQLite et config.ini sur ce partage, afin que les données survivent aux redémarrages et aux redéploiements.

az storage account create \
  --name $STORAGE_ACCOUNT \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --sku Standard_LRS

az storage share-rm create \
  --resource-group $RESOURCE_GROUP \
  --storage-account $STORAGE_ACCOUNT \
  --name $SHARE \
  --quota 10

Créer l'application Web

Créez l'application Web à partir de l'image officielle d'ActivityInfo sur Docker Hub :

az webapp create \
  --resource-group $RESOURCE_GROUP \
  --plan $PLAN \
  --name $APP \
  --container-image-name activityinfo/activityinfo:5.0.0

Monter le partage de fichiers

Montez le partage de fichiers dans le conteneur à l'emplacement /data. Lisez d'abord la clé du compte de stockage, puis ajoutez le montage :

STORAGE_KEY=$(az storage account keys list \
  --resource-group $RESOURCE_GROUP \
  --account-name $STORAGE_ACCOUNT \
  --query "[0].value" --output tsv)

az webapp config storage-account add \
  --resource-group $RESOURCE_GROUP \
  --name $APP \
  --custom-id activityinfo-data \
  --storage-type AzureFiles \
  --account-name $STORAGE_ACCOUNT \
  --share-name $SHARE \
  --access-key $STORAGE_KEY \
  --mount-path /data

Configurer ActivityInfo

Définissez les paramètres de l'application. WEBSITES_PORT indique à App Service que le conteneur écoute sur le port 8081. Les variables ACTIVITYINFO_* placent le serveur en mode proxy HTTPS et font pointer son répertoire de données vers le partage monté.

az webapp config appsettings set \
  --resource-group $RESOURCE_GROUP \
  --name $APP \
  --settings \
    WEBSITES_PORT=8081 \
    ACTIVITYINFO_SERVER_HTTPS_PROXY=TRUE \
    ACTIVITYINFO_SERVER_DOMAIN=$APP.azurewebsites.net \
    ACTIVITYINFO_DATA_DATA_DIRECTORY=/data

Activez « Always On » afin qu'App Service maintienne le conteneur en cours d'exécution et ne le décharge pas lorsque l'application est inactive :

az webapp config set \
  --resource-group $RESOURCE_GROUP \
  --name $APP \
  --always-on true

Créer le compte administrateur

Azure fournit un certificat géré gratuit pour le domaine azurewebsites.net, l'application est donc immédiatement disponible via HTTPS. Allez à https://<APP>.azurewebsites.net, où vous serez invité à créer le premier compte d'utilisateur administrateur.

Utiliser un domaine personnalisé

Pour servir ActivityInfo depuis votre propre domaine, ajoutez un domaine personnalisé et un certificat géré à l'application Web. Ensuite, mettez à jour le paramètre ACTIVITYINFO_SERVER_DOMAIN pour qu'il corresponde, afin que les liens dans les e-mails de notification utilisent la bonne adresse :

az webapp config appsettings set \
  --resource-group $RESOURCE_GROUP \
  --name $APP \
  --settings ACTIVITYINFO_SERVER_DOMAIN=activityinfo.example.gov

Performances du stockage

Le partage de fichiers monté ci-dessus est Azure Files, un système de fichiers réseau que le conteneur atteint via le protocole SMB. Chaque lecture et écriture transite par le réseau, ce qui ajoute de la latence par rapport à un disque local. Les bases de données effectuent de nombreuses petites écritures synchrones et maintiennent des verrous de fichiers pendant les transactions, elles sont donc sensibles à cette latence. Sur un serveur très sollicité, le partage peut devenir le facteur limitant pour les temps de réponse. Une Web App pour conteneurs ne peut attacher que du stockage réseau, ce compromis s'applique donc à tout déploiement à instance unique sur App Service.

Si vous avez besoin de performances de base de données plus élevées, déployez plutôt sur Azure Kubernetes Service. Là, vous pouvez attacher un disque géré Premium SSD v2 à un seul pod, ce qui offre une latence proche de celle d'un disque local avec des IOPS configurables, tout en survivant à la perte d'un nœud.

Prochaines étapes

Suivez le guide de Configuration pour configurer la livraison des e-mails et l'authentification unique (Single Sign-On) via l'interface Web.

Élément suivant
Déployer sur Azure Kubernetes Service