如何使用Puppet来管理在Ubuntu 14.04的WordPress主题和插件

介绍

如果您是管理WordPress的几个实例的网站管理员,您将知道工作的重复性是保持您的所有主题和插件更新。 此外,有这么多新的和有趣的主题和插件每隔一天显示,你一定会发现自己安装和卸载很多。

在本教程中,您将学习如何使用简单的Puppet清单和WP-CLI自动执行安装,删除和更新WordPress主题和插件等活动。

先决条件

您将需要以下:

  • 一个Ubuntu 14.04 Droplet
  • 一个sudo的用户
  • 对Puppet模块和清单如何工作的基本了解。 您可以参考本教程刷上你的技能Puppet: 如何使用Puppet来管理您的服务器
  • WordPress 4.1或更高版本
  • Puppet 3.7.1或更高版本

使用本教程设置两个WordPress和Puppet: 如何创建一个Puppet模块来自动在Ubuntu 14.04安装的WordPress

第1步 - 创建新模块

在这一步中,我们将建立在我们创建的香草WordPress安装第一个教程

我们的模块将使用WP-CLI(WordPress命令行界面)来执行大多数操作。 顾名思义,WP-CLI是一个工具,它允许我们使用命令行(和脚本)而不是浏览器与WordPress进行交互。

现在,创建一个模块,允许我们使用Puppet与WP-CLI进行交互。

进入Puppet模块目录。

cd /etc/puppet/modules

让我们调用模块wordpress_manager 为它创建一个新目录。

sudo mkdir /etc/puppet/modules/wordpress_manager

创建一个名为manifests来存储所有的体现。

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可执行775a+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']
    }

}

creates中的属性exec命令是存在的,以检查是否WP-CLI已经被下载。 没有此属性,Puppet将在每次使用模块时下载WP-CLI。

第3步 - 创建定义的类型以与WP-CLI进行交互

要管理的主题,WP-CLI的theme应该使用命令。 在我们的清单中,我们使用激活,删除,安装和更新子theme命令。 同样,管理插件,WP-CLI的plugin应该使用命令。 我们使用激活,停用安装,卸载和更新子plugin命令。

因此,我们定义的类型需要以下参数:

  • $resource_type -将其值要么plugintheme
  • $action -这将是子之一。
  • $resource_name -插件或主题的名称。
  • $root_directory -这是必要的和重要的,因为wp-cli命令必须从安装WordPress的目录内运行。
  • $user -这个参数的值应该是该公司拥有的WordPress的实例的Unix用户的用户名。

这里是我们在这种类型:

  • 确保安装了WP-CLI
  • 根据收到的参数创建并执行WP-CLI命令

为了避免错误,添加使用以下限制unlessonlyifPuppet的属性exec命令:

  • 只有尚未安装的项目才安装。 -WP CLI的is-installed命令被用来确定是否安装与否的项目。
  • 仅在已安装项目时激活/停用/删除/卸载/更新项目。

创建一个名为新文件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该模块中的命令。 它是必需的,以便处理由root拥有的WordPress实例。 没有此标志,尝试以root身份运行WP-CLI将失败,并显示一条错误消息:

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使用了twentyfifteen主题。 这是它的外观:

默认外观

让我们安装并应用新的主题命名expound 要了解更多的主题,你可以通过浏览的WordPress的主题目录

使用nano (或您选择的编辑器)创建的文件名为manage_expound_theme.pp

nano /tmp/manage_expound_theme.pp

添加以下代码到它:

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

wordpress_manager::resource { 'activate expound':
    resource_name => "expound",
    resource_type => "theme",
    action => "activate",
    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:// your_server_ip /在行动中看到了新的主题:

放大主题

示例2 - 删除主题

如果要删除主题,应首先激活其他主题。 例如,如果你想回到twentyfifteen主题,开放manage_expound_theme.pp再次:

nano /tmp/manage_expound_theme.pp

删除文件中的所有内容,并使用以下内容覆盖它:

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

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

再次应用清单。

sudo puppet apply /tmp/manage_expound_theme.pp

现在,您可以访问你的WordPress网站http:// your_server_ip /twentyfifteen应用的主题。

示例3 - 激活插件

该Akismet在插件是默认安装的,但它没有被激活,让我们用我们的Puppet模块激活akismet现在插件。

创建一个新的名为清单manage_akismet.pp

nano /tmp/manage_akismet.pp

添加以下代码到它:

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

应用清单。

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 | active   | 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 => "akismet",
    resource_type => "plugin",
    action => "deactivate"
}

wordpress_manager::resource { 'uninstall akismet':
    resource_name => "akismet",
    resource_type => "plugin",
    action => "uninstall",
    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     |
+---------+----------+--------+---------+

结论

你现在知道如何使用一个简单的Puppet模块管理你的WordPress实例的插件和主题。 您已经看到了如何使用模块执行各种任务的示例。 为了简单起见,本教程中的所有示例都使用Puppet的独立模式。

作为一个例子,你可以使用Puppet做,你可以使用Puppet的Agent-Master模式在多个主机上执行相同的操作。 所有你需要做的是使用类型wordpress_manager::resource在这些主机的节点定义。 要更新命名为两台主机的Akismet在插件host1host2中, site.pp你的Puppet师应包含:

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

WP-CLI非常强大,提供了很多命令。 随意扩展我们在本教程中创建的模块,以添加更多的WP-CLI命令。 如果您想了解更多,有关于Puppet其他信息在本教程中 了解更多关于WP-CLI,您可以参考本教程

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏