Fermer

octobre 28, 2020

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"
            ]
        }
    }
} 

 Plates-formes et technologie - Un guide des chefs d'entreprise sur les principales tendances du cloud

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 </classifier>
                <filesinclude> ** / *. Json </filesinclude>
                <includeartifact>
                    <groupid> org.apache.sling </groupid>
                    <artifactid> org.apache.sling.cms.feature </artifactid>
                    <version> 0.16.3-SNAPSHOT </version>
                    <classifier> slingcms-composite -runtime </classifier>
                    <type> slingosgifeature </type>
                </includeartifact>
                <includeartifact>
                    <groupid> org.apache.sling </groupid>
                    <artifactid> org.apache.sling.cms.feature </artifactid>
                    <version> 0.16.3-SNAPSHOT </version>
                    <classifier> standalone </classifier>
                    <type> slingosgifeature </type>
                </includeartifact>
                <title> 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:

 Créer des applications cloud natives avec Apache Sling CMS

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