Ghost sur Azure Container Apps  : Containers serverless pour chasser les fantômes du passé

Ghost sur Azure Container Apps : Containers serverless pour chasser les fantômes du passé

Résumé des épisodes précédents : J'avais refait mon blog en 2020 avec Ghost comme headless CMS hébergé sur Azure App Service for containers d'un coté et une Github action qui générait un site Gatsby statique hébergé sur Github Pages.

L'année dernière j'avais pu mettre à jour mon instance vers la V4 de Ghost, en utilisant l'image docker officielle de ghost j'avais les mises à jours régulières de nouvelles version sans effort. En cas de montée de version les modifications de base de données sont appliqués automatiquement au démarrage de l'image docker.
Malheureusement un jour cette belle évolution s'est vu bloqué à la version 4.37 de Ghost un bug dans le driver mysql de node  qui était dans les versions ultérieures empêchait toute connexion sécurisée à un serveur flexible Azure Database pour MySQL et conduisait irrémédiablement à un crash et à une corruption de la base de données.

Le fix à pu être intégré en début d'année dans Ghost, mais le Cms était passé déjà depuis plusieurs mois à la v5 tout cela rendant impossible une upgrade de mon instance de Ghost . Une seule solution s'offrait donc à moi pour réaliser cette mise à jour, recréer une nouvelle instance et importer tout le contenu de la précédente instance.

Une bonne occasion de chasser les fantômes du passé  pour un hébergement plus moderne avec Azure Container Apps qui pourra héberger mon Blog Ghost de manière serverless.  
Vous ne connaissez pas Azure Container Apps ?  J'ai fait plusieurs présentations l'année dernière dessus, et notamment je l'avais présenté lors d'un précédent meetup virtuel avec Cédric Leblond dont le replay est disponible :

Donc Azure Container Apps à de multiples avantages dans la gestion de conteneurs dont le scale to zero qui permet de réduire les frais d'hébergement pour le Cms puisqu'il n'est utilisé que quand j'écris des articles.

Containers Ghost in the Shell - made with StableDiifusion 


J'ai partagé ci-dessous sur Github le script de déploiement qui permet de créer simplement son instance Ghost ainsi que tout l'infra nécessaire.



Exécuter ce script en ayant au préalable rempli les variables pour créer  un compte de stockage pour héberger les images, un un serveur flexible Azure Database pour MySQL  ainsi qu'un environnement Azure Container Apps et une instance Ghost dans une application pour container.


Dernière étape monter le stockage Azure comme volume Docker dans votre Container, pour l'instant cette fonctionnalité est encore en preview. Pour cela éditer le fichier yaml généré à la fin du script  rajoutez y la section volumeMounts

  volumeMounts:
  - volumeName: azure-files-volume
    mountPath: /var/lib/ghost/content

ainsi que la définition des volumes :

volumes:
- name: azure-files-volume
  storageType: AzureFile
  storageName: ghostinzecloudaca-files

Et voila si c'était une migration comme dans mon cas, il suffit de monter le partage Azure dans votre appservice pour recopier les fichiers images.