Comment utiliser Puppet pour gérer des thèmes et des plugins WordPress sur Ubuntu 14.04

introduction

Si vous êtes un administrateur de site Web qui gère plusieurs instances de WordPress, vous saurez à quel point il est répétitif de garder tous vos thèmes et plugins à jour. De plus, avec autant de thèmes et de plugins nouveaux et intéressants qui apparaissent tous les deux jours, vous êtes obligé de vous retrouver à en installer et à en désinstaller beaucoup.

Dans ce didacticiel, vous apprendrez à utiliser des manifestes Puppet simples et WP-CLI pour automatiser des activités telles que l’installation, la suppression et la mise à jour de thèmes et de plugins WordPress.

Conditions préalables

Vous aurez besoin des éléments suivants:

  • Une goutte Ubuntu 14.04

  • Un utilisateur sudo

  • Compréhension de base du fonctionnement des modules et des manifestes de Puppet. Vous pouvez vous référer à ce tutoriel pour améliorer vos compétences dans Puppet: Comment utiliser Puppet pour gérer Vos serveurs

  • WordPress 4.1 ou plus récent

  • Marionnette 3.7.1 ou plus récente

Utilisez ce tutoriel pour configurer WordPress et Puppet: https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-on-ubuntu-14 -04 [Comment créer un module de marionnettes pour automatiser l’installation de WordPress sur Ubuntu 14.04]

Étape 1 - Créer un nouveau module

Dans cette étape, nous allons construire sur l’installation WordPress vanille créée à l’adresse https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation- on-ubuntu-14-04 [le premier tutoriel].

Notre module utilisera WP-CLI (interface de ligne de commande WordPress) pour effectuer la plupart de ses opérations. Comme son nom l’indique, WP-CLI est un outil qui nous permet d’interagir avec WordPress en utilisant la ligne de commande (et les scripts) au lieu d’un navigateur.

Maintenant, créez un module qui nous permet d’interagir avec WP-CLI à l’aide de Puppet.

Entrez dans le répertoire des modules de marionnettes.

cd /etc/puppet/modules

Appelons le module + wordpress_manager +. Créez un nouveau répertoire pour cela.

sudo mkdir /etc/puppet/modules/wordpress_manager

Créez un répertoire nommé + manifestests + pour stocker tous ses manifestes.

sudo mkdir /etc/puppet/modules/wordpress_manager/manifests

Étape 2 - Créez un cours pour installer WP-CLI

Dans cette étape, nous automatiserons l’installation de WP-CLI. L’installation de WP-CLI doit être automatisée car elle doit être présente sur tous les serveurs exécutant WordPress.

Voici ce que nous faisons dans cette classe:

  • Assurez-vous que + curl + est installé. Cela est nécessaire pour télécharger la dernière version de WP-CLI.

  • Assurez-vous que + php5-cli est installé.

  • Téléchargez WP-CLI en utilisant + curl + et placez-le dans le répertoire + / usr / bin +.

  • Pour que WP-CLI soit exécutable, définissez son mode sur + 775 + ou `+ + + + + +.

Utilisez + nano + pour créer un nouveau fichier nommé + install.pp +.

sudo nano /etc/puppet/modules/wordpress_manager/manifests/install.pp

Ajoutez le code suivant à cela. Les commentaires en ligne devraient vous aider à comprendre ce que fait le code:

class wordpress_manager::install {

   # Install curl
   package { 'curl':
       ensure => latest
   }

   # Install php5-cli
   package { 'php5-cli':
       ensure => latest
   }

   # Download WP-CLI using curl
   exec { 'Install WP CLI':
       command => "/usr/bin/curl -o /usr/bin/wp-cli -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar",
       require => [ Package['curl'], Package['php5-cli'] ],
       creates => "/usr/bin/wp-cli"
   }

   # Change the mode of WP-CLI to a+x
   file { '/usr/bin/wp-cli':
       mode => "775",
       require => Exec['Install WP CLI']
   }

}

L’attribut + crée + de la commande + exec + permet de vérifier si WP-CLI a déjà été téléchargé. Sans cet attribut, Puppet téléchargera WP-CLI chaque fois que le module sera utilisé.

Étape 3 - Créer un type défini pour interagir avec WP-CLI

Pour gérer les thèmes, utilisez la commande + theme + de WP-CLI. Dans notre manifeste, nous utilisons les sous-commandes activer, supprimer, installer et mettre à jour avec la commande + theme a. De même, pour gérer les plugins, il faut utiliser la commande + plugin + de WP-CLI. Nous utilisons les sous-commandes activer, désactiver, installer, désinstaller et mettre à jour les commandes + plugin +.

Par conséquent, notre type défini nécessite les paramètres suivants:

  • + $ resource_types - Sa valeur sera soit` + plugin` ou + theme.

  • + $ action + - Ce sera l’une des sous-commandes.

  • + $ nom_ressource + - Le nom du plugin ou du thème.

  • + $ root_directory + - Ceci est nécessaire et important car la commande + wp-cli + doit être exécutée à partir du répertoire où WordPress est installé.

  • + $ user + - La valeur de ce paramètre doit être le nom d’utilisateur de l’utilisateur Unix propriétaire de l’instance WordPress.

Voici ce que nous faisons dans ce type:

  • Assurez-vous que WP-CLI est installé

  • Créer et exécuter la commande WP-CLI en fonction des paramètres reçus

Afin d’éviter les erreurs, ajoutez les restrictions suivantes à l’aide des attributs + moins + + et + onlyif + de la commande + exec + de Puppet:

  • Installez un élément uniquement s’il n’est pas déjà installé. La commande + is-installed + de WP-CLI permet de déterminer si l’élément est installé ou non.

  • Activer / désactiver / supprimer / désinstaller / mettre à jour un élément uniquement s’il est déjà installé.

Créez un nouveau fichier nommé + resource.pp +.

sudo nano /etc/puppet/modules/wordpress_manager/manifests/resource.pp

Ajoutez le code suivant à cela. Encore une fois, les commentaires en ligne devraient vous aider à comprendre ce que fait le code.

  • Note *: Par défaut, notre module utilisera + / var / www + comme répertoire d’installation de Wordpress et + root + en tant que propriétaire des fichiers Wordpress. Vous devrez peut-être modifier les valeurs des attributs + $ répertoire_racine + et + $ utilisateur + en haut du code pour refléter votre environnement.

define wordpress_manager::resource (
   $resource_name,
   $resource_type,
   $root_directory = "/var/www/",
   $action,
   $user = "root",
) {

   # Make sure WP_CLI is installed
   require wordpress_manager::install

   $wp_cli = "/usr/bin/wp-cli --allow-root"

   # Install the theme or plugin unless it is already installed.
   if $action == "install" {
       exec { "Install $resource_name":
           command => "$wp_cli $resource_type $action $resource_name",
           unless => "$wp_cli $resource_type is-installed $resource_name",
           cwd => $root_directory,
           user => $user
       }
   }

   # Activate or update the theme or plugin only if it is currently installed.
   if $action == "activate" or $action == "update" {
       exec { "$action $resource_name":
           command => "$wp_cli $resource_type $action $resource_name",
           onlyif => "$wp_cli $resource_type is-installed $resource_name",
           cwd => $root_directory,
           user => $user
       }
   }

   # Uninstall or deactivate a plugin only if it is currently installed.
   if $resource_type == "plugin" {
       if $action == "uninstall" or $action == "deactivate" {
           exec { "$action $resource_name":
               command => "$wp_cli plugin $action $resource_name",
               onlyif => "$wp_cli plugin is-installed $resource_name",
               cwd => $root_directory,
               user => $user
           }
       }
   }

   # Delete a theme only if it is currently installed.
   if $action == "delete" and $resource_type == "theme" {
       exec { "$action $resource_name":
           command => "$wp_cli theme $action $resource_name",
           onlyif => "$wp_cli theme is-installed $resource_name",
           cwd => $root_directory,
           user => $user
       }
   }

}

Nous utilisons l’indicateur + - allow-root + pour toutes les commandes WP-CLI de ce module. Il est nécessaire pour gérer les instances WordPress appartenant à root. Sans cet indicateur, toute tentative d’exécution de WP-CLI en tant que root échouera avec un message d’erreur indiquant:

Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under.

Notre module Marionnettes est maintenant prêt. Voici quelques exemples pour vous aider à comprendre comment l’utiliser.

Exemple 1 - Appliquer un nouveau thème WordPress

Utilisons notre module Puppet pour appliquer un nouveau thème WordPress à une occurrence de WordPress.

Par défaut, WordPress utilise le thème vingt-vingt-quinze +. Voici à quoi ça ressemble:

image: https: //assets.digitalocean.com/articles/puppet_wordpress/1.png [Apparence par défaut]

Installons et appliquons un nouveau thème nommé + expound +. Pour trouver plus de thèmes, vous pouvez parcourir le /WordPress’s Themes Directory.

Utilisez + nano + (ou l’éditeur de votre choix) pour créer un nouveau fichier nommé + manage_expound_theme.pp +.

nano /tmp/manage_expound_theme.pp

Ajoutez-y le code suivant:

wordpress_manager::resource { 'install expound':
   resource_name => ,
   resource_type => ,
   action =>
}

wordpress_manager::resource { 'activate expound':
   resource_name => ,
   resource_type => ,
   action => ,
   require => WordPress_manager::Resource['install expound']
}

Utilisez la commande + puppet apply + pour exécuter le manifeste.

sudo puppet apply /tmp/manage_expound_theme.pp

Une fois l’analyse terminée, le résultat devrait ressembler à ceci:

Notice: Compiled catalog for zona-virtualbox in environment production in 0.81 seconds
Notice: /Stage[main]/Main/WordPress_manager::Resource[install expound]/Exec[Install expound]/returns: executed successfully
Notice: /Stage[main]/Main/WordPress_manager::Resource[activate expound]/Exec[activate expound]/returns: executed successfully
Notice: Finished catalog run in 13.72 seconds

Visitez votre site WordPress à + ​​http: /// + pour voir le nouveau thème en action:

image: https: //assets.digitalocean.com/articles/puppet_wordpress/2.png [Thème Expound]

Exemple 2 - Supprimer un thème

Si vous souhaitez supprimer un thème, vous devez d’abord activer un autre thème. Par exemple, si vous souhaitez revenir au thème + vingtfifteen +, ouvrez à nouveau + manage_expound_theme.pp +:

nano /tmp/manage_expound_theme.pp

Supprimez tout le fichier et écrasez-le avec:

wordpress_manager::resource { 'activate twentyfifteen':
   resource_name => ,
   resource_type => ,
   action =>
}

wordpress_manager::resource { 'delete expound':
   resource_name => ,
   resource_type => ,
   action => ,
   require => WordPress_manager::Resource['activate twentyfifteen']
}

Appliquez à nouveau le manifeste.

sudo puppet apply /tmp/manage_expound_theme.pp

Vous pouvez maintenant visiter votre site WordPress à + ​​http: /// + pour voir le thème + vingtfifteen + appliqué.

Exemple 3 - Activer un plugin

Le plugin Akismet est installé par défaut, mais il n’est pas activé. Nous allons donc utiliser notre module Puppet pour activer le plugin + akismet + maintenant.

Créez un nouveau manifeste nommé + manage_akismet.pp +.

nano /tmp/manage_akismet.pp

Ajoutez-y le code suivant:

wordpress_manager::resource { 'activate akismet':
   resource_name => ,
   resource_type => ,
   action =>
}

Appliquez le manifeste.

sudo puppet apply /tmp/manage_akismet.pp

Vous pouvez vérifier si Akismet a été activé avec la commande + plugin list. Par défaut, notre module utilisera + / var / www + comme répertoire d’installation de WordPress, mais si celui-ci est différent pour votre environnement, vous pouvez modifier l’indicateur + - chemin + de manière appropriée.

wp-cli --allow-root --path=/var/www/ plugin list

Vous devriez voir une sortie semblable à:

+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| akismet |    | none   | 3.0.4   |
| hello   | inactive | none   | 1.6     |
+---------+----------+--------+---------+

Exemple 4 - Désinstaller un plugin

Avant de pouvoir désinstaller un plug-in, vous devez vous assurer qu’il n’est pas actif. Voici comment désinstaller + akismet +. Ouvrez + manage_akismet.pp +.

nano /tmp/manage_akismet.pp

Supprimez tout le fichier et écrasez-le avec:

wordpress_manager::resource { 'deactivate akismet':
   resource_name => ,
   resource_type => ,
   action =>
}

wordpress_manager::resource { 'uninstall akismet':
   resource_name => ,
   resource_type => ,
   action => ,
   require => WordPress_manager::Resource['deactivate akismet']
}

Relancez le manifeste.

sudo puppet apply /tmp/manage_akismet.pp

Maintenant, relancez la commande + plugin list.

wp-cli --allow-root --path=/var/www/ plugin list

Vous verrez qu’Akismet ne figure plus dans la liste.

+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| hello   | inactive | none   | 1.6     |
+---------+----------+--------+---------+

Conclusion

Vous savez maintenant comment gérer les plugins et les thèmes de votre instance WordPress à l’aide d’un simple module Puppet. Vous avez vu des exemples d’utilisation du module pour effectuer diverses tâches. Par souci de simplicité, tous les exemples de ce tutoriel utilisent le mode autonome de Puppet.

À titre d’exemple, vous pouvez utiliser Puppet pour effectuer les mêmes opérations sur plusieurs hôtes à l’aide du mode Agent-maître de Puppet. Tout ce que vous avez à faire est d’utiliser le type `+ wordpress_manager

resource ` dans les définitions de noeud de ces hôtes. Pour mettre à jour le plugin Akismet sur deux hôtes nommés ` host1 ` et ' host2 + , le + site.pp + `de votre maître de marionnettes doit contenir:

node 'host1', 'host2' {
   wordpress_manager::resource { 'update akismet':
       resource_name => ,
       resource_type => ,
       action =>
   }
}

WP-CLI est très puissant et offre beaucoup de commandes. N’hésitez pas à étendre le module que nous avons créé dans ce tutoriel pour ajouter plus de commandes WP-CLI. Si vous voulez en savoir plus, vous trouverez des informations supplémentaires sur Puppet dans ce tutoriel; Pour en savoir plus sur WP-CLI, vous pouvez vous référer à https://www.digitalocean.com/community/tutorials/how-to-use-wp-cli-to-manage-your-wordpress-site-from-the- ligne de commande [ce tutoriel].