Langue: Français
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.