Статьи

Использование WP-CLI с Mina

В первой части этой серии мы смогли использовать Mina для развертывания WordPress. Мы узнали, что Mina создает файл сценария оболочки, а затем отправляет WordPress на сервер для запуска. Поскольку все команды выполняются в одном SSH-соединении, Мина очень быстро.

Используя это, мы можем писать задачи для автоматизации управления WordPress. Мы можем превратить обычные задачи WordPress, такие как создание пользователей, установка плагинов, резервное копирование наших данных и т. Д. В последовательность команд оболочки. Затем мы объединяем эти команды оболочки в задачу Mina.

Но как мы можем создать команды оболочки для выполнения этих задач? WP-CLI — это ответ. Это помогает контролировать WordPress через командную строку. Вам не нужно входить в панель управления WordPress для выполнения задач администрирования. WP-CLI предоставляет нам набор команд, соответствующий задачам администратора WordPress. Как только мы узнаем команды WP-CLI для специальной задачи, нам нужно только поместить эти команды в задачу Mina.

  • Вам понадобится либо Mac OS, либо Linux OS, чтобы иметь доступ к терминалу. Если вы работаете в Windows, это все еще возможно, но это не будет описано в этом руководстве.
  • У вас должно быть базовое понимание команд оболочки и терминала. Если вы уже открывали приложение Terminal или iTerm, учебное пособие должно быть очень простым для вас.
  • У вас должен быть SSH-доступ к вашей удаленной машине.

Очень быстрый пример, чтобы у вас была задача того, что мы имеем с WP-CLI. Приступая к разработке сайта WordPress, вы должны создать фиктивные посты или фиктивные учетные записи пользователей для целей тестирования.

Напечатав это (как только вы установили wp-cli) на своем терминале, вы создадите 100 пустых сообщений без минимальных усилий

1
php wp-cli.phar post generate —count 100

Видишь сколько времени это тебя спасет? Но нужно ли нам запускать эти вещи через командную строку?

Экономить время приятно, но не нужно.

Вот очень веская причина для этого: безопасность . Для некоторых действий на панели управления WordPress требуется разрешение на запись в папку wp-content . Пример: загрузка плагинов, загрузка тем, обновление WordPress и т. Д. Чем больше разрешений мы предоставляем общественности, тем больше опасности мы подвергаем нашему сайту.

Давайте представим, что злоумышленник получает доступ к нашей панели управления WordPress. Злоумышленник сможет загружать вредоносные скрипты в виде плагина. Способ предотвратить это — отключить разрешение на запись в любую папку или файл WordPress, кроме папки wp-content/uploads . Поэтому никто не может загрузить плагин или тему на веб-сервер.

В первой части этого урока мы научимся давать права записи Apache в папке wp-content/uploads . Мы сменили владельца wp-content/uploads на пользователя веб-сервера. Таким образом, веб-сервер может записывать в папку загрузки; Таким образом, WordPress может загружать изображения и писать в нашу папку uploads .

Любое действие, требующее записи в папку WordPress (кроме папки uploads ), должно выполняться из командной строки. Другими словами, мы добавим файл вручную с нашего локального компьютера, зафиксируем и развернем на сервере с Mina. При такой настройке наш каталог WordPress становится доступным только для чтения (за исключением папки uploads которая используется для хранения наших медиафайлов).

Функция загрузки мультимедиа в WordPress уже имеет уровень безопасности для предотвращения загрузки файлов PHP. Если вы хотите пойти дальше, вы можете настроить, чтобы не запускать файлы PHP внутри папки uploads , но это идея, которая не будет рассмотрена в этом руководстве. Мы сосредоточимся больше на действиях командной строки с WP-CLI.

После того, как мы удалили разрешение на запись, автоматическое обновление больше не будет работать, и вы не сможете просто обновить приложение с панели управления WordPress. Поскольку мы управляли нашим кодом WordPress с помощью Git, мы должны выполнить обновление вручную .

Мы можем скачать файл WordPress zip / tar, распаковать его, перезаписав текущий файл WordPress. Затем мы фиксируем новый код, отправляем его в наш репозиторий и выполняем развертывание с Mina.

Задача в Mina — это обычная задача Rake с методом очереди, который ставит в очередь команды оболочки для запуска на сервере позже. Для любой команды, которую мы хотим запустить на сервере, мы можем использовать метод queue следующим образом.

1
2
3
4
desc «Describe this task»<br>task :sample do
  queue «ls #{deploy_to}/current»
  queue «touch /tmp/test.log»
end

Блок desc не обязателен, но его приятно иметь. Если вы mina без каких-либо параметров, информация будет выведена на экран для справки.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ mina
mina — Really fast server deployment and automation tool
 
Options:
  -h, —help Show help
  -V, —version Show program version
  -v, —verbose Show commands as they happen
  -S, —simulate Run in simulation mode
  -t, —trace Show backtraces when errors occur
  -f FILE Use FILE as the deploy configuration
 
Basic usage:
  mina help # Show help.
  mina init # Creates a sample config file.
  mina tasks # Show all tasks.
 
Server tasks:
  mina clean_cache # Clean nginx cache
  mina db_export # Export WordPress database to shared/backup
  mina deploy # Deploys the current version to the server.
  mina rollback # Rollback to previous version
  mina run[command] # Runs a command in the server.
  mina setup # Sets up a site.
  mina toggle_plugin[plugin] # Toggle a plugin
  mina toggle_theme[theme] # Activate theme
  mina wp_version # Show current WordPress version
 
All of Rake’s options are also available as ‘mina’ options.
for more information.

Для любой команды, которую мы хотим запустить на локальной машине, мы можем использовать символ backtick(`) .

1
2
3
4
task :sample do
  puts `pwd`
  puts `ls -la`
end

Давайте проверим его на mina sample чтобы увидеть, что он печатает на вашем локальном компьютере.

Итак, в основном задача Mina создается путем создания блока task :task_name do //... end
task :task_name do //... end
Задача может быть вызвана с помощью mina task_name . Если нам нужно передать аргумент в задачу, то мы можем использовать этот синтаксис:

1
2
3
4
task :task_name, :arg, :another_arg do |cmd, args|
    puts args[:arg]
    puts args[:another_arg]
end

Скобка [] — это просто способ Ruby для доступа к хешу. Вы можете думать об этом как о PHP ассоциативном массиве. Мы называем аргумент, затем внутри тела задачи, мы можем легко получить доступ к его значению с помощью args[:argument_name] . В этом примере имя_ аргумента :arg и :another_arg

Задача может быть вызвана с помощью следующего синтаксиса: mina taskname[param1, param2] . Можно добавить больше аргументов, и мы передадим в него больше параметров, таких как имя mina taskname[param1, param2, param3, param4] .

Вы можете представить, что имя taskname — это имя method и мы вызываем метод и передаем его аргумент. Если у параметра есть пробел, мы должны заключить весь параметр в кавычки.

Давайте попробуем над задачей сейчас. Он просто распечатывает все, что мы передаем в него.

1
$ mina task_name[value1,» value 2 with some space»]<br>value1<br>value 2 with some space<br><br>

Если вы использовали оболочку zsh , вам нужно экранировать [и] с обратной косой чертой:

1
$ mina task_name\[value1,» value 2 with some space»\]<br><br>

Еще одна вещь, которую стоит отметить, это метод in_directory Mina. Весьма вероятно, что вам понадобится перейти в каталог и выполнить несколько команд. Вместо того, чтобы вручную ставить команду cd очередь, мы можем использовать удобный метод in_directory . Он запустит команду в указанном нами каталоге.

1
2
3
4
task :sample do
  in_directory «#{deploy_to}/current» do
    queue «pwd»<br> end
end

Хорошо, достаточно для теории. Давайте начнем с забавной части: мы установим wp-cli, а затем настроим несколько задач.

Все, что нам нужно, это загрузить PHAR- файл WP-CLI. Это один файл, который исполняется на движке PHP. Вместо того, чтобы иметь кучу файлов PHP, вы можете сжать их в один файл, который исполняется PHP.

Это очень простой способ распространения пакетов PHP. Как и в Windows, вы загружаете программное обеспечение в один файл .EXE и запускаете его. Для этого cd в код WordPress на локальном компьютере и выполните следующую команду:

1
2
curl -L https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar > wp-cli.phar
chmod +x wp-cli.phar<br><br>

Давайте проверим, что это работает. На локальном компьютере запустите wp-cli.phar --info и вы должны получить следующий вывод.

1
./wp-cli.phar —info<br>PHP binary: /usr/bin/php<br>PHP version: 5.4.24<br>php.ini used: /etc/php.ini<br>WP-CLI root dir: phar://wp-cli.phar<br>WP-CLI global config:<br>WP-CLI project config:<br>WP-CLI version: 0.14.1<br><br>

Теперь wp-cli находится в том же каталоге, что и ваш WordPress, давайте передадим его и
нажмите на свой репозиторий и выполните развертывание.

1
2
3
4
git add wp-cli.phar
git commit -m «Add wpcli»
git push origin master
mina deploy

На данный момент wp-cli находится в нашем каталоге WordPress на сервере. Давайте немного поработаем с ним: написание задачи Mina с помощью wp-cli.

В этом разделе я покажу вам, как выполнять некоторые основные задачи с помощью wp-cli, а также как поместить их в Mina, чтобы вы могли почувствовать, как все это выглядит, и написать свою собственную задачу, соответствующую вашему рабочему процессу и вашему необходимость. Перво-наперво: Hello World.

Самая первая, очень простая команда wp-cli — показать текущую версию WordPress. Давайте создадим еще одно задание Мины. Добавьте это в ваш файл config/deploy.rb :

1
2
3
4
5
desc «Show current WordPress version»
task :wp_version => :environment do
  queue %[echo «——> Hello world. I’m at this version now:»]
  queue «cd #{deploy_to}/current && ./wp-cli.phar core version»
end

Теперь попробуйте запустить его:

1
2
3
4
$ mina wp_version
——> Hello world.
3.8.1
       Elapsed time: 0.00 seconds

Мы загрузим плагин вручную, распакуем его, добавим в репозиторий, зафиксируем его, затем развернем и запустим еще одну мина-задачу для активации плагина.

Вот код, который нам нужен для этой задачи

1
2
3
4
5
6
7
desc «Toggle a plugin»
task :toggle_plugin , :arg1 do |cmd, plugin|
  queue %[echo «—-> Activate theme #{theme}»]
  in_directory «#{deploy_to}/current» do
    queue %[./wp-cli.phar plugin toggle #{plugin}]
  end
end

Мы поставили в очередь команду echo для вывода некоторого текста. Команда для активации плагина из wp-cli — это plugin toggle plugin_name .

Например, скажем, что мы хотим установить плагин Mathjax Latex , и мы уже поместили его в wp-content/plugins .

Мы можем установить таким образом:

1
2
3
4
git add wp-content/plugins/mathjax-latex
git commit -m «Add mathjax plugin»
git push origin master
mina deploy

Теперь плагин установлен. Активация может быть сделана через панель управления WordPress. Но так как у нас есть задача Mina, попробуем:

1
2
3
4
5
$ mina toggle_plugin\[«mathjax-latex»\]
# Should output
 
—-> Toggle plugin mathjax-latex
Success: Plugin ‘mathjax-latex’ activated.

Обновление плагина — это та же самая процедура. Вы загружаете плагин, копируете его в wp-content/plugins/[plugin-need-to-update] , фиксируете и переустанавливаете.

Рабочий процесс такой же, как и у плагина, только другая команда wp-cli для активации темы. Нам нужно только добавить тему в Git, commit, push, deploy.

Посмотрите на следующий пример, в котором мы будем устанавливать эту тему . Мы уже скачали и поместили его в wp-content / themes / natsume.

1
2
3
4
git add wp-content/themes/natsume
git commit -m «Add mathjax plugin»
git push origin master
mina deploy

Опять же, активацию темы можно выполнить в интерфейсе администратора WordPress. Но давайте создадим задачу Mina, чтобы мы могли ее активировать после ее развертывания из командной строки.

Вот задача:

1
desc «Activate theme»<br>task :toggle_theme , :theme do |cmd, args|<br> theme = args[:theme]<br> queue %[echo «—-> Activate theme #{theme}»]<br> in_directory «#{deploy_to}/current» do<br> queue %[./wp-cli.phar theme activate #{theme}]<br> end<br>end<br><br>

Чтобы активировать тему, запустите нашу задачу:

1
$ mina toggle_theme\[«natsume»\]

Эта задача будет выгружать базу данных WordPress в файл gzip в папке shared/backup . Если папка резервной копии еще не существует, мы создадим ее, а затем вызовем команду wp-cli db для выгрузки базы данных в файл.

Имя файла будет представлять собой комбинацию даты и времени при экспорте в этом формате «[год] [месяц] [день] _ [час] [минута] [секунда] .sql.gz».

Давайте составим нашу задачу Мины.

01
02
03
04
05
06
07
08
09
10
11
12
13
desc «Export WordPress database to shared/backup»
task :db_export do
  # create backup directory if it isn’t exit
  backup_to = «#{deploy_to}/shared/backup»
  queue %[[ -d #{backup_to} ] ||
 
  in_directory «#{deploy_to}/current» do
    time = Time.new
    file = «#{time.year}#{time.month}#{time.day}_#{time.hour}#{time.min}#{time.sec}.sql.gz»
    queue %[echo «—-> Back up database to #{file}»]
    queue %[./wp-cli.phar db export — |
  end
end

[ -d name ] — это синтаксис для проверки существования папки. Если нет, мы используем mkdir для его создания.
Затем мы используем объект Time в Ruby для извлечения даты и времени и объединяем вместе для создания нашего имени файла.

Если вы хотите выполнить резервное копирование с локального компьютера, введите:

1
$ mina db_export

Просто и элегантно. Одна команда и у вас есть все.

Очень часто, когда вы меняете домен, вы должны перенастроить его в wp-config.php или вручную обновить домен в базе данных. В любом случае, это много работы.

Давайте просто решим это один раз. Команда для обновления опции: wp-cli option update [option_key] [option_value] . Согласно документации WordPress , домен siteurl в двух вариантах: home и siteurl .

Итак, вот наша задача:

1
desc «Change domain to a new one»<br>task :update_domain, :domain do |cmd, args|<br> domain = args[:domain]<br> puts domain<br> in_directory «#{deploy_to}/current» do<br> queue %[./wp-cli.phar option update home #{domain}]<br> queue %[./wp-cli.phar option update siteurl #{domain}]<br> end<br>end<br><br>

Вызовите его из командной строки:

1
$ mina update_domain\[«http://log.axcoto.com»\]

Очень удобная функция wp-cli — пост-генерация. Во время тестирования вы можете вручную создавать множество фиктивных сообщений. Команда для создания записи с помощью wp-cli: wp-cli post generate --count=quantity . Как всегда, вы можете прочитать синтаксис самостоятельно на сайте wp-cli .

Создадим вызов задачи gen_dummy_post с параметром количество постов. Чтобы получить содержимое сообщения, мы будем использовать curl для получения текста lorem ipsum через API Loripsum . cURL — это инструмент командной строки, который обычно предустановлен в Linux / Mac OS и позволяет отправлять HTTP-запрос.

Вы можете думать об этом как о браузере, но работать в командной строке. Таким образом, вместо того, чтобы вводить адрес в вашем браузере и просматривать результаты в вашем браузере, вы даете cURL адрес веб-сайта, и он возвращает содержимое веб-сайта.

Давайте попробуем команду ниже:

01
02
03
04
05
06
07
08
09
10
$ curl http://loripsum.net/api/5
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 
<p>Nihil acciderat ei, quod nollet, nisi quod anulum, quo delectabatur, in mari abiecerat.
 
<p>Sed quid minus probandum quam esse aliquem beatum nec satis beatum?
 
<p>Quod ea non occurrentia fingunt, vincunt Aristonem;
 
<p>Nam si propter voluptatem, quae est ista laus, quae possit e macello peti?

Поэтому, когда вы запустите его, будет возвращено пять абзацев lorem ipsum. Вы можете изменить число после /api чтобы получить больше абзаца.

У нас есть контент, и мы отправим его в wp-cli для создания поста. Синтаксис для этого:

Обратите внимание на характер | , это означает, что мы добавляем содержимое в следующую запятую. Мы знаем, синтаксис, мы можем начать составление задачи

1
2
3
4
5
6
7
8
desc «Generate random post»
task :gen_dummy_post, :howmany do |cmd, args|
  howmany = args[:howmany]
  puts howmany
  in_directory «#{deploy_to}/current» do
    queue %[curl http://loripsum.net/api/5 |
  end
end

Зная синтаксис задачи Mina, вы можете прочитать больше о команде WP-CLI, чтобы написать собственную задачу, такую ​​как создание пользователя, создание фиктивных пользователей для тестирования …

Если вы хотите больше узнать о wp-cli, вы можете посетить следующие ссылки:

Теперь у нас есть достаточно хорошее понимание того, как писать задачи Mina, как использовать возможности wp-cli. Надеемся, что благодаря сочетанию этих двух инструментов вы развернитесь очень быстро, и ваша установка WordPress станет более безопасной, чем раньше, и сократит время на задачи администрирования.

Не ограничивайте себя. Информация в этом руководстве очень краткая, пожалуйста, добавьте больше вещей в ваши файлы задач и дайте нам знать, что вы пришли в комментарии.

Если у вас есть какие-либо проблемы, пожалуйста, оставьте комментарий, я хотел бы помочь и поговорить. Счастливая автоматизация WordPress!