Exploration du modèle de fonctionnalités Sling: Partie 3 – Agrégats personnalisés

Dans le premier article de la série Exploring the Sling Feature Model j'ai discuté du processus de conversion de l'application Sling CMS du Sling Provisioning Model au Sling Feature Model. Alors, comment cela s'applique-t-il à vos applications personnalisées?
Pour illustrer ce propos, convertissons mon site personnel, danklco.com actuellement géré via Sling CMS, en Feature Model.
Ça vaut le coup notant que je pourrais continuer à faire fonctionner mon site tel quel, en utilisant un pot exécutable Sling CMS pré-construit, mais que mon objectif est d'exécuter mon site dans Kubernetes pour simplifier les mises à niveau, le déploiement et la gestion.
Étape 1 : Structure du projet Refactor
Actuellement, le code de mon site Web personnel est un bundle OSGi unique que je déploie avec Github Actions . Pour prendre en charge le modèle de fonctionnalité Sling, je vais convertir le projet en un projet multi-module et ajouter un nouveau sous-projet pour ma fonctionnalité.
La nouvelle structure du projet ressemblera à:
/ mysite
/ bundle
/ feature
/ images
Étape 2: Générer des fonctionnalités
La fonctionnalité personnalisée est assez simple, définissant mes ensembles de codes et configurations personnalisés. Un certain nombre de paramètres sont fournis afin qu'ils puissent être modifiés et je ne mets pas de secrets dans le code:
{ "bundles": [ { "id": "com.danklco:com.danklco.slingcms.plugins.disqus:1.1-SNAPSHOT", "start-order": "20" }, { "id": "com.danklco:com.danklco.slingcms.plugins.twitter:1.0", "start-order": "20" }, { "id": "com.danklco:com.danklco.site.cna.bundle:1.0.0-SNAPSHOT", "start-order": "20" } ], "configurations": { "org.apache.sling.cms.core.analytics.impl.GeoLocatorImpl": { "scheduler.expression": "0 0 0? * WED", "licenseKey": "$ {MAXMIND_LICENSE_KEY}" }, "org.apache.sling.cms.reference.impl.SearchServiceImpl": { "searchServiceUsername": "dklco-com-search-user" }, "org.apache.sling.commons.crypto.internal.FilePasswordProvider ~ default": { "noms": [ "default" ], "chemin": "/ opt / slingcms / passwd" }, "org.apache.sling.commons.crypto.jasypt.internal.JasyptRandomIvGeneratorRegistrar ~ default": { "algorithme": "SHA1PRNG" }, "org.apache.sling.commons.crypto.jasypt.internal.JasyptRandomSaltGeneratorRegistrar ~ default": { "algorithme": "SHA1PRNG" }, "org.apache.sling.commons.crypto.jasypt.internal.JasyptStandardPBEStringCryptoService ~ par défaut": { "algorithme": "PBEWITHHMACSHA512ANDAES_256", "saltGenerator.target": "", "securityProviderName": "", "ivGenerator.target": "", "securityProvider.target": "", "keyObtentionIterations": 1 000, "noms": [ "default" ], "stringOutputType": "base64" }, "org.apache.sling.commons.messaging.mail.internal.SimpleMailService ~ default": { "connectionListeners.target": "", "transportListeners.target": "", "username": "$ {SMTP_USERNAME}", "mail.smtps.from": "$ {SMTP_USERNAME}", "messageIdProvider.target": "", "mail.smtps.host": "$ {SMTP_HOST}", "noms": [ "default" ], "mot de passe": "$ {SMTP_ENC_PASSWORD}", "mail.smtps.port": 465, "cryptoService.target": "", "threadpool.name": "par défaut" }, "org.apache.sling.commons.messaging.mail.internal.SimpleMessageIdProvider ~ default": { "hôte": "danklco.com", "noms": [ "default" ] } } }
Pour créer un modèle utilisable, je devrai combiner le modèle Sling CMS et mon modèle personnalisé, ce qui peut être réalisé avec le modèle Sling Feature . Pour prendre en charge le Composite Node Store je souhaite générer deux agrégats distincts, l'un pour l'amorçage et l'autre pour l'exécution de l'instance.
Étant donné que le modèle de fonctionnalités Sling, JSON résoudra les dépendances au moment de l'exécution à partir d'Apache Maven, nous souhaitons également générer des archives de fonctionnalités ou des fichiers FAR qui regroupent les modèles avec leurs dépendances.
org.apache.sling slingfeature-maven-plugin 1.3.0 true org.apache.felix org.apache.felix.framework 6.0.3 danklco-com-seed ** / *. Json org.apache.sling org.apache.sling.cms.feature 0.16.3-SNAPSHOT slingcms- composite-seed slingosgifeature org.apache.sling org.apache.sling.cms.feature 0.16.3-SNAPSHOT standalone slingosgifeature DanKlco.com [19659036] danklco-com-runtime ** / *. Json org.apache.sling org.apache.sling.cms.feature 0.16.3-SNAPSHOT slingcms-composite -runtime slingosgifeature org.apache.sling org.apache.sling.cms.feature 0.16.3-SNAPSHOT standalone slingosgifeature DanKlco.com ] danklco-com-seed danklco-com-runtime danklco-com-seed-far danklco-com-seed danklco- com-runtime-far danklco-com-runtime aggregate-features prepare-package aggregate-features analy-features attach-features attach-featurearchives [19659061] MAXMIND_LICENSE_KEY, SMTP_HOST, SMTP_USERNAME, SMTP_ENC_PASSWORD
Étape 3: Créer des images Docker
Étant donné que l'objectif est de l'exécuter dans Kubernetes, nous allons créer des images Docker pour exécuter Sling CMS et Apache Web serveur. Puisque j'exécute un serveur allégé, je souhaite l'exécuter en tant qu'instance autonome à l'aide du référentiel composite afin que le magasin de données persiste entre les instances.
Pour remplir des variables dans les images et coordonner la construction complète, nous utiliserons Apache Maven pour traiter les fichiers Docker et les fichiers d'entrée comme des artefacts Maven et lancer la construction du docker. Contrairement à la version Sling CMS, nous n'utilisons pas Apache Maven pour télécharger les artefacts dans la version Docker, nous les pré-récupérerons lors de la construction maven et les fournirons à la version Docker.
Side Note – Variables
]
Un défi à noter lorsque vous essayez de reproduire une instance réelle, il y a un certain nombre de variables nécessaires pour que l'application fonctionne réellement. Pour mes tests locaux, j'ai un script bash pour fournir toutes les propriétés requises à Maven, mais comme ils incluent des secrets comme des mots de passe, je ne les ai pas mis dans le contrôle de code source.
Regardez-le en action!
Voir quelque chose fonctionner est un travail de mille mots, alors regardez ce GIF du processus de construction en action:
et consultez le code sur GitHub: https : //github.com/klcodanr/danklco.com-site/tree/cloud-native-sling
Et maintenant?
Tout cela mène à un Cloud Native entièrement opérationnel Instance du CMS Apache Sling dans Kubernetes, mais avant cela, mon prochain article va parler de l'utilisation de Sling Content Distribution et de Sling Discovery pour prendre en charge la publication de contenu entre les instances du CMS Author et Renderer Apache Sling. Revenez bientôt!
Source link