Как использовать Puppet для управления темами и плагинами WordPress в Ubuntu 14.04

Вступление

Если вы являетесь администратором веб-сайта, который управляет несколькими экземплярами WordPress, вы будете знать, насколько повторяющейся задачей является поддержание всех ваших тем и плагинов в актуальном состоянии. Более того, с таким количеством новых и интересных тем и плагинов, которые появляются через день, вы наверняка обнаружите, что устанавливаете и удаляете многие из них.

В этом руководстве вы узнаете, как использовать простые манифесты Puppet и WP-CLI для автоматизации таких действий, как установка, удаление и обновление тем и плагинов WordPress.

Предпосылки

Вам понадобится следующее:

  • A Ubuntu 14.04 Droplet

  • Пользователь sudo

  • Базовое понимание того, как модули и манифесты Puppet работают. Вы можете обратиться к этому руководству, чтобы освежить в себе навыки кукол: Как использовать Puppet для управления Ваши серверы

  • WordPress 4.1 или новее

  • Кукольный 3.7.1 или новее

Используйте это руководство для настройки WordPress и Puppet: https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-on-ubuntu-14 -04 [Как создать кукольный модуль для автоматизации установки WordPress в Ubuntu 14.04]

Шаг 1 - Создайте новый модуль

На этом шаге мы будем опираться на ванильную установку WordPress, которую мы создали в https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation- on-ubuntu-14-04 [первый урок].

Наш модуль будет использовать WP-CLI (интерфейс командной строки WordPress) для выполнения большинства своих операций. Как следует из названия, WP-CLI - это инструмент, который позволяет нам взаимодействовать с WordPress, используя командную строку (и скрипты) вместо браузера.

Теперь создайте модуль, который позволит нам взаимодействовать с WP-CLI с помощью Puppet.

Войдите в каталог модулей Puppet.

cd /etc/puppet/modules

Давайте назовем модуль + wordpress_manager +. Создайте новый каталог для него.

sudo mkdir /etc/puppet/modules/wordpress_manager

Создайте каталог с именем + manifest + для хранения всех его манифестов.

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

Шаг 2 - Создание класса для установки WP-CLI

На этом этапе мы автоматизируем установку WP-CLI. Установка WP-CLI должна быть автоматизирована, поскольку она должна присутствовать на каждом сервере, на котором работает WordPress.

Вот что мы делаем в этом классе:

  • Убедитесь, что + curl + установлен. Это необходимо для загрузки последней версии WP-CLI.

  • Убедитесь, что + php5-cli установлен.

  • Загрузите WP-CLI с помощью + curl + и поместите его в каталог + / usr / bin +.

  • Сделайте WP-CLI исполняемым, установив для него режим + 775 + или + a + x +.

Используйте + nano + для создания нового файла с именем + install.pp +.

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

Добавьте следующий код к нему. Встроенные комментарии должны помочь вам понять, что делает код:

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

}

Атрибут + create + в команде + exec + предназначен для проверки, был ли уже загружен WP-CLI. Без этого атрибута Puppet будет загружать WP-CLI при каждом использовании модуля.

Шаг 3 - Создайте определенный тип для взаимодействия с WP-CLI

Для управления темами следует использовать команду WP-CLI + theme a. В нашем манифесте мы используем подкоманды активации, удаления, установки и обновления командой + theme a. Аналогично, для управления плагинами должна использоваться команда + plugin + в WP-CLI. Мы используем подкоманды активации, деактивации, установки, удаления и обновления с помощью команд + plugin +.

Поэтому нашему определенному типу нужны следующие параметры:

  • + $ resource_types - его значением будет либо` + plugin`, либо + theme.

  • + $ action + - это будет одна из подкоманд.

  • + $ resource_name + - Имя плагина или темы.

  • + $ root_directory + - Это необходимо и важно, потому что команду + wp-cli + нужно запускать из каталога, в котором установлен WordPress.

  • + $ user + - значением этого параметра должно быть имя пользователя Unix, которому принадлежит экземпляр WordPress.

Вот что мы делаем в этом типе:

  • Убедитесь, что WP-CLI установлен

  • Создайте и выполните команду WP-CLI на основе полученных параметров.

Чтобы избежать ошибок, добавьте следующие ограничения, используя атрибуты + instance + и + onlyif + команды Puppet + exec +:

  • Устанавливать предмет, только если он еще не установлен. Команда `+ is-instal + + 'WP-CLI используется для определения, установлен элемент или нет.

  • Активировать / деактивировать / удалить / удалить / обновить элемент, только если он уже установлен.

Создайте новый файл с именем + resource.pp +.

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

Добавьте следующий код к нему. Опять же, встроенные комментарии должны помочь вам понять, что делает код.

  • Примечание *: По умолчанию наш модуль будет использовать + / var / www + в качестве установочного каталога Wordpress, а + root + в качестве владельца файлов Wordpress. Возможно, вам придется изменить значения атрибутов + $ root_directory + и + $ user + в верхней части кода, чтобы они отражали вашу среду.

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

}

Мы используем флаг + - allow-root + для всех команд WP-CLI в этом модуле. Это необходимо для обработки экземпляров WordPress, которые принадлежат пользователю root. Без этого флага попытка запустить WP-CLI от имени root завершится неудачно с сообщением об ошибке:

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.

Наш модуль Puppet теперь готов. Вот несколько примеров, которые помогут вам понять, как вы можете его использовать.

Пример 1. Применение новой темы WordPress.

Давайте использовать наш модуль Puppet, чтобы применить новую тему WordPress к экземпляру WordPress.

По умолчанию WordPress использует тему +entyfifteen +. Вот как это выглядит:

изображение: https: //assets.digitalocean.com/articles/puppet_wordpress/1.png [вид по умолчанию]

Давайте установим и применим новую тему с именем + expound +. Чтобы найти больше тем, вы можете просмотреть WordPress’s Themes Directory.

Используйте + nano + (или редактор по вашему выбору), чтобы создать новый файл с именем + manage_expound_theme.pp +.

nano /tmp/manage_expound_theme.pp

Добавьте следующий код к нему:

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

Используйте команду + puppet apply + для запуска манифеста.

sudo puppet apply /tmp/manage_expound_theme.pp

После завершения прогона результат должен выглядеть примерно так:

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

Посетите ваш сайт WordPress по адресу + http: /// +, чтобы увидеть новую тему в действии:

изображение: https: //assets.digitalocean.com/articles/puppet_wordpress/2.png [развернуть тему]

Пример 2 - Удалить тему

Если вы хотите удалить тему, вы должны сначала активировать другую тему. Например, если вы хотите вернуться к теме + fiftyfifteen +, снова откройте + manage_expound_theme.pp +:

nano /tmp/manage_expound_theme.pp

Удалите все в файле и перезапишите его:

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

Примените манифест снова.

sudo puppet apply /tmp/manage_expound_theme.pp

Теперь вы можете посетить свой сайт WordPress по адресу + http: /// +, чтобы увидеть примененную тему + двадцать пятнадцать +.

Пример 3 - Активировать плагин

Плагин Akismet установлен по умолчанию, но он не активирован, поэтому давайте сейчас воспользуемся нашим модулем Puppet, чтобы активировать плагин + akismet +.

Создайте новый манифест с именем + manage_akismet.pp +.

nano /tmp/manage_akismet.pp

Добавьте следующий код к нему:

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

Примените манифест.

sudo puppet apply /tmp/manage_akismet.pp

Вы можете проверить, активирован ли Akismet с помощью команды + plugin list. По умолчанию наш модуль будет использовать + / var / www + в качестве установочного каталога WordPress, но если это отличается от вашей среды, вы можете соответствующим образом изменить флаг + - path +.

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

Вы должны увидеть вывод, похожий на:

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

Пример 4 - Удалить плагин

Прежде чем плагин можно удалить, убедитесь, что он не активен. Вот как вы можете удалить + akismet +. Откройте + manage_akismet.pp +.

nano /tmp/manage_akismet.pp

Удалите все в файле и перезапишите его:

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

Повторно запустите манифест.

sudo puppet apply /tmp/manage_akismet.pp

Теперь перезапустите команду + plugin list.

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

Вы увидите, что Akismet больше не указан.

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

Заключение

Теперь вы знаете, как управлять плагинами и темами вашего экземпляра WordPress с помощью простого модуля Puppet. Вы видели примеры того, как вы можете использовать модуль для выполнения различных задач. Для простоты, все примеры в этом руководстве используют автономный режим Puppet.

В качестве примера того, что вы можете сделать с помощью Puppet, вы можете выполнять одни и те же операции на нескольких хостах в режиме «Агент-Мастер» в Puppet. Все, что вам нужно сделать, это использовать тип `+ wordpress_manager

resource ` в определениях узлов этих хостов. Чтобы обновить плагин Akismet на двух хостах с именами ` host1 ` и ` host2 `, ` site.pp +` вашего Puppet Master должен содержать:

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

WP-CLI очень мощный и предлагает много команд. Не стесняйтесь расширять модуль, который мы создали в этом руководстве, чтобы добавить больше команд WP-CLI. Если вы хотите узнать больше, в этом уроке есть дополнительная информация о Puppet ite; Чтобы узнать больше о WP-CLI, вы можете обратиться к https://www.digitalocean.com/community/tutorials/how-to-use-wp-cli-to-manage-your-wordpress-site-from-the- командная строка [это руководство.

Related