Как создать кукольный модуль для автоматизации установки WordPress в Ubuntu 14.04

Вступление

Puppet - это инструмент управления конфигурацией, который используют системные администраторы для автоматизации процессов, связанных с поддержкой ИТ-инфраструктуры компании. Написание отдельных файлов манифеста Puppet достаточно для автоматизации простых задач. Однако, когда у вас есть весь рабочий процесс для автоматизации, он идеально подходит для создания и использования модуля Puppet. Модуль Puppet - это просто набор манифестов вместе с файлами, которые требуются для этих манифестов, аккуратно упакованные в повторно используемый и совместно используемый пакет.

WordPress - очень популярная платформа для блогов. Как администратор, вы можете очень часто устанавливать WordPress и его зависимости (Apache, PHP и MySQL). Этот процесс установки является хорошим кандидатом для автоматизации, и сегодня мы создаем модуль Puppet, который делает именно это.

Что входит в этот учебник

В этом руководстве вы создадите модуль Puppet, который может выполнять следующие действия:

  • Установите Apache и PHP

  • Установите MySQL

  • Создать базу данных и пользователя базы данных на MySQL для WordPress

  • Установите и настройте WordPress

Затем вы создадите простой манифест, который использует модуль для настройки WordPress в Ubuntu 14.04. В конце этого урока у вас будет многократно используемый модуль WordPress и работающая установка WordPress на сервер.

Предпосылки

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

Шаг 1 - Установите Puppet в автономном режиме

Для установки Puppet необходимо добавить репозиторий Puppet Labs Package в список доступных репозиториев. В Puppet Labs есть пакет Debian, который делает это. Название этого пакета зависит от версии Ubuntu, которую вы используете. Поскольку в этом руководстве используется Ubuntu 14.04, Trusty Tahr, вам необходимо скачать и установить + puppetlabs-release-trusty.deb +.

Создайте и перейдите в каталог + Downloads +:

mkdir ~/Downloads
cd ~/Downloads

Получить пакет:

wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
sudo dpkg -i puppetlabs-release-trusty.deb

Теперь вы можете установить Puppet используя + apt-get.

sudo apt-get update
sudo apt-get install puppet

Кукольный теперь установлен. Вы можете проверить, набрав:

sudo puppet --version

Он должен распечатать версию Puppet. На момент написания этой статьи последняя версия * 3.7.1 *.

  • Примечание *: Если вы видите предупреждающее сообщение о, проверьте решение на шаге 2.

Шаг 2 - Установите модули Apache и MySQL

Управление Apache и MySQL - это такие общие действия, что у PuppetLabs есть свои собственные модули для них. Мы будем использовать эти модули для установки и настройки Apache и MySQL.

Вы можете получить список всех модулей Puppet, установленных в вашей системе, с помощью следующей команды:

sudo puppet module list

Вы не найдете ни одного установленного модуля.

Вы можете увидеть предупреждающее сообщение:

Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
(at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1071:in `each')

Чтобы удалить это предупреждение, используйте для редактирования файла и закомментируйте строку:

sudo nano /etc/puppet/puppet.conf

После правок файл должен иметь следующее содержимое. Вы просто комментируете строку:

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter


[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

Это должно удалить предупреждение.

Установите модули PuppetLabs Apache и MySQL:

sudo puppet module install puppetlabs-apache
sudo puppet module install puppetlabs-mysql

Проверьте установку, перечислив модули снова:

sudo puppet module list

Вы должны увидеть модули Apache и MySQL в списке.

/etc/puppet/modules
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.1)
├── puppetlabs-mysql (v2.3.1)
└── puppetlabs-stdlib (v4.3.2)

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

Создайте новый каталог, чтобы сохранить все ваши пользовательские модули.

mkdir ~/MyModules
cd ~/MyModules

Давайте назовем наш модуль. Создайте общий новый модуль:

puppet module generate do-wordpress --skip-interview

Если вы не включите флаг, команда будет интерактивной и предложит вам различные вопросы о модуле для заполнения файла.

На данный момент новый каталог с именем был создан. Он содержит стандартный код и структуру каталогов, которая необходима для построения модуля.

Отредактируйте файл для замены.

nano ~/MyModules/do-wordpress/metadata.json

Это редактирование необходимо из-за открытого в настоящее время bug в Puppet. После изменения ваш файл должен выглядеть так:

{
 "name": "do-wordpress",
 "version": "0.1.0",
 "author": "do",
 "summary": null,
 "license": "Apache 2.0",
 "source": "",
 "project_page": null,
 "issues_url": null,
 "dependencies": [
   {"name":,"version_requirement":">= 1.0.0"}
 ]
}

Шаг 4 - Создайте манифест для установки Apache и PHP

Используйте для создания и редактирования файла с именем в каталоге, который установит Apache и PHP:

nano ~/MyModules/do-wordpress/manifests/web.pp

Установите Apache и PHP с параметрами по умолчанию. Мы используем в качестве MPM (Multi-Processing Module) для максимальной совместимости с другими библиотеками.

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

class wordpress::web {

   # Install Apache
   class {'apache':
       mpm_module => 'prefork'
   }

   # Add support for PHP
   class {'::apache::mod::php': }
}

Шаг 5 - Создайте файл для хранения переменных конфигурации

Используйте для создания и редактирования файла с именем в каталоге.

nano ~/MyModules/do-wordpress/manifests/conf.pp

Этот файл является единственным местом, где вы должны установить пользовательские значения конфигурации, такие как пароли и имена. Каждый другой файл конфигурации в системе извлекает свои значения из этого файла.

В будущем, если вам нужно изменить конфигурацию Wordpress / MySQL, вам придется изменить только этот файл.

Добавьте следующий код в файл. Убедитесь, что вы заменили значения базы данных пользовательской информацией, которую вы хотите использовать с WordPress. Скорее всего, вы хотите оставить установленным. Вы * должны * изменить и.

Переменные, которые вы можете или должны редактировать, отмечены в:

class wordpress::conf {
   # You can change the values of these variables
   # according to your preferences

   $root_password = ''
   $db_name = ''
   $db_user = ''
   $db_user_password = ''
   $db_host = ''

   # Don't change the following variables

   # This will evaluate to wp@localhost
   $db_user_host = "${db_user}@${db_host}"

   # This will evaluate to wp@localhost/wordpress.*
   $db_user_host_db = "${db_user}@${db_host}/${db_name}.*"
}

Шаг 6 - Создайте манифест для MySQL

Используйте для создания и редактирования файла с именем в каталоге:

nano ~/MyModules/do-wordpress/manifests/db.pp

Этот манифест выполняет следующие действия:

  • Устанавливает сервер MySQL

  • Устанавливает пароль root для сервера MySQL

  • Создает базу данных для Wordpress

  • Создает пользователя для Wordpress

  • Предоставляет пользователю права доступа к базе данных.

  • Устанавливает клиент MySQL и привязки для разных языков

    Все вышеперечисленные действия выполняются классами `+

    mysql :: server` и` + :: mysql :: client`.

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

class wordpress::db {

   class { '::mysql::server':

       # Set the root password
       root_password => $wordpress::conf::root_password,

       # Create the database
       databases => {
           "${wordpress::conf::db_name}" => {
               ensure => 'present',
               charset => 'utf8'
           }
       },

       # Create the user
       users => {
           "${wordpress::conf::db_user_host}" => {
               ensure => present,
               password_hash => mysql_password("${wordpress::conf::db_user_password}")
           }
       },

       # Grant privileges to the user
       grants => {
           "${wordpress::conf::db_user_host_db}" => {
               ensure     => 'present',
               options    => ['GRANT'],
               privileges => ['ALL'],
               table      => "${wordpress::conf::db_name}.*",
               user       => "${wordpress::conf::db_user_host}",
           }
       },
   }

   # Install MySQL client and all bindings
   class { '::mysql::client':
       require => Class['::mysql::server'],
       bindings_enable => true
   }
}

Шаг 7 - Загрузите последнюю версию WordPress

Загрузите последний установочный пакет WordPress с http://wordpress.org [официальный сайт] и сохраните его в каталоге.

Создайте и переместите в новый каталог:

mkdir ~/MyModules/do-wordpress/files
cd ~/MyModules/do-wordpress/files

Загрузите файлы:

wget http://wordpress.org/latest.tar.gz

Шаг 8 - Создайте шаблон для wp-config.php

Возможно, вы уже знаете, что Wordpress нуждается в файле, который содержит информацию о базе данных MySQL, которую ему разрешено использовать. Шаблон используется для того, чтобы Puppet мог сгенерировать этот файл с правильными значениями.

Создайте новый каталог с именем.

mkdir ~/MyModules/do-wordpress/templates

Переместиться в каталог:

cd /tmp

Извлеките файлы WordPress:

tar -xvzf ~/MyModules/do-wordpress/files/latest.tar.gz  # Extract the tar

Файл, который вы скачали, содержит файл. Скопируйте файл в каталог как.

cp /tmp/wordpress/wp-config-sample.php ~/MyModules/do-wordpress/templates/wp-config.php.erb

Очистить каталог:

rm -rf /tmp/wordpress  # Clean up

Отредактируйте файл + wp-config.php.erb +, используя.

nano ~/MyModules/do-wordpress/templates/wp-config.php.erb

Используйте переменные, определенные в, чтобы установить значения для, и. Вы можете использовать точные настройки, показанные ниже, которые будут извлекать ваши фактические переменные из файла, который мы создали ранее. Пункты, отмеченные в, являются точными изменениями, которые необходимо внести в четыре строки, связанные с базой данных.

Игнорируя комментарии, ваш файл должен выглядеть так:

<?php
define('DB_NAME', '');
define('DB_USER', '');
define('DB_PASSWORD', '');
define('DB_HOST', '');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

$table_prefix  = 'wp_';

define('WP_DEBUG', false);

if ( !defined('ABSPATH') )
   define('ABSPATH', dirname(__FILE__) . '/');

require_once(ABSPATH . 'wp-settings.php');

Шаг 9 - Создайте манифест для Wordpress

Используйте для создания и редактирования файла с именем в каталоге + manifest +:

nano ~/MyModules/do-wordpress/manifests/wp.pp

Этот манифест выполняет следующие действия:

  • Копирует содержимое установочного пакета Wordpress в. Это должно быть сделано, потому что конфигурация Apache по умолчанию обслуживает файлы из

  • Создает файл с использованием шаблона

Добавьте следующий код в файл точно так, как показано:

class wordpress::wp {

   # Copy the Wordpress bundle to /tmp
   file { '/tmp/latest.tar.gz':
       ensure => present,
       source => "puppet:///modules/wordpress/latest.tar.gz"
   }

   # Extract the Wordpress bundle
   exec { 'extract':
       cwd => "/tmp",
       command => "tar -xvzf latest.tar.gz",
       require => File['/tmp/latest.tar.gz'],
       path => ['/bin'],
   }

   # Copy to /var/www/
   exec { 'copy':
       command => "cp -r /tmp/wordpress/* /var/www/",
       require => Exec['extract'],
       path => ['/bin'],
   }

   # Generate the wp-config.php file using the template
   file { '/var/www/wp-config.php':
       ensure => present,
       require => Exec['copy'],
       content => template("wordpress/wp-config.php.erb")
   }
}

Шаг 10 - Создайте init.pp, манифест, объединяющий другие манифесты

Каждый модуль Puppet должен иметь файл с именем. Если внешний манифест содержит ваш модуль, содержимое этого файла будет выполнено. Команда + puppet module generate + уже создала для вас универсальную версию этого файла.

Редактировать используя * nano *:

nano ~/MyModules/do-wordpress/manifests/init.pp

Пусть файл имеет следующее содержимое.

Вы можете оставить комментированные объяснения и примеры вверху. Должен быть пустой блок для класса + wordpress +. Добавьте содержимое, показанное здесь, чтобы блок + wordpress + выглядел так, как показано ниже. Убедитесь, что скобки правильно вложены.

Встроенные комментарии включены, чтобы объяснить настройки:

class wordpress {
   # Load all variables
   class { 'wordpress::conf': }

   # Install Apache and PHP
   class { 'wordpress::web': }

   # Install MySQL
   class { 'wordpress::db': }

   # Run Wordpress installation only after Apache is installed
   class { 'wordpress::wp':
       require => Notify['Apache Installation Complete']
   }

   # Display this message after MySQL installation is complete
   notify { 'MySQL Installation Complete':
       require => Class['wordpress::db']
   }

   # Display this message after Apache installation is complete
   notify { 'Apache Installation Complete':
       require => Class['wordpress::web']
   }

   # Display this message after Wordpress installation is complete
   notify { 'Wordpress Installation Complete':
       require => Class['wordpress::wp']
   }
}

Шаг 11 - Сборка модуля WordPress

Модуль готов к сборке. Перейдите в каталог MyModules:

cd ~/MyModules

Используйте команду + puppet module build + для сборки модуля:

sudo puppet module build do-wordpress

Вы должны увидеть следующий результат успешной сборки:

Notice: Building /home/user/MyModules/do-wordpress for release
Module built: /home/user/MyModules/do-wordpress/pkg/do-wordpress-0.1.0.tar.gz

Модуль теперь готов к использованию и распространению. Вы найдете устанавливаемый комплект в каталоге модуля.

Шаг 12 - Установите модуль WordPress

Чтобы использовать модуль, он должен быть установлен первым. Используйте команду + puppet module install.

sudo puppet module install ~/MyModules/do-wordpress/pkg/do-wordpress-0.1.0.tar.gz

После установки, когда вы запустите команду + sudo puppet module list, вы должны увидеть вывод, подобный следующему:

/etc/puppet/modules
├── do-wordpress (v0.1.0)
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.1)
├── puppetlabs-mysql (v2.3.1)
└── puppetlabs-stdlib (v4.3.2)

Теперь, когда он установлен, вы должны ссылаться на этот модуль как + do-wordpress + для любых команд Puppet.

Обновление или удаление модуля

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

Или вы можете просто захотеть удалить модуль в какой-то момент.

Чтобы обновить или удалить модуль, используйте эту команду:

sudo puppet module uninstall do-wordpress

Если вы просто хотели удалить, все готово.

В противном случае внесите необходимые изменения, затем пересоберите и переустановите модуль в соответствии с шагами 11-12.

Шаг 13 - Используйте модуль в автономном файле манифеста для установки WordPress

Чтобы использовать модуль для установки Wordpress, вы должны создать новый манифест и применить его.

Используйте для создания и редактирования файла с именем + install-wp.pp + в каталоге (или любом другом каталоге по вашему выбору).

nano /tmp/install-wp.pp

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

class { 'wordpress':
}

Примените манифест, используя + puppet apply +. Это шаг, который запускает и запускает WordPress на вашем сервере:

sudo puppet apply /tmp/install-wp.pp

Хорошо видеть предупреждение или два.

Это займет некоторое время, но после его завершения у вас будет установлен и запущен Wordpress и все его зависимости.

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

Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/authn_core.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/status.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/mpm_prefork.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/status.conf]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/mpm_prefork.conf]/ensure: removed
Notice: /Stage[main]/Apache::Service/Service[httpd]: Triggered 'refresh' from 55 events
Notice: Finished catalog run in 55.91 seconds

Вы можете открыть браузер и посетить http: ///. Вы должны увидеть экран приветствия WordPress.

изображение: https: //assets.digitalocean.com/articles/wordpress_puppet/1.png [WordPress Welcome]

Отсюда вы можете настроить панель управления WordPress в обычном режиме.

Развертывание на нескольких серверах

Если вы запускаете Puppet в конфигурации Agent-Master и хотите установить WordPress на одну или несколько удаленных машин, все, что вам нужно сделать, это добавить строку + class {'wordpress':} + в определения * node * для эти машины. Чтобы узнать больше о конфигурации Agent-Master и определениях узлов, вы можете обратиться к этому руководству:

Заключение

С этим руководством вы научились создавать свой собственный модуль Puppet, который настраивает WordPress для вас. Вы можете дополнительно использовать это для добавления поддержки автоматической установки определенных тем и плагинов. Наконец, когда вы чувствуете, что ваш модуль может быть полезен и для других, вы можете опубликовать его в Puppet Forge.

Related