如何创建一个Puppet模块来自动在Ubuntu 14.04安装的WordPress

让WordPress的部署易于使用自定义的Puppet模块。本教程介绍如何构建和部署WordPress的Peppet模块。

介绍

Puppet是一个配置管理工具,系统管理员可以使用它来自动化维护公司IT基础架构所涉及的过程。 编写单独的Puppet清单文件足以自动执行简单任务。 但是,当您有整个工作流要自动化时,它是理想的创建和使用Puppet模块。 Puppet模块只是一个清单的集合,以及这些清单需要的文件,整齐地捆绑到一个可重用和可共享的包中。

WordPress是一个非常受欢迎的博客平台。 作为管理员,您可能会发现自己经常安装WordPress及其依赖项(Apache,PHP和MySQL)。 这个安装过程是自动化的一个很好的候选,今天我们创建一个Puppet模块。

本教程包括什么

在本教程中,您将创建一个Puppet模块,可以执行以下活动:

  • 安装Apache和PHP
  • 安装MySQL
  • 在MySQL上为WordPress创建数据库和数据库用户
  • 安装和配置WordPress

然后,您将创建一个简单的清单,使用该模块在Ubuntu 14.04上设置WordPress。 在本教程的最后,您将有一个可重用的WordPress模块​​和一个在服务器上正常工作的WordPress安装。

先决条件

您将需要以下:

  • Ubuntu的14.04服务器
  • 一个sudo的用户
  • 你知道如何管理WordPress一旦你到控制面板设置。 如果您需要,帮助,检查的后面部分本教程

第1步 - 在独立模式下安装Puppet

要使用安装Puppetapt-get的 ,日伪实验室包库已被添加到可用存储库列表。 Puppet Labs有一个Debian软件包。 此程序包的名称取决于您使用的Ubuntu版本。 由于本教程采用的Ubuntu 14.04,可信赖的塔尔羊,你必须下载并安装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

您现在可以使用安装Puppetapt-get

sudo apt-get update
sudo apt-get install puppet

Puppet现在已安装。 您可以通过键入:

sudo puppet --version

它应该打印Puppet的版本。 在写这篇文章的时候,最新的版本是3.7.1。

:如果您看到一条警告消息有关TEMPLATEDIR,检查第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')

要消除此警告,使用nano编辑puppet.conf文件,并注释掉TEMPLATEDIR行:

sudo nano /etc/puppet/puppet.conf

编辑后,文件应具有以下内容。 你只是注释掉TEMPLATEDIR行:

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

[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

让我们给我们的模块做的,WordPress的 生成通用新模块:

puppet module generate do-wordpress --skip-interview

如果不包括--skip-采访标志,该命令将是互动的,并会提示您有关模块来填充metadata.json文件的各种问题。

在这一点上一个新的目录名为DO-的WordPress已创建。 它包含样板代码和构建模块所需的目录结构。

编辑metadata.json文件替换puppetlabs-STDLIBpuppetlabs / STDLIB。

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

该编辑由于当前打开所需的错误的Puppet。 变更后,你的metadata.json文件应该是这样的:

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

第4步 - 创建清单以安装Apache和PHP

利用纳米创建和编辑文件的清单目录,这将安装Apache和PHP命名web.pp:

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

使用默认参数安装Apache和PHP。 我们使用的prefork的MPM(多处理模块)最大限度地与其他图书馆的兼容性。

将以下代码完全添加到文件中:

class wordpress::web {

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

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

第5步 - 创建文件以存储配置变量

利用纳米创建和舱单目录编辑一个文件名为conf.pp。

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

此文件是您应该设置自定义配置值(如密码和名称)的位置。 系统上的每个其他配置文件都将从此文件中提取其值。

在将来,如果您需要更改Wordpress / MySQL配置,您将只需要更改此文件。

将以下代码添加到文件。 请确保将数据库值替换为要与WordPress一起使用的自定义信息。 你很可能要离开DB 主机设置为localhost。 应该改变rootpassword数据库用户密码

你可以或应该修改变量以红色标记:

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

    $root_password = 'password'
    $db_name = 'wordpress'
    $db_user = 'wp'
    $db_user_password = 'password'
    $db_host = 'localhost'

    # 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创建和编辑的清单目录下名为db.pp文件:

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

此清单执行以下操作:

  • 安装MySQL服务器
  • 设置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安装包官方网站使用wget并将其存储在文件的目录。

创建并移动到新目录:

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

下载文件:

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

第8步 - 为wp-config.php创建一个模板

您可能已经知道,WordPress的需要,其中包含有关它允许使用MySQL数据库信息的wp-config.php文件。 使用模板,以便Puppet可以使用正确的值生成此文件。

创建一个新的目录命名模板

mkdir ~/MyModules/do-wordpress/templates

移动到/ tmp目录:

cd /tmp

提取WordPress文件:

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

您下载的latest.tar.gz文件包含WP-CONFIG-sample.php文件。 将文件复制到模板目录的wp-config.php.erb。

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

清理/ tmp目录:

rm -rf /tmp/wordpress  # Clean up

编辑wp-config.php.erb利用纳米文件。

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

使用conf.pp定义的变量设置为数据库 ,DBUSER,DB 的密码 ,DBHOST值。 您可以使用如下所示的确切设置,这将在您的实际变量拉离我们前面创建的conf.pp文件。 红色标记的项目是你需要做的四个数据库相关线路的确切变化。

忽略注释,您的文件应如下所示:

<?php
define('DB_NAME', '<%= scope.lookupvar('wordpress::conf::db_name') %>');
define('DB_USER', '<%= scope.lookupvar('wordpress::conf::db_user') %>');
define('DB_PASSWORD', '<%= scope.lookupvar('wordpress::conf::db_user_password') %>');
define('DB_HOST', '<%= scope.lookupvar('wordpress::conf::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创建清单

使用nano创建和编辑的名为wp.​​pp文件manifests目录:

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

此清单执行以下操作:

  • 复制WordPress安装包到/ var /网络/的内容。 这有许多工作要做,因为Apache的默认配置在/ var / WWW服务的文件/
  • 生成使用模板的wp-config.php文件

将以下代码添加到文件中,如下所示:

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模块需要有一个文件名为init.pp。 当外部清单包含您的模块时,此文件的内容将被执行。 puppet module generate命令创建该文件的一个通用版本已经为你。

编辑init.pp利用纳米

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

第1步1 - 构建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

该模块现在可以使用和共享。 你会发现在模块的PKG目录的安装包。

第1步2 - 安装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

如果你只是想卸载,你就完成了。

否则,进行所需的更改,然后根据第1步1-12重新构建并重新安装模块。

第1步3 - 使用独立清单文件中的模块安装WordPress

要使用模块安装Wordpress,您必须创建一个新的清单,并应用它。

利用纳米创建和编辑一个文件名为install-wp.pp/ tmp目录(或者你选择的任何其他目录)。

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:// 服务器IP /。 您应该看到WordPress欢迎屏幕。

WordPress欢迎

从这里,您可以正常配置您的WordPress控制面板。

部署到多个服务器

如果您在代理主配置运行Puppet想在一个或多个远程计算机上安装的WordPress,你所要做的就是行添加class {'wordpress':}那些机器的节点定义。 要了解有关Agent-Master配置和节点定义的更多信息,可以参考本教程:

如何安装Puppet来管理服务器基础架构

结论

在本教程中,您已经学会创建自己的Puppet模块,为您设置WordPress。 您可以进一步在此基础上添加对自动安装某些主题和插件的支持。 最后,当你感觉你的模块对别人也有用时,你可以在Puppet Forge上发布它。