WordPress est un puissant système de gestion de contenu (CMS) qui peut servir de base à différents types de sites et d’applications. Il utilise une « architecture monolithique » typique, mais au fur et à mesure que le site se développe, cette architecture peut ne pas être la mieux adaptée. C’est là qu’une « architecture micro-services » peut s’avérer bénéfique.

Dans cet article, nous allons explorer comment vous pouvez construire des applications web WordPress en utilisant une architecture micro-services. Nous présenterons également l’extension Create Block Theme et discuterons de la manière dont cette solution passionnante s’intègre dans votre développement.

Ce que sont les micro-services

Avant de créer une application web, vous devez comprendre ce que sont les micro-services et en quoi ils diffèrent des architectures monolithiques.

Avec une architecture monolithique, il existe un couplage étroit entre tous les composants d’une application. Elle fonctionne essentiellement comme un service unique. C’est une façon simple de développer une application, mais la maintenance et l’évolutivité peuvent devenir un défi au fur et à mesure que l’application gagne en complexité.

En revanche, les micro-services vous aident à décomposer l’application en une collection de services plus petits. Chaque service est indépendant les uns des autres en ce qui concerne le développement, le déploiement et la mise à l’échelle.

Chaque service gère une tâche spécifique et communique avec les autres services par l’intermédiaire d’une interface de programmation d’applications (API). Prenons l’exemple d’un site de commerce électronique typique, avec panier, traitement des commandes, page produit, etc.

Le site web de DARTDrones montrant l'une de ses pages de commerce électronique.
Le site web de DARTDrones montrant l’une de ses pages de commerce électronique.

Dans une architecture monolithique, toutes ces fonctionnalités feraient partie d’une seule grande application. WordPress est monolithique, et l’utilisation de Woo comme plateforme de commerce électronique en est un excellent exemple.

Cependant, la mise en œuvre d’une architecture micro-services peut vous permettre d’utiliser la bonne technologie pour chaque tâche. Par exemple, vous pourriez utiliser le meilleur CMS de WordPress pour votre marketing de contenu. Adobe Commerce pourrait être votre système de gestion des produits. Une solution de paiement telle que Bolt pourrait répondre à vos besoins.

Le site web de Bolt.
Le site web de Bolt.

Il est possible de coller ces éléments ensemble grâce aux micro-services. Voyons maintenant plus en détail pourquoi les micro-services doivent être pris en compte dans votre prochain projet.

Ce qui distingue les micro-services des architectures monolithiques

L’argumentaire de haut niveau des micro-services est la façon dont vous pouvez combiner différentes technologies et différents outils pour créer un tout. Toutefois, d’autres caractéristiques plus profondes méritent d’être soulignées :

  • Découplage. Chaque service conserve son indépendance. Cela signifie que vous pouvez utiliser la meilleure technologie pour chaque tâche plutôt que d’être confronté à des frameworks inadaptés.
  • Autonomie. Par extension, les services que vous intégrez n’ont pas besoin de s’appuyer les uns sur les autres pour fonctionner de manière performante.
  • Spécialisation. Bien entendu, chaque service se concentrera sur sa propre tâche, ce qui aura également un impact sur les performances.
  • Résilience. Une partie de cet atout inhérent et performant réside dans le fait qu’une défaillance d’un service n’entrainera pas l’arrêt de l’ensemble de votre site.

Au-delà de ces aspects, l’utilisation de micro-services présente encore d’autres avantages :

  • L’évolutivité. Vous êtes en mesure de faire évoluer les services individuels en fonction des besoins de chacun sans affecter le reste de votre application.
  • Flexibilité. Nous avons déjà expliqué brièvement comment vos services peuvent utiliser la meilleure technologie pour leur travail. Cela s’étend même aux langages de programmation que vous utilisez pour les créer.
  • Développement plus rapide. Vous pouvez développer plus rapidement de petits services ciblés, mieux comprendre la fonctionnalité de votre service et maintenir le système plus facilement.
  • Meilleure isolation des erreurs. Grâce à la configuration « modulaire », vous pouvez isoler un service s’il tombe en panne sans affecter vos autres services.

D’un autre côté, les micro-services peuvent introduire une certaine complexité au niveau de la communication, de la cohérence des données et de la gestion des systèmes distribués. Vous devez donc évaluer soigneusement les besoins de votre application. En résumé, vous devez prendre en compte les avantages et les inconvénients avant de décider d’utiliser des micro-services.

Les composants d’une architecture de micro-services

Comme vous vous en doutez, une architecture de micro-services peut se composer de plusieurs éléments. Ces « rouages » fonctionnent ensemble dans l’ensemble de la « roue » pour fournir une application évolutive et facile à maintenir.

En tant que tels, certains composants sont essentiels à une mise en œuvre harmonieuse :

  • Passerelle API : Il s’agit du point d’entrée pour toutes les demandes des clients. Elle transfère ces demandes vers les micro-services appropriés. Elle peut également gérer des tâches telles que la limitation du débit et l’authentification.
  • Découverte des services : Vous devrez employer une méthode dynamique pour permettre aux micro-services de se découvrir et de communiquer entre eux. Des outils tels que Consul ou Eureka peuvent vous aider à cet égard.
  • Conteneurisation : Il est courant d’empaqueter et de déployer les micro-services sous forme de conteneurs à l’aide d’outils tels que Docker. C’est ainsi que vous assurez l’isolation de chaque service.
  • Orchestration : À mesure que vous ajoutez des micro-services à votre application, leur gestion devient plus complexe. Un outil tel que Kubernetes peut vous aider à automatiser cette gestion des services.
  • Mise en cache : les mécanismes de mise en cache tels que Redis ou Memcached améliorent souvent les performances. Cela peut s’avérer crucial, étant donné la plus grande sollicitation de vos services backend et de vos bases de données.
  • Messagerie : Bien entendu, vos services doivent également se parler entre eux. C’est le rôle des solutions de messagerie « asynchrones » telles que RabbitMQ ou Apache Kafka. Ces « courtiers de messages » permettent un couplage lâche entre vos micro-services.

Les outils ne sont toutefois qu’un aspect de votre configuration. Il y a d’autres considérations à prendre en compte, comme la manière dont vous concevrez chaque micro-service au sein de l’architecture complète.

Modèles de conception pour les micro-services

Vos modèles de conception pour les micro-services sont tout aussi importants ici qu’ailleurs dans votre flux de travail de développement. Compte tenu de la complexité potentielle de votre application, il est important de déterminer les modèles qui auront le plus d’impact. Nous pouvons en citer trois :

  • Base de données par service : Chaque micro-service utilise sa propre base de données dédiée, ce qui favorise l’isolation et l’autonomie des données.
  • Composition de l’API : Vous pouvez composer des micro-services pour créer des services ou des API de niveau supérieur. Cette flexibilité et cette réutilisation constituent un avantage majeur.
  • Architecture pilotée par les évènements : Ici, les services communiquent par le biais d’évènements. Cela facilite un couplage plus lâche et un traitement asynchrone.

Il est également essentiel de prendre en compte les modèles de conception spécifiques aux outils que vous utiliserez pour construire votre architecture. Par exemple, Docker et Kubernetes ont tous deux des modèles typiques que vous devrez prendre en compte parallèlement à la conception globale de votre architecture.

Cependant, comprenez que chaque composant n’a pas besoin d’être un micro-service. La bonne idée est de commencer par les services clés et de faire évoluer l’architecture au fil du temps. Nous reviendrons plus tard sur ce point en détail. Tout d’abord, nous devrions voir comment développer le frontend.

Présentation du plugin Create Block Theme

WordPress figurera probablement quelque part dans votre architecture, étant donné qu’il est excellent à bien des égards. L’un d’entre eux est sa facilité d’utilisation sur le frontend. Les thèmes sont une partie essentielle de la plateforme, et créer les vôtres est beaucoup plus facile maintenant qu’il y a des extensions telles que Create Block Theme.

L'image d'en-tête de Create Block Theme sur WordPress.org
L’image d’en-tête de Create Block Theme sur WordPress.org

Cette extension est l’héritière spirituelle du thème de démarrage Underscores, mais elle est entièrement compatible avec l’édition complète du site (FSE). Vous pouvez créer un thème de départ rapidement, exploiter toute la puissance de l’éditeur et bénéficier de toutes les options de personnalisation. Elle fonctionne comme une extension WordPress classique, avec la possibilité de l’exporter ultérieurement en tant que thème indépendant.

L’utilisation de l’extension Create Block Theme dans le cadre d’une architecture de micro-services permet de « coller » l’ensemble. Par exemple, vous pouvez utiliser des compositions de bloc et des blocs réutilisables sur différents sites WordPress. Tout en favorisant la réutilisation et la cohérence du code, cela permet également d’unifier tous les services individuels que vous utilisez.

Nous explorerons les spécificités de l’utilisation de Create Block Theme plus loin dans cet article. Pour l’instant, discutons de WordPress headless et de la façon dont les micro-services peuvent l’influencer.

L’intersection entre WordPress headless et une architecture micro-services

Si vous souhaitez découpler le frontend et le backend de WordPress, les micro-services peuvent être une étape naturelle. Dans le cas d’un WordPress headless tête typique, la plateforme sert uniquement à la gestion de contenu. Il se peut qu’elle soit utilisée comme une API.

En combinant WordPress headless avec une architecture de micro-services, vous pouvez :

  • Exploiter l’API REST de WordPress. WordPress fournit une API REST intégrée qui vous permet de récupérer et de manipuler le contenu de manière programmatique. Vous pouvez utiliser cette API pour intégrer vos micro-services à WordPress.
  • Bénéficier d’une évolutivité indépendante de vos frontend et backend. Avec deux parties indépendantes de votre site, vous pouvez faire évoluer les deux et obtenir de meilleures performances. Malgré la complexité, vous obtenez en fait de la flexibilité.

Ensuite, nous voulons nous concentrer un peu plus sur l’API REST. C’est ainsi que vous consommerez les micro-services, et c’est donc un élément essentiel de toute la chaine.

Les micro-services et l’API REST de WordPress

L’API REST de WordPress joue un rôle crucial dans l’intégration entre votre site et les micro-services. Ses points de terminaison vous permettent de récupérer et de manipuler les articles, les pages, les utilisateurs, les taxonomies, etc. de WordPress en utilisant des données de sortie en JSON.

[
  {
    "id": 1,
    "date": "2020-04-01T10:30:00",
    "date_gmt": "2020-04-01T14:30:00",
    "guid": {
      "rendered": "https://example.com/?p=1"
    },
    "modified": "2020-04-01T10:30:00",
    "modified_gmt": "2020-04-01T14:30:00",
    "slug": "hello-world",
    "status": "publish",
    "type": "post",
    "link": "https://example.com/hello-world/",
    "title": {
      "rendered": "Hello World"
    },
    …

En tant que telle, l’API REST est la plaque tournante de tous les autres services de l’architecture. Cela signifie que vous devez choisir les services du site actuel à extraire en tant que micro-services. Nous examinerons ce point plus en détail dans la suite de cet article.

En résumé, la clé est d’identifier les fonctionnalités et les responsabilités distinctes au sein de votre application web. À partir de là, vous pouvez les diviser en micro-services indépendants, ciblés et déployables.

Construire une application web avec Create Block Theme et des micro-services

Le reste de cet article couvre les bases des micro-services et de WordPress headless. Il va couvrir beaucoup de choses en termes holistiques, car le processus réel sera spécifique à vos besoins.

Néanmoins, plongeons dans le processus de construction d’une application web en utilisant les micro-services et l’extension Create Block Theme. La première étape consiste à mettre en place votre environnement de développement.

1. Mettre en place un environnement de développement

Toute application commence par un espace pour la créer. Vous avez donc besoin d’un environnement de développement. Il existe deux emplacements pour votre espace de développement : votre ordinateur local et votre serveur.

Il existe de nombreuses façons de mettre en place un environnement de développement local, mais nous recommandons (naturellement) DevKinsta :

Le logo DevKinsta.
Le logo DevKinsta.

Nous recommandons également un environnement de staging, car vous avez besoin d’un moyen de tester les changements avant de les déployer. Si vous choisissez DevKinsta et que vous êtes client de Kinsta, vous bénéficiez d’une plus grande connectivité avec votre serveur :

L'écran Info du site de DevKinsta.
L’écran Info du site de DevKinsta.

DevKinsta installera Docker pour vous, ce qui permet de cocher une autre tâche sur votre liste. Vous voudrez peut-être utiliser Kubernetes pour l’orchestration, c’est donc le moment de l’installer. Kinsta l’utilise pour les applications d’hébergement de bases de données et d’autres tâches, et vous pouvez le télécharger dans Docker Desktop :

Les réglages Kubernetes dans Docker Dashboard.
Les réglages Kubernetes dans Docker Dashboard.

À partir d’ici, vous voudrez également configurer tous les autres frameworks dont vous avez besoin pour développer votre thème. Cependant, vous ne pourrez rien faire sans l’extension Create Block Theme, alors regardons-la maintenant.

2. Configurer le plugin Create Block Theme

Une fois votre environnement de développement mis en place, vous pouvez commencer à travailler avec l’extension Create Block Theme pour créer votre thème personnalisé basé sur des blocs. Vous aurez également besoin des éléments suivants :

  • Un site web WordPress avec lequel travailler.
  • L’éditeur de code que vous souhaitez utiliser.
  • L’extension Create Block Theme.

Vous pouvez installer l’extension de la manière habituelle de WordPress. À partir de là, cliquez sur le lien Apparence > Crate Block Theme dans WordPress :

Le tableau de bord de WordPress affiche le lien Create Block Theme.
Le tableau de bord de WordPress affiche le lien Create Block Theme.

Par ailleurs, si vous consultez l’onglet Apparence, vous pouvez repérer l’option Gérer les polices du thème. Créer un thème basé sur des blocs donne également accès à cette option, qui est essentiellement la fonction Bibliothèque de polices de WordPress 6.5.

Quoi qu’il en soit, sur l’écran Créer un thème basé sur des blocs, vous devriez voir une liste d’options pour générer un nouveau thème. Nous ne les passerons pas toutes en revue ici, mais nous allons choisir de cloner Twenty Twenty-Four. Quoi qu’il en soit, une série d’options et de champs s’affichent :

L'écran de réglages Create Block Theme.
L’écran de réglages Create Block Theme.

Si vous le remarquez, ces champs deviendront les champs d’identité du thème dans votre fichier style.css. Ils sont simples et consistent à choisir un nom, une capture d’écran, une URL et quelques étiquettes pour le répertoire des thèmes WordPress.

Une fois que vous avez cliqué pour confirmer, allez à l’écran Apparence > Thèmes et vous verrez votre nouveau thème prêt à l’emploi :

L'écran Thèmes WordPress.
L’écran Thèmes WordPress.

Dans certains cas, vous téléchargerez un fichier ZIP de votre thème, que vous devrez téléverser vers WordPress. Notez que vous pouvez également exporter le thème, mais pour notre cas d’utilisation, nous ne le ferons pas pour l’instant.

Conseils pour configurer et utiliser Create Block Theme

Nous n’allons pas non plus nous étendre sur la personnalisation de votre nouveau thème basé sur des blocs, car cela dépasse le cadre de cet article. Cependant, voici quelques conseils pour l’utilisation de Create Block Theme :

  • Vos modifications peuvent se faire à deux endroits. Vous pouvez utiliser l’option Styles globaux dans l’éditeur de site complet ou personnaliser le fichier theme.json.
  • C’est une bonne idée de créer un bloc pour le micro-service que vous avez choisi. Nous y reviendrons plus tard.
  • L’option Créer un thème de bloc vous permet de générer un thème enfant basé sur le thème actif actuel. Cependant, votre choix dépendra de vos objectifs.

Parlons un peu plus du dernier point. S’il s’agit d’un thème à créer et à distribuer, vous voudrez travailler à l’intérieur du thème parent. Pour votre propre usage, vous pouvez vous contenter de personnaliser le thème enfant. En règle générale, moins un thème est « peuplé » au départ, plus vous devriez travailler avec le thème parent.

3. Extraction des micro-services choisis

Une fois que votre thème à base de blocs est prêt à fonctionner, il est temps d’examiner vos micro-services de plus près. L’une des décisions clés que vous devrez prendre concerne les services qui deviendront « micro »

Il peut s’agir d’une question complexe et subjective à laquelle vos propres besoins répondront. Il y a cependant quelques facteurs à prendre en compte :

  • Les capacités de votre site : Examinez toute fonctionnalité distincte que votre site offre et envisagez de la diviser en un micro-service distinct, comme la fonctionnalité de paiement.
  • Évolutivité indépendante : Un service existant qui repose sur une mise à l’échelle indépendante sera un bon candidat pour les micro-services. La mise en cache en est un exemple.
  • Diversité technologique : Si vous devez vous éloigner de l’architecture PHP de WordPress, il s’agit là encore d’un autre candidat aux micro-services. Cela peut être le cas pour des plateformes de commerce électronique ou des composants backend spécifiques.
  • Isolation des données : Les services ayant des besoins de stockage de données personnalisés peuvent être des micro-services. C’est également le cas si ces services n’ont pas besoin de partager des données avec d’autres.

À notre avis, c’est une bonne idée de créer des micro-services qui fournissent une fonctionnalité API spécifique. Il peut s’agir de la recherche, du traitement des paiements ou de l’authentification. Si ces services peuvent réagir avec d’autres API primaires et tierces, ils deviennent plus flexibles et plus utiles.

Développer et déployer vos micro-services

Pour travailler sur vos micro-services et éventuellement les déployer, vous devrez vous appuyer sur d’autres outils. Voici quelques considérations et outils clés que vous pouvez utiliser :

  • Docker sera souvent le moyen de conteneuriser vos micro-services. Il regroupe le micro-service et ses dépendances, ce qui facilite le déploiement et la mise à l’échelle.
  • Chaque micro-service aura également besoin d’un fichier Docker. Il doit spécifier les dépendances, les configurations et l’environnement d’exécution dont vous avez besoin.
  • Utilisez Kubernetes pour l’orchestration et la gestion des conteneurs. Kinsta fournit une plateforme puissante avec un support intégré pour Kubernetes.
  • Les pipelines d’intégration et de déploiement continus (CI/CD) peuvent vous permettre d’automatiser la construction, les tests et le déploiement. Des outils tels que GitLab et Travis CI peuvent vous aider à rationaliser vos processus CI/CD.
  • Les fonctions sans serveur n’ont pas besoin d’un serveur à part entière, elles sont donc idéales pour les micro-services. Des plateformes telles que AWS Lambda, Google Cloud Functions ou Azure Functions vous permettent d’exécuter du code sans avoir à provisionner ou à gérer des serveurs.
  • Les passerelles API constituent un point d’entrée unique pour vos micro-services. Des outils tels que Kong ou Amazon API Gateway peuvent vous aider à gérer et à sécuriser vos API. Ils peuvent également prendre en charge des tâches telles que l’authentification, la limitation du débit et le routage des demandes.

À ce stade, vous disposerez d’un site WordPress et d’un micro-service indépendants l’un de l’autre. La dernière étape consiste à les intégrer.

4. Intégrer les micro-services à WordPress

Une fois que vous avez développé et déployé vos micro-services, vous devez les intégrer à WordPress. Pour cela, vous ferez des appels d’API depuis WordPress vers les points de terminaison que votre micro-service expose. Pour cela, vous devez connaitre l’API REST dans ses moindres détails.

La façon typique de le faire dans WordPress est avec wp_remote_get() ou wp_remote_post(). Cela vous permettra d’envoyer des requêtes HTTP et de gérer les réponses. Voici un exemple de code qui montre comment tout cela s’articule :

// API endpoint URL

$api_url = 'https://api.example.com/endpoint';

// API request parameters

$params = array(
    'param1' => 'value1',
    'param2' => 'value2',
);


// Make the API request using wp_remote_get
$response = wp_remote_get(add_query_arg($params, $api_url));

// Check if the request was successful
if (is_wp_error($response)) {
    // Handle the error
    $error_message = $response->get_error_message();

    // Log or display the error message
} else {
    // Process the API response
    $response_body = wp_remote_retrieve_body($response);

    $data = json_decode($response_body, true);

    // Use the retrieved data as needed

    // ...
}

Les micro-services bénéficient souvent d’une récupération asynchrone des données pour éviter de bloquer le thread principal. WordPress peut combiner deux éléments pour y parvenir. Vous pouvez utiliser le package API Fetch, ainsi que le support de async et defer introduit dans WordPress 6.3. Votre code pourrait ressembler à quelque chose de similaire à ce qui suit :

import apiFetch from '@wordpress/api-fetch';

// Microservice API endpoint URL
const microserviceUrl = 'https://api.example.com/microservice';
...


// Make the API request to the microservice
apiFetch({
  path: microserviceUrl,
  method: 'GET',
  data: params,
})

  .then((response) => {
    // Process the response
    console.log(response);

    // Use the retrieved data from the microservice

    // ...
  })
...

Vous pouvez également envisager AJAX pour effectuer des mises à jour dynamiques de l’interface utilisateur (UI).

Bien entendu, une authentification et des mesures de sécurité appropirées sont également cruciales. L’API REST de WordPress comprend plusieurs façons d’authentifier les sessions, comme l’utilisation de cookies, de jetons Web JSON (JWT) ou de mots de passe d’application. Compte tenu de la dépendance à l’égard de solutions externes, il est essentiel que vos micro-services et votre site soient sécurisés.

Étant donné que nous utilisons un thème de blocs personnalisé, il est logique d’exploiter cette fonctionnalité. En ajoutant votre micro-service à un bloc, vous pouvez l’inclure presque partout sur votre site. Pour aller plus loin, vous pouvez même inclure cette fonctionnalité dans une extension.

Le processus comporte trois éléments : l’enregistrement du bloc, le rendu du contenu et le traitement des données. JavaScript est votre langage de prédilection, et la fonction registerBlockType se charge de l’enregistrement et du rendu :

// JavaScript function that builds the Block to enable access within the Block Editor.
( function( blocks, element ) {
    var el = element.createElement;

    blocks.registerBlockType( 'my-micro/stripe-api', {
        title: 'Stripe Payment Gateway',
        icon: 'dashicons-cart',
        category: 'embed',

        edit: function() {
            return el(
                'div',
                {},
                '' // Create the visual elements of the microservice to display within the Block Editor.
            );
        },
…

Il s’agit d’un exemple très basique d’enregistrement d’un bloc, et tout ce qui va au-delà dépasse le cadre de cet article. Cependant, vous pouvez voir qu’il est facile de combiner l’extension Create Block Theme, les micro-services et WordPress. Si vous utilisez le bon hébergeur, vous disposez d’un autre moyen d’ajouter de la valeur à votre architecture de micro-services.

Utiliser Kinsta pour gérer et faire évoluer votre site WordPress et vos micro-services

L’ensemble de l’écosystème de Kinsta est bien adapté à la gestion des sites WordPress à l’aide d’une architecture de micro-services. Au cœur de cet écosystème se trouve l’hébergement d’applications. Cela peut faciliter le déploiement de micro-services conteneurisés et l’utilisation des autres offres de Kinsta pour les maintenir.

Par exemple, la mise à l’échelle automatique gardera un œil sur vos ressources pour aider à gérer les pics de trafic. Cela signifie que vos micro-services peuvent évoluer à la hausse ou à la baisse en fonction de la demande. Vous bénéficiez des avantages en termes de performances tout en limitant les couts.

Kinsta propose un hébergement infogéré pour toute une série de types de bases de données :

Ce dernier a plusieurs cas d’utilisation différents, comme un cache en mémoire, un courtier de messages, une base de données de vecteurs et de documents, et bien d’autres choses encore – le tout sans avoir besoin de SQL.

Le logo Redis.
Le logo Redis.

Cette variété signifie que Kinsta peut gérer à la fois vos bases de données WordPress et vos bases de données de micro-services sans se casser la tête. En plus de son meilleur cache de classe, de la prise en charge de Docker et de Kubernetes, du tableau de bord de MyKinsta et plus encore, vous avez le paquet complet pour héberger vos micro-services aux côtés de WordPress.

Résumé

WordPress est monolithique, mais cela ne l’empêche pas d’intégrer des micro-services. Cela peut avoir de nombreux avantages, tels que l’amélioration de l’évolutivité, la flexibilité et un développement plus rapide.

L’extension Create Block Theme vous permet de créer une base de code propre et sécurisée pour le reste de votre projet. Les micro-services peuvent introduire de la complexité dans votre site. L’utilisation d’un thème de bloc personnalisé vous permet de mettre en œuvre ces services de la manière la mieux adaptée à vos besoins. Si vous combinez cela avec des outils de développement tels que DevKinsta et l’hébergement d’applications Kinsta, vous disposez de la base idéale pour créer des applications web puissantes et modernes.

L’architecture micro-services vous semble-t-elle parfaitement adaptée à l’extension Create Block Theme ? Faites-nous part de vos réflexions et de vos expériences dans la section des commentaires ci-dessous !

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).