Вступление
Puppet - это инструмент управления конфигурацией, который используют системные администраторы для автоматизации процессов, связанных с поддержкой ИТ-инфраструктуры компании. Написание отдельных файлов манифеста Puppet достаточно для автоматизации простых задач. Однако, когда у вас есть весь рабочий процесс для автоматизации, он идеально подходит для создания и использования модуля Puppet. Модуль Puppet - это просто набор манифестов вместе с файлами, которые требуются для этих манифестов, аккуратно упакованные в повторно используемый и совместно используемый пакет.
WordPress - очень популярная платформа для блогов. Как администратор, вы можете очень часто устанавливать WordPress и его зависимости (Apache, PHP и MySQL). Этот процесс установки является хорошим кандидатом для автоматизации, и сегодня мы создаем модуль Puppet, который делает именно это.
Что входит в этот учебник
В этом руководстве вы создадите модуль Puppet, который может выполнять следующие действия:
-
Установите Apache и PHP
-
Установите MySQL
-
Создать базу данных и пользователя базы данных на MySQL для WordPress
-
Установите и настройте WordPress
Затем вы создадите простой манифест, который использует модуль для настройки WordPress в Ubuntu 14.04. В конце этого урока у вас будет многократно используемый модуль WordPress и работающая установка WordPress на сервер.
Предпосылки
Вам понадобится следующее:
-
* Ubuntu 14.04 * сервер
-
Пользователь sudo
-
Вы должны понимать, как управлять WordPress, как только перейдете к настройке панели управления. Если вам нужна помощь в этом, проверьте следующие части https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04#step-five-%E2%80 % 94-полная установка через веб-интерфейс [это руководство]
Шаг 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.