Introduction
Le projet docker-scaffold fournit une approche structurée et configurable pour conteneuriser et gérer les applications basées sur Drupal. L'échafaudage (traduit directement du mot "scaffold") sert de cadre de base pour créer, déployer et gérer un environnement Drupal à l'aide de conteneurs Docker. La dernière branche 10.3.x s'aligne sur Drupal Core 10.3.x et ses composants de support, tout en mettant l'accent sur la flexibilité, l'évolutivité et les meilleures pratiques pour le déploiement cloud, en particulier sur Azure App Service.
GitHub: https://github.com/drupalwxt/docker-scaffold/tree/10.3.x
Présentation de l'architecture Docker-Scaffold
Le référentiel docker-scaffold est conçu pour :
- Faciliter le développement local des applications Drupal.
- Prise en charge du déploiement dans des environnements basés sur des conteneurs, notamment Kubernetes et Azure App Service.
- Intégrez des outils tels que Nginx, Redis, Varnish et Supervisor pour optimiser les performances et l'évolutivité.
- Fournissez des images Docker cohérentes et maintenables adaptées à divers environnements de déploiement.
Les composants clés comprennent :
- Configurations Dockerfile pour différents cas d'utilisation (développement, CI/CD, Azure App Service).
- Fichiers Docker Compose pour orchestrer des environnements multi-conteneurs.
- Configurations spécifiques pour des services comme Redis, Nginx, Varnish et SSH.
- Intégration du superviseur pour gérer plusieurs services dans un seul conteneur.
L'image Appsvc
L'image Docker appsvc est un élément clé du référentiel docker-scaffold, conçu spécifiquement pour le déploiement sur Azure App Service. Cette image est optimisée pour répondre aux exigences uniques de la fonctionnalité Application Web pour conteneurs d'Azure.
Objectif de l'image Appsvc
L'image appsvc permet le déploiement et l'exécution transparents d'applications Drupal sur Azure App Service. Il est construit sur l'image Drupal officielle drupal:10.3-php8.3-fpm-alpine
, qui utilise PHP 8.3 et Alpine Linux pour une base légère. Il combine les services clés en une image unique et maintenable tout en s'alignant sur les attentes d'exécution d'Azure.
Composants et services
L'image appsvc intègre plusieurs composants pour garantir la compatibilité, les performances et la stabilité :
- Nginx (Serveur Web):
- Configuré via
nginx.conf
. - Gère le trafic HTTP, le proxy inverse et les mécanismes de mise en cache.
- Optimisé pour les URL propres de Drupal et la livraison d'actifs statiques.
- Inclut des configurations de sécurité pour restreindre l'accès aux fichiers sensibles et protéger l'application.
- Configuré via
- Redis (Serveur de mise en cache):
- Configuré via
redis.conf
. - Fournit une prise en charge de la mise en cache pour optimiser les performances des sites Drupal.
- Utilise une stratégie d’expulsion LRU (Least Recently Used) avec une allocation de mémoire maximale de 500 Mo.
- Configuré via
- Varnish (Accélérateur HTTP):
- Configuré via
default.vcl
. - Implémente la mise en cache et la gestion des demandes pour réduire la charge sur le backend.
- Prend en charge les opérations
PURGE
etBAN
pour les workflows d'invalidation du cache de Drupal.
- Configuré via
- Supervisor (Gestionnaire de processus):
- Configuré via
superviserd.ini
. - Gère plusieurs services (Nginx, Redis, PHP-FPM, Varnish et cron) au sein du conteneur.
- Garantit que tous les services sont démarrés, surveillés et redémarrés si nécessaire.
- Configuré via
- PHP-FPM (Processeur PHP):
- Intégré au traitement backend de Drupal.
- Fonctionne aux côtés de Nginx pour diffuser du contenu PHP dynamique.
- Serveur SSH:
- Configuré via
sshd_config
,sshd_setup.sh
etsshd_init.sh
. - Fournit un accès SSH pour le débogage et l’administration dans Azure App Service.
- Expose le port 2222 pour les connexions SSH.
- Configuré via
- Cron (Planificateur de tâches):
- Exécute les tâches périodiques nécessaires à Drupal, telles que vider les caches, exécuter des tâches par lots ou synchroniser le contenu.
- Les tâches planifiées sont placées dans
/etc/periodic/
.
- Gestion des configurations :
- L'image appsvc prend en charge le système de gestion de configuration de Drupal en copiant le répertoire
config/sync
dans le conteneur. - Cela garantit que les configurations spécifiques à l'environnement peuvent être appliquées lors du déploiement, rationalisant ainsi la gestion des paramètres dans différents environnements.
- L'image appsvc prend en charge le système de gestion de configuration de Drupal en copiant le répertoire
Processus de construction
Le processus de build prend en charge à la fois le développement local et les pipelines automatisés pour les déploiements prêts pour la production :
- Développement local multi-conteneurs :
- Utilise docker-compose.yml pour créer un environnement de développement local avec des services tels que Nginx, Redis, Varnish et MySQL ou PostgreSQL.
- Permet aux développeurs de tester et de déboguer localement la pile complète d'applications Drupal.
- Créer l'image Appsvc :
- Les pipelines automatisés (par exemple, GitHub Actions, Azure DevOps) créent l'image Docker appsvc à l'aide du fichier appsvc/Docker.
- Le processus extrait l'image de base, applique les configurations et regroupe les services essentiels (Nginx, Redis, Varnish, PHP-FPM).
- Push vers Azure Container Registry (ACR) :
- Une fois créée, l'image Docker est transférée vers Azure Container Registry (ACR) ou un autre registre de conteneurs de votre choix.
- ACR permet un stockage et une gestion sécurisés et évolutifs des images de conteneurs.
- Déploiement sur Azure App Service :
- Azure App Service extrait la dernière image du registre de conteneurs.
- Le processus de déploiement garantit que le conteneur est démarré avec tous les services gérés via Supervisor.
- Les variables d'environnement sont injectées au moment de l'exécution pour les connexions à la base de données, les paramètres de proxy et les configurations SSO.
Utilisation dans Azure App Service
L'image appsvc est spécialement conçue pour exploiter les capacités de l'environnement d'hébergement conteneurisé d'Azure App Service :
- Application Web pour conteneurs :
- Azure App Service exécute l'image appsvc en tant que conteneur Docker.
- L'image fournit tous les services nécessaires (serveur Web, PHP-FPM, Redis, Varnish) dans un seul conteneur, réduisant ainsi la surcharge de l'infrastructure.
- Variables d'environnement :
- Les variables d'environnement, telles que
DB_TYPE
,DB_NAME
et les paramètres de proxy, sont transmises au conteneur au moment de l'exécution. - Le script
sshd_init.sh
garantit que les variables d'environnement sont disponibles dans les sessions SSH.
- Les variables d'environnement, telles que
- Évolutivité :
- Azure App Service fait évoluer l'application conteneurisée horizontalement (en ajoutant plus d'instances) ou verticalement (en augmentant l'allocation de ressources).
- L'intégration de Redis et Varnish améliore la mise en cache et réduit la charge du backend, rendant l'application réactive sous charge.
- Exposition des ports et des services :
- Le trafic HTTP sur le port 80 est géré par Varnish, qui agit comme un proxy inverse et une couche de mise en cache.
- Lorsqu'une requête ne peut pas être traitée à partir du cache Varnish, il la transmet à Nginx sur le port 8080 pour un traitement ultérieur et l'envoi de la réponse.
- L'accès SSH sur le port 2222 permet un accès administratif pour le débogage et les interventions manuelles.
- Vérifications de santé :
- La configuration Varnish prend en charge les routes de vérification de l'état (
/_healthcheck
et/healthcheck.txt
), garantissant ainsi que la disponibilité du conteneur est surveillée par Azure.
- La configuration Varnish prend en charge les routes de vérification de l'état (
- Sécurité :
- L'accès SSH est restreint et configurable via
sshd_config
. - Les répertoires et fichiers sensibles sont sécurisés dans la configuration Nginx.
- Les cookies et chaînes de requête inutiles sont supprimés dans Varnish pour améliorer la sécurité et l'efficacité de la mise en cache.
- L'accès SSH est restreint et configurable via
- Configuration personnalisée :
- Azure App Service permet de monter des volumes externes pour le stockage persistant (par exemple,
html/sites/default/files
pour les fichiers publics). - Les paramètres du fichier
settings.php
peuvent être injectés dans le conteneur au moment de l'exécution pour les configurations spécifiques à l'environnement.
- Azure App Service permet de monter des volumes externes pour le stockage persistant (par exemple,
- Authentification unique (SSO) :
- L'image appsvc prend en charge l'authentification unique via Active Directory, permettant une gestion transparente des identités et un contrôle d'accès dans les environnements Azure.
Diagramme de contexte
Conclusion
Le projet docker-scaffold, et plus particulièrement l'image appsvc, fournit une solution complète et optimisée pour le déploiement d'applications Drupal WxT sur Azure App Service. En regroupant Nginx, Redis, Varnish et PHP-FPM dans un seul conteneur, l'image appsvc simplifie le déploiement, améliore l'évolutivité et les performances.
L'infrastructure basée sur des conteneurs d'Azure App Service s'intègre de manière transparente à l'image appsvc, prenant en charge une mise à l'échelle flexible, une administration sécurisée et une mise en cache efficace. Cela en fait un choix idéal pour héberger des applications Drupal dans un environnement cloud moderne.