介绍
如果您是管理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可执行
775
或a+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
-将其值要么plugin
或theme
。 -
$action
-这将是子之一。 -
$resource_name
-插件或主题的名称。 -
$root_directory
-这是必要的和重要的,因为wp-cli
命令必须从安装WordPress的目录内运行。 -
$user
-这个参数的值应该是该公司拥有的WordPress的实例的Unix用户的用户名。
这里是我们在这种类型:
- 确保安装了WP-CLI
- 根据收到的参数创建并执行WP-CLI命令
为了避免错误,添加使用以下限制unless
和onlyif
Puppet的属性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在插件host1
和host2
中, 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,您可以参考本教程 。