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

介绍

如果你是一个网站管理员,管理几个WordPress实例,你会知道保持所有主题和插件的更新是多么重复性的工作。

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

前提条件

您将需要以下内容:

  • 一个 Ubuntu 14.04 Droplet
  • 一个 sudo用户
  • 一个基本的理解如何玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩玩

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

步骤 1 - 创建一个新的模块

在此步骤中,我们将建立在我们在第一个教程中创建的瓦尼拉WordPress安装(https://andsky.com/tech/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-on-ubuntu-14-04)。

我们的模块将使用WP-CLI(WordPress命令行界面)来执行其大部分操作,正如其名称所示,WP-CLI是一个工具,允许我们使用命令行(和脚本)而不是浏览器与WordPress交互。

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

进入 Puppet 模块目录。

1cd /etc/puppet/modules

让我们把模块叫做wordpress_manager,为它创建一个新目录。

1sudo mkdir /etc/puppet/modules/wordpress_manager

创建一个名为宣言的目录,存储所有宣言。

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

步骤 2 — 创建一个类来安装 WP-CLI

在此步骤中,我们将自动安装 WP-CLI. 安装 WP-CLI 必须自动化,因为它必须存在于运行 WordPress 的每个服务器上。

以下是我们在这个班级做的事情:

  • 請確定「curl」已安裝. 需要下載最新版本的 WP-CLI。
  • 請確定「php5-cli」已安裝.
  • 使用「curl」下載 WP-CLI,並將其放入「/usr/bin」目錄。
  • 將 WP-CLI 執行方式設定為「775」或「a+x」。

使用nano创建一个名为install.pp的新文件。

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

添加以下代码:内行评论应该帮助您了解代码的功能:

 1class wordpress_manager::install {
 2
 3    # Install curl
 4    package { 'curl':
 5        ensure => latest
 6    }
 7
 8    # Install php5-cli
 9    package { 'php5-cli':
10        ensure => latest
11    }
12
13    # Download WP-CLI using curl
14    exec { 'Install WP CLI':
15        command => "/usr/bin/curl -o /usr/bin/wp-cli -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar",
16        require => [ Package['curl'], Package['php5-cli'] ],
17        creates => "/usr/bin/wp-cli"
18    }
19
20    # Change the mode of WP-CLI to a+x
21    file { '/usr/bin/wp-cli':
22        mode => "775",
23        require => Exec['Install WP CLI']
24    }
25
26}

exec命令中的Creates属性在那里检查是否已经下载了 WP-CLI。

步骤 3 — 创建定义类型以与 WP-CLI 互动

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

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

  • $resource_type - 它的值将是 plugintheme.
  • $action - 这将是子命令之一.
  • $resource_name - 插件或主题的名称.
  • $root_directory - 这是必要和重要的,因为该命令必须从WordPress安装的目录内部运行。

这里是我们在这种类型的做什么:

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

为了避免错误,请使用 Puppet 命令exec除非onlyif属性添加以下限制:

  • 仅在尚未安装的情况下安装一个项目。WP-CLI的已安装命令用于确定该项目是否已安装。
  • 仅在已安装的情况下激活/禁用/删除/卸载/更新一个项目。

创建一个名为resource.pp的新文件。

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

再一次,内行评论应该帮助您了解代码的作用。

**注:默认情况下,我们的模块将使用/var/www作为Wordpress安装目录,并将root作为Wordpress文件所有者。

 1define wordpress_manager::resource (
 2    $resource_name,
 3    $resource_type,
 4    $root_directory = "/var/www/",
 5    $action,
 6    $user = "root",
 7) {
 8
 9    # Make sure WP_CLI is installed
10    require wordpress_manager::install
11
12    $wp_cli = "/usr/bin/wp-cli --allow-root"
13
14    # Install the theme or plugin unless it is already installed.
15    if $action == "install" {
16        exec { "Install $resource_name":
17            command => "$wp_cli $resource_type $action $resource_name",
18            unless => "$wp_cli $resource_type is-installed $resource_name",
19            cwd => $root_directory,
20            user => $user
21        }
22    }
23
24    # Activate or update the theme or plugin only if it is currently installed.
25    if $action == "activate" or $action == "update" {
26        exec { "$action $resource_name":
27            command => "$wp_cli $resource_type $action $resource_name",
28            onlyif => "$wp_cli $resource_type is-installed $resource_name",
29            cwd => $root_directory,
30            user => $user
31        }
32    }
33
34    # Uninstall or deactivate a plugin only if it is currently installed.
35    if $resource_type == "plugin" {
36        if $action == "uninstall" or $action == "deactivate" {
37            exec { "$action $resource_name":
38                command => "$wp_cli plugin $action $resource_name",
39                onlyif => "$wp_cli plugin is-installed $resource_name",
40                cwd => $root_directory,
41                user => $user
42            }
43        }
44    }
45
46    # Delete a theme only if it is currently installed.
47    if $action == "delete" and $resource_type == "theme" {
48        exec { "$action $resource_name":
49            command => "$wp_cli theme $action $resource_name",
50            onlyif => "$wp_cli theme is-installed $resource_name",
51            cwd => $root_directory,
52            user => $user
53        }
54    }
55
56}

我们在本模块中的所有 WP-CLI 命令中使用 --allow-root 旗帜. 它是必要的,以便处理由 root 拥有的 WordPress 实例. 没有这个旗帜,尝试运行 WP-CLI 作为 root 将失败,错误消息说:

1Error: 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 使用二十五主题,这就是它的样子:

Default Look

让我们安装并应用一个名为expound的新主题. 要找到更多主题,您可以浏览 WordPress 的主题目录

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

1nano /tmp/manage_expound_theme.pp

添加以下代码:

 1wordpress_manager::resource { 'install expound':
 2    resource_name => "expound",
 3    resource_type => "theme",
 4    action => "install"
 5}
 6
 7wordpress_manager::resource { 'activate expound':
 8    resource_name => "expound",
 9    resource_type => "theme",
10    action => "activate",
11    require => WordPress_manager::Resource['install expound']
12}

使用娃娃应用命令来运行宣言。

1sudo puppet apply /tmp/manage_expound_theme.pp

完成运行后,输出应该看起来像这样:

1Notice: Compiled catalog for zona-virtualbox in environment production in 0.81 seconds
2Notice: /Stage[main]/Main/WordPress_manager::Resource[install expound]/Exec[Install expound]/returns: executed successfully
3Notice: /Stage[main]/Main/WordPress_manager::Resource[activate expound]/Exec[activate expound]/returns: executed successfully
4Notice: Finished catalog run in 13.72 seconds

访问您的WordPress网站在http://your_server_ip/`看到新的主题在行动:

Expound theme

示例 2 - 删除主题

如果你想删除一个主题,你应该先激活另一个主题,例如,如果你想回到二十五主题,请再次打开manage_expound_theme.pp:

1nano /tmp/manage_expound_theme.pp

删除文件中的所有内容,然后用:

 1wordpress_manager::resource { 'activate twentyfifteen':
 2    resource_name => "twentyfifteen",
 3    resource_type => "theme",
 4    action => "activate"
 5}
 6
 7wordpress_manager::resource { 'delete expound':
 8    resource_name => "expound",
 9    resource_type => "theme",
10    action => "delete",
11    require => WordPress_manager::Resource['activate twentyfifteen']
12}

再次使用宣言。

1sudo puppet apply /tmp/manage_expound_theme.pp

您现在可以访问您的WordPress网站在http://your_server_ip/ 查看应用的二十五主题。

示例 3 - 激活一个插件

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

创建一个名为manage_akismet.pp的新宣言。

1nano /tmp/manage_akismet.pp

添加以下代码:

1wordpress_manager::resource { 'activate akismet':
2    resource_name => "akismet",
3    resource_type => "plugin",
4    action => "activate"
5}

使用宣言。

1sudo puppet apply /tmp/manage_akismet.pp

默认情况下,我们的模块将使用/var/www作为WordPress安装目录,但如果这不同于您的环境,您可以适当地修改--path旗帜。

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

你应该看到一个类似的输出:

1+---------+----------+--------+---------+
2| name    | status   | update | version |
3+---------+----------+--------+---------+
4| akismet | active   | none   | 3.0.4   |
5| hello   | inactive | none   | 1.6     |
6+---------+----------+--------+---------+

例子 4 – 卸载一个插件

在可以卸载插件之前,您应该确保它不活跃. 以下是如何卸载 akismet. 打开 manage_akismet.pp

1nano /tmp/manage_akismet.pp

删除文件中的所有内容,然后用:

 1wordpress_manager::resource { 'deactivate akismet':
 2    resource_name => "akismet",
 3    resource_type => "plugin",
 4    action => "deactivate"
 5}
 6
 7wordpress_manager::resource { 'uninstall akismet':
 8    resource_name => "akismet",
 9    resource_type => "plugin",
10    action => "uninstall",
11    require => WordPress_manager::Resource['deactivate akismet']
12}

重启《宣言》

1sudo puppet apply /tmp/manage_akismet.pp

现在,重新启动插件列表命令。

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

您将看到Akismet不再列出。

1+---------+----------+--------+---------+
2| name    | status   | update | version |
3+---------+----------+--------+---------+
4| hello   | inactive | none   | 1.6     |
5+---------+----------+--------+---------+

结论

您现在知道如何使用简单的Puppet模块来管理您的WordPress实例的插件和主题,您已经看到了如何使用该模块来执行各种任务的示例。

例如,您可以使用 Puppet 做其他的事情,您可以使用 Puppet 的代理主模式在多个主机上执行相同的操作. 您只需要在这些主机的节点定义中使用类型 wordpress_manager::resource。 要在两个名为 host1host2的主机上更新 Akismet 插件,您的 Puppet Master 的site.pp' 应该包含:

1node 'host1', 'host2' {
2    wordpress_manager::resource { 'update akismet':
3    	resource_name => "akismet",
4    	resource_type => "plugin",
5    	action => "update"
6    }
7}

WP-CLI 非常强大,提供许多命令. 请放心扩展我们在本教程中创建的模块,以添加更多 WP-CLI 命令. 如果您想了解更多,有关于 Puppet 的额外信息(本教程中)(https://andsky.com/tech/tutorials/getting-started-with-puppet-code-manifests-and-modules); 有关 WP-CLI 的更多信息,您可以参阅 本教程

Published At
Categories with 技术
comments powered by Disqus