Guide pour héberger une application Drupal sur Azure Container Instance (ACI)

Dans le paysage numérique actuel, en évolution rapide, le déploiement et la gestion efficaces des applications Web sont essentiels pour les entreprises qui souhaitent garder une longueur d’avance. Drupal, un système de gestion de contenu (CMS) puissant et flexible, est un choix populaire pour créer des sites Web et des applications dynamiques. Cependant, l’hébergement et la mise à l’échelle de Drupal peuvent s’avérer difficiles sans la bonne infrastructure.
Azure Container Instances (ACI) – un service simple mais puissant proposé par Microsoft Azure qui vous permet d’exécuter des conteneurs Docker sans gérer de machines virtuelles ou d’orchestrateurs. ACI offre un moyen simple et rentable d’héberger des applications conteneurisées, ce qui en fait un choix idéal pour les développeurs cherchant à rationaliser leurs processus de déploiement.
Un système de gestion de contenu (CMS) est un outil logiciel qui permet aux utilisateurs d’ajouter, de publier, de modifier ou de supprimer du contenu d’un site Web à l’aide d’un navigateur Web sur un smartphone, une tablette ou un ordinateur de bureau. En règle générale, le logiciel CMS est écrit dans un langage de script et ses scripts s’exécutent sur un ordinateur sur lequel une base de données et un serveur Web sont installés. Le contenu et les paramètres du site Web sont généralement stockés dans une base de données, et pour chaque demande de page adressée au serveur Web, les scripts combinent les informations de la base de données et les actifs (fichiers JavaScript, fichiers CSS, fichiers image, etc. qui font partie de la base de données). du CMS ou ont été téléchargés) pour construire les pages du site Internet.
Voici quelques-unes des raisons pour lesquelles vous pourriez choisir d’utiliser Drupal :
- Construire un petit site simple avec des pages HTML statiques n’est pas difficile et vous pouvez créer un site simple très rapidement. La configuration d’un site dans un CMS nécessite généralement plus de temps au départ, mais vous apporte les avantages de l’édition en ligne (plus facile pour les responsables de contenu moins expérimentés), de l’uniformité (plus difficile à maintenir en utilisant du HTML statique pour les sites plus grands) et de la possibilité de plus fonctionnalités complexes nécessitant une base de données.
- Certains logiciels CMS sont spécialisés ; par exemple, il existe des packages et des services hébergés que vous pouvez utiliser pour créer un blog ou un site Web d’adhésion à un club. Drupal, en revanche, est un CMS à usage général. Si vous créez un site à usage spécial, vous pouvez choisir d’utiliser un CMS à usage spécial ; cependant, si votre site s’écarte ne serait-ce que légèrement de l’objectif prévu, vous ferez probablement mieux d’utiliser un CMS à usage général plutôt que d’essayer d’adapter un CMS à usage spécifique.
- Construire son propre logiciel de type CMS peut paraître séduisant. Cependant, utiliser un CMS à usage général comme Drupal comme point de départ est généralement une meilleure idée, car les fonctionnalités de base du CMS (telles que les comptes d’utilisateurs et la gestion de contenu) nécessitent des milliers d’heures de développement, y compris de nombreuses années de tests utilisateurs, de bugs et de bugs. fixation et renforcement de la sécurité.
Les conteneurs sont devenus un moyen privilégié pour empaqueter, déployer et gérer des applications cloud. Azure Container Instances offre le moyen le plus rapide et le plus simple d’exécuter un conteneur dans Azure, sans avoir à gérer de machines virtuelles et sans avoir à adopter un service de niveau supérieur.
Avantages et inconvénients de l’utilisation d’une instance de conteneur
Parmi les principaux avantages de ce service, nous pouvons citer :
- Temps de démarrage rapide (généralement quelques secondes)
- Facturation uniquement pour l’utilisation réelle (paiement par seconde d’activité du service) sans aucun coût initial
- Pas besoin de mise en œuvre d’une orchestration complexe
- Fournir un niveau d’isolation des conteneurs similaire au niveau de sécurité fourni par l’exécution d’applications sur différentes machines virtuelles
- Disponibilité d’adresses IP publiques pour les conteneurs accessibles depuis Internet via FQDN (Fully Qualified Domain Name)
- Option d’intégration avec Azure Kubernetes Service
- Possibilité de déployer un groupe de conteneurs (ACI Container Groups) sur une machine hôte en utilisant un espace de stockage partagé, un réseau partagé et d’autres ressources entre les conteneurs travaillant ensemble vers un seul objectif
Certains des inconvénients de l’ACI sont :
- Évolutivité limitée – en termes de mise à l’échelle – ACI propose des options pour définir les ressources allouées à un conteneur. Cependant, la mise à l’échelle nécessite la création et la gestion manuelles des instances ACI. Il ne fournit pas non plus de mise à l’échelle automatique.
- Configuration de base – dans certains scénarios, cela devient un inconvénient (c’est-à-dire que le manque de fonctionnalité de mappage de ports peut nous obliger à modifier le code du conteneur pour qu’il fonctionne correctement avec ACI).
Conditions préalables
- Registre de conteneurs
- Serveur de base de données SQL
Création d’un Dockerfile avec les exigences Drupal
- Drupal Nécessite le composant suivant
- Serveur Web (Nginx)
- Base de données
- PHP
- init.sh personnalisé
- Paramètres personnalisés.php
- Serveur personnalisé.conf
- Service personnalisé.yml
- Fichier Docker
Exemple: https://raw.githubusercontent.com/tothenew/ttn-toolkit/main/Docker/Drupal-Nginx/Dockerfile
Points forts :- Ubuntu :22:04
- DRUSH_VERSION 11.4.0
- PHP8.1
- init.sh personnalisé
Exemple: https://raw.githubusercontent.com/tothenew/ttn-toolkit/main/Docker/Drupal-Nginx/init.sh
Note:- La valeur de Pm.max_children changera en fonction du nombre de processus dont votre application a besoin pour démarrer pour PHP-FPM (FastCgi)
- Configuration Nginx
Exemple: https://raw.githubusercontent.com/tothenew/ttn-toolkit/main/Docker/Drupal-Nginx/nginx.conf
Note:- Le paramètre client_max_body_size est défini sur 200 M
- fichier serveur.conf
Exemple: https://raw.githubusercontent.com/tothenew/ttn-toolkit/main/Docker/Drupal-Nginx/server.conf - paramètres.php
Exemple: https://raw.githubusercontent.com/tothenew/ttn-toolkit/main/Docker/Drupal-Nginx/settings.php
Note:- Mettre à jour les chaînes de connexion MySql dans $databases[‘default’][‘default’]
- (Facultatif) Mettez à jour les chaînes de connexion Redis sous
- Service.yml
Exemple: https://raw.githubusercontent.com/tothenew/ttn-toolkit/main/Docker/Drupal-Nginx/services.yml
Étapes de pré-construction :
- Créez un référentiel vide avec le contenu ci-dessus ou utilisez les commandes suivantes
git clone https://github.com/tothenew/ttn-toolkit.git cd ttn-toolkit/Docker/Drupal-Nginx
- Copier le code de l’application dans le même répertoire
Création avec le code de l’application et transfert vers Container Registry
- Créer une image Docker avec une balise
Configuration d’une instance de conteneur
- Conditions préalables pour l’instance de conteneur
- Taille du processeur et de la mémoire pour votre instance de conteneur
- Port d’application
- Espace de travail Log Analytics pour la surveillance
- Définir les variables d’environnement requises
# Define variables RESOURCE_GROUP="MyResourceGroup" LOCATION="eastus" TAG="ENV=non-prod" WORKSPACE_NAME="MyWorkspace" ACR_NAME="myblogdemoacr" CONTAINER_NAME="myblogcontainer" IMAGE_NAME="myapp:latest" DNS_NAME_LABEL="mycontainerdnsname114313" FRONT_DOOR_NAME="MyFrontDoor" APP_PORT="80"
Note:
- Modifiez toutes les variables d’environnement en conséquence
- Créer un groupe de ressources
# Create a Resource Group az group create --name $RESOURCE_GROUP --location $LOCATION --tags $TAG
- Créer un espace de travail Log Analytics
# Create a Log Analytics Workspace az monitor log-analytics workspace create --resource-group $RESOURCE_GROUP --workspace-name $WORKSPACE_NAME --location $LOCATION --tags $TAG # Get the Log Analytics Workspace Resource ID workspace_id=$(az monitor log-analytics workspace show --resource-group $RESOURCE_GROUP --workspace-name $WORKSPACE_NAME --query customerId --output tsv)
- Créer un registre de conteneurs
# Create Azure Container Registry (ACR) az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic --location $LOCATION --admin-enabled true --tags $TAG # Get the ACR Login Server acr_login_server=$(az acr show --name $ACR_NAME --query loginServer --output tsv)
- Transférer l’image Docker de l’application vers Azure Container Registry
#Tagging application image docker tag app:latest $ACR_NAME:latest #Login to ACR az acr login #Push image to ACR docker push $ACR_NAME:latest
- Créer une instance de conteneur
# Create a Container Instance az container create \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_NAME \ --image $acr_login_server/$IMAGE_NAME \ --location $LOCATION \ --dns-name-label $DNS_NAME_LABEL \ --ports $APP_PORT \ --registry-login-server $acr_login_server \ --registry-username $ACR_NAME \ --registry-password $(az acr credential show --name $ACR_NAME --query passwords[0].value --output tsv) \ --log-analytics-workspace $workspace_id
Configurer FrontDoor en tant que CDN
Créer une porte frontale :
# Create Azure Front Door az network front-door create \ --resource-group $RESOURCE_GROUP \ --name $FRONT_DOOR_NAME \ --backend-address $DNS_NAME_LABEL.$LOCATION.azurecontainer.io \ --tags $TAG
- Contraintes de ressources:
- Limites de mémoire et de processeur : Azure Container Instances a des limites spécifiques en matière de mémoire (jusqu’à 14 Go) et de processeur (jusqu’à 4 processeurs virtuels) par groupe de conteneurs.
- Stockage : chaque groupe de conteneurs dispose d’un maximum de 100 Go de stockage, ce qui peut ne pas être suffisant pour toutes les charges de travail.
- Réseautage:
- Intégration au réseau virtuel : bien qu’ACI puisse s’intégrer aux réseaux virtuels Azure, il existe des limitations telles que le manque de prise en charge du DNS personnalisé et une configuration de sous-réseau limitée.
- Adressage IP : chaque groupe de conteneurs se voit attribuer une seule adresse IP, ce qui peut constituer une limitation si vous avez besoin de plusieurs adresses IP.
- Sécurité : seules les instances de conteneur publiques seront directement ajoutées au pool backend de la porte d’entrée, ce qui exposera l’instance de conteneur au réseau public.
- Mise à l’échelle:
- Mise à l’échelle automatique : contrairement à Azure Kubernetes Service (AKS), ACI ne prend pas en charge la mise à l’échelle automatique de manière native. Vous devez gérer la mise à l’échelle manuellement ou utiliser des services supplémentaires comme Azure Logic Apps ou Azure Functions.
- Déploiement:
- Orchestration : ACI ne prend pas en charge les fonctionnalités d’orchestration avancées telles que AKS ou d’autres services Kubernetes. Cela le rend moins adapté aux applications complexes multi-conteneurs.
- Applications avec état : ACI est plus adapté aux applications sans état. L’exécution d’applications avec état peut nécessiter des configurations et des ressources supplémentaires.
- Intégration des services:
- Liaisons de service limitées : l’intégration d’ACI à d’autres services Azure (par exemple, Azure Functions, Azure Logic Apps) peut nécessiter une configuration supplémentaire et ne prend pas en charge nativement certaines intégrations.
- Tarifs:
- Rentabilité : pour les charges de travail de longue durée, ACI peut être plus cher que d’autres options comme AKS ou les machines virtuelles en raison de son modèle de tarification basé sur les ressources allouées.
Bien qu’Azure Container Instances (ACI) permette un déploiement de conteneurs rapide et facile, ils peuvent ne pas convenir aux environnements de production en raison de limitations en termes de capacité des ressources, de mise en réseau et de mise à l’échelle. ACI manque de fonctionnalités d’orchestration avancées et de mise à l’échelle automatique native, ce qui le rend moins idéal pour les applications complexes et à forte demande. Pour des besoins de production robustes, des solutions telles qu’Azure Kubernetes Service (AKS) offrent des capacités d’évolutivité, de contrôle et d’intégration supérieures, garantissant ainsi de meilleures performances et fiabilité.
VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE
Source link