В первой части этой серии мы смогли использовать 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
Очень быстрый пример, чтобы у вас была задача того, что мы имеем с 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. Поскольку мы управляли нашим кодом 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, а затем настроим несколько задач.
Установить 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.
Написание задачи Mina с WP-CLI
В этом разделе я покажу вам, как выполнять некоторые основные задачи с помощью wp-cli, а также как поместить их в Mina, чтобы вы могли почувствовать, как все это выглядит, и написать свою собственную задачу, соответствующую вашему рабочему процессу и вашему необходимость. Перво-наперво: Hello World.
1. Привет, мир
Самая первая, очень простая команда 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
|
2. Установка плагина
Мы загрузим плагин вручную, распакуем его, добавим в репозиторий, зафиксируем его, затем развернем и запустим еще одну мина-задачу для активации плагина.
Вот код, который нам нужен для этой задачи
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]
, фиксируете и переустанавливаете.
3. Установка темы
Рабочий процесс такой же, как и у плагина, только другая команда 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»\]
|
4. Резервное копирование базы данных
Эта задача будет выгружать базу данных 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
|
Просто и элегантно. Одна команда и у вас есть все.
5. Обновить домен
Очень часто, когда вы меняете домен, вы должны перенастроить его в wp-config.php или вручную обновить домен в базе данных. В любом случае, это много работы.
Давайте просто решим это один раз. Команда для обновления опции: wp-cli option update [option_key] [option_value]
. Согласно документации WordPress , домен siteurl
в двух вариантах: home
и siteurl
.
update_option ('siteurl', ' http://example.com' ); update_option ('home', ' http://example.com' );
Итак, вот наша задача:
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»\]
|
6. Создайте фиктивный пост
Очень удобная функция 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 для создания поста. Синтаксис для этого:
curl http://loripsum.net/api/5 | wp post generate --post_content --count=10
Обратите внимание на характер |
, это означает, что мы добавляем содержимое в следующую запятую. Мы знаем, синтаксис, мы можем начать составление задачи
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, вы можете посетить следующие ссылки:
- http://www.slideshare.net/Japho/wp-melb-2014-0218
- https: //www.digitalocean.com/community/articles/how-to-use-wp-cli-to-manage-your-wordpress-site-from …
- https://code.tutsplus.com/articles/using-wp-cli-for-fun-and-profit—wp-24496
Вывод
Теперь у нас есть достаточно хорошее понимание того, как писать задачи Mina, как использовать возможности wp-cli. Надеемся, что благодаря сочетанию этих двух инструментов вы развернитесь очень быстро, и ваша установка WordPress станет более безопасной, чем раньше, и сократит время на задачи администрирования.
Не ограничивайте себя. Информация в этом руководстве очень краткая, пожалуйста, добавьте больше вещей в ваши файлы задач и дайте нам знать, что вы пришли в комментарии.
Если у вас есть какие-либо проблемы, пожалуйста, оставьте комментарий, я хотел бы помочь и поговорить. Счастливая автоматизация WordPress!