Cách sử dụng Puppet để quản lí các Chủ đề và Plugin của WordPress trên Ubuntu 14.04
Cách sử dụng Puppet để quản lí các Chủ đề và Plugin của WordPress trên Ubuntu 14.04
Nếu bạn là admin của một website và cần quản lí nhiều thành phần thực thể khác nhau trên WordPress, bạn sẽ thấy nhàm chán khi phải lặp đi lặp lại một công việc: update các chủ đề và plugin. Hơn nữa với quá nhiều chủ đề và plugin mới, bạn sẽ phải tự mình cài đặt hoặc gỡ cài đặt chúng, và điều này cũng rất mất thời gian.
Bài viết này sẽ hướng dẫn bạn cách sử dụng các manifest của Puppet và WP-CLI để tự động hóa các thao tác như cài đặt, xóa và cập nhật chủ đề và plugin của WordPress.
Yêu cầu
- Một Cloud Server Ubuntu 14.04.
- Một sudo user
- Hiểu biết cơ bản về cách hoạt động của các module và manifest của Puppet.
- WordPress 4.1 trở lên
- Puppet 3.7.1 trở lên
Bước 1 — Tạo một Module mới
Module sử dụng WP-CLI (WordPress Command Line Interface) để biểu diễn hầu hết các lệnh của nó. WP-CLI là một công cụ cho phép ta kết nối với WordPress bằng một giao diện dòng lệnh thay vì qua một trình duyệt web.
Giờ ta sẽ tạo một module sử dụng WP-CLI để kết nối với Puppet.
Vào thư mục chứa các module của Puppet.
cd /etc/puppet/modules
Tạm gọi module cần tạo là wordpress_manager
. Tạo một thư mục cho nó.
sudo mkdir /etc/puppet/modules/wordpress_manager
Tạo một thư mục con tên manifests
để lưu tất cả các manifest.
sudo mkdir /etc/puppet/modules/wordpress_manager/manifests
Ở bước này, ta sẽ tự động hóa quá trình cài đặt WP-CLI. Việc tự động cài đặt WP-CLI vì nó cần được chạy trên tất cả server chạy WordPress.
Những việc ta cần làm với class mới tạo này là:
- Đảm bào
curl
đã được cài đặt để download WP-CLI. - Đảm bảo
php5-cli
được cài đặt. - Download WP-CLI sử dụng
curl
và đặt nó trong thư mục/usr/bin
- Kích hoạt WP-CLI bằng cách đặt nó ở chế độ
775
hoặca+x
.
Dùng nano
để tạo một file tên install.pp
.
sudo nano /etc/puppet/modules/wordpress_manager/manifests/install.pp
Thêm những dòng code sau vào file. Chú ý phần chú thích trong các comment.
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']
}}
Thuộc tính creates
ở lệnh exec
kiểm tra xem WP-CLI đã được download về hay chưa. Nếu không có nó, Puppet sẽ download WP-CLI ,mỗi lần kích hoạt module.
Bước 3 — Tạo một kiểu dữ liệu cụ thể để kết nối với WP-CLI
Để quản lí chủ đề, các lệnh theme
của WP-CLI sẽ được sử dụng. Trong manifest, ta sẽ sử dụng những lệnh con( subcommand) activate, delete, install, và update theo sau theme
, quá trình này tương tự với các lệnh quản lí plugin.
Kiểu dữ liệu mà ta sẽ định nghĩa sẽ có các thuộc tính:
$resource_type
- Kiểu tài nguyên cần quản lí, giá trị của nó làplugin
hoặctheme
.$action
- Sẽ là một trong số các lệnh con.$resource_name
- Tên của plugin hoặc chủ đề.$root_directory
- Là thư mục gốc của WordPress nơi các lệnhwp-cli
được chạy.$user
- Tên của user sở hữu WordPress.
Ta sẽ cần làm một số việc sau:
- Đảm bảo WP- CLI được cài đặt
- Tạo và thực thi các lệnh WP-CLI dựa trên đầu vào là các thông số ở trên.
Để tránh lỗi, ta sẽ dùng các thuộc tính unless
và onlyif
cho lệnh exec
để đảm bảo:
- Chỉ cài một item khi có chưa được cài. Lệnh
is-installed
được dùng để kiểm tra xem một item đã được cài hay chưa. - Activate/deactivate/delete/uninstall/update một item chỉ khi nó đã được cài.
Đầu tiên tạo file resource.pp
.
sudo nano /etc/puppet/modules/wordpress_manager/manifests/resource.pp
Thêm những dòng code sau vào file:
Note: Mặc định thì module sẽ dùng /var/www
cho thư mục cài đặt WordPress, và root
là cho user. Sửa lại $root_directory
và $user
cho khớp với hệ thống của bạn.
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
}}}
Ta sẽ sử dụng cờ --allow-root
cho tất cả các lệnh WP-CLI trong module này để xử lí các thể hiện của WordPress cần phỉa sử dụng quyền root. Nếu không có cờ này bạn sẽ gặp lỗi:
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.
Module Puppet đã được cài đặt xong. Sau đây là một vài ví dụ về cách sử dụng của nó
Ví dụ 1 — Áp dụng một Chủ đề mới cho WordPress
Dùng module Puppet vừa tạo để áp dụng một chủ đề vào một trang cụ thể.
Mặc định WordPress sử dụng theme twentyfifteen
, trông như sau:
Giờ hãy cài đặt và áp dụng một chủ đề mới, expound
.
Dùng nano
để tạo một file tên manage_expound_theme.pp
.
nano /tmp/manage_expound_theme.pp
Thêm vào file những dòng code sau:
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']
}
Dùng lệnh puppet apply
để chạy manifest.
sudo puppet apply /tmp/manage_expound_theme.pp
Output sẽ như sau:
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
Vào trang WordPress của bạn tại địa chỉ http://your_server_ip/
để quan sát sự thay đổi:
Ví dụ 2 — Xóa một Chủ đề
Nếu muốn xóa một chủ đề, trước hết bạn nên áp dụng một chủ đề khác cho WordPress. Ví dụ, nếu muốn áp dụng lại twentyfifteen
,mở lại file manage_expound_theme.pp
nano /tmp/manage_expound_theme.pp
Xóa hết các dòng code cũ đi rồi nhập đoạn code sau vào:
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']
}
Áp dụng manifest:
sudo puppet apply /tmp/manage_expound_theme.pp
Ví dụ 3 — Kích hoạt một Plugin
Plugin Akismet được cài mặc định, tuy nhiên nó chưa được kích hoạt, nên ta sẽ sử dụng module Puppet để kích hoạt nó.
Tạo một manifest mới tên manage_akismet.pp
.
nano /tmp/manage_akismet.pp
Thêm vào những dòng lệnh sau:
wordpress_manager::resource { 'activate akismet':
resource_name => "akismet",
resource_type => "plugin",
action => "activate"}
Kích hoạt manifest.
sudo puppet apply /tmp/manage_akismet.pp
Kiểm tra lại bằng lệnh plugin list
. Mặc định thì module được lưu trong /var/www
của thư mục cài đặt WordPress, nếu không thì bạn có thể dùng cờ --path
wp-cli --allow-root --path=/var/www/ plugin list
Output:
+---------+----------+--------+---------+
| name | status | update | version |
+---------+----------+--------+---------+
| akismet | active | none | 3.0.4 |
| hello | inactive | none | 1.6 |
+---------+----------+--------+---------+
Ví dụ 4 — Gỡ cài đặt Plugin
Để gỡ cài đặt một plugin, chẳng hạn ở đây là Akismet, mở file manage_akismet.pp
.
nano /tmp/manage_akismet.pp
Xóa hết các dòng trong file và thay bằng:
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']
}
Chạy lại manifest.
sudo puppet apply /tmp/manage_akismet.pp
Giờ chạy lệnh plugin list
wp-cli --allow-root --path=/var/www/ plugin list
Bạn sẽ không thấy Askimet xuất hiện trong danh sách các plugin nữa.
+---------+----------+--------+---------+
| name | status | update | version |
+---------+----------+--------+---------+
| hello | inactive | none | 1.6 |
+---------+----------+--------+---------+
Tổng kết
Giờ bạn đã biết cách quản lí các plugins và chủ đề của WordPress bằng một module Puppet đơn cùng với các ví dụ về một số lệnh đơn giản để thao tác với nó.
Bạn còn có thể làm được rất nhiều thứ, chẳng hạn thực hiện một thao tác trên nhiều host cùng một lúc bằng Puppet's Agent-Master mode. Tất cả những gì bạn cần làm là gõ wordpress_manager::resource
trong phẩn miêu tả node của các host đó. Để update Akismet plugin trên hai host, host1
vàhost2
, file site.pp
của Puppet Master sẽ như sau:
node 'host1', 'host2' {
wordpress_manager::resource { 'update akismet':
resource_name => "akismet",
resource_type => "plugin",
action => "update" }}
WP-CLI là một công cụ mạnh mẽ với rất nhiều lệnh để thực thi. Hãy tự mình mở rộng các module để hiểu sâu hơn về nó.