В первой части этой серии мы смогли использовать 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!