Локальная разработка WordPress с Lando (или простой Docker)

Опубликовано: 2019-11-22

Ранее в этом году я написал руководство о том, как использовать Docker для разработки в WordPress. Мне очень понравилось работать над этим постом, и, похоже, вам он тоже понравился (спасибо за все ваши комментарии и письма). Если вы не читали пост, вот краткое напоминание:

Docker — это программа, которая позволяет упаковывать программное обеспечение в контейнеры и запускать их поверх виртуальных машин. Основное преимущество Docker заключается в том, что его контейнеры запускаются с использованием среды виртуализации, предоставляемой основной операционной системой, в результате чего создаются быстрые и легкие контейнеры .

Основная проблема Docker в том, что его конфигурация громоздка . Например, чтобы создать среду разработки WordPress, нам нужно запустить две (как минимум) службы: службу базы данных и сервер веб-приложений.

В посте, который был прокомментирован в начале, мы увидели инструмент Docker Compose , который позволяет определить все сервисы, которые мы должны запустить для данного проекта. С помощью Docker Compose нам удалось определить в одном файле docker-compose.yml все зависимости нашего проекта и запустить его с помощью одной команды.

Или это то, что я изначально обещал, потому что я закрыл пост, объяснив, как настроить еще один сервис Docker, который позволит вам использовать красивые доменные имена в ваших установках WordPress. Если вы помните, с исходным файлом docker-compose.yml наша среда разработки WordPress будет доступна через http://localhost:8080 . Но если мы хотели использовать что-то вроде http://myplugin.local , нам нужно было настроить прокси -сервер, который мог бы разрешать доменные имена и добавлять дополнительные настройки в наш docker-compose.yml

Я знаю, я знаю — было довольно сложно все настроить и запустить! Но как только вы все правильно настроили, это было довольно легко, верно? Так или иначе, я решил представить вам моего нового друга: Лэндо. Он поможет вам настроить новые среды разработки за считанные секунды.

Введите Ландо

Я думаю, что лучший способ представить себя Ландо — использовать предложение из его документации:

Lando предназначен для разработчиков, которые хотят избежать встроенного мазохизма прямого использования docker или docker-compose .

документы Ландо

Да, очевидно, что использование docker и docker-compose — для мазохистов… Итак, давайте посмотрим, как мы можем быстро и без осложнений указать все сервисы, которые нам нужны для работы над новым проектом WordPress.

Установка Ландо

Первое, что вы должны сделать, чтобы иметь возможность использовать Lando, это (сюрприз, сюрприз!) установить его на свой компьютер. Процесс установки чрезвычайно прост и очень хорошо задокументирован, но мы можем суммировать его в следующих шагах:

  1. Лэндо требуется Докер. Если вы работаете в Linux, сначала установите Docker Community Edition. Если вы используете Mac или Windows, установщик Lando сам установит Docker, если он еще не доступен.
  2. Загрузите соответствующий установщик Lando для вашей операционной системы. В моем случае, например, я скачал файл lando-v3.0.0-rc.22.deb (я на Linux) и установил его с помощью dpkg . Для Mac используйте файл .dmg , а для Windows — .exe .
  3. Запустите установщик и следуйте инструкциям.

Вот и все!

Как создать новый проект WordPress в Lando

Первое, что нам нужно сделать, это перейти в папку проекта, с которой мы хотим работать (или создать для нее новую). В моем случае я создам новую среду разработки WordPress для разработки нашего плагина Nelio A/B Testing, поэтому я cd в папку, в которую скачал проект: ~/dev/plugins/nelio-ab-testing .

Оказавшись там, мы должны создать файл конфигурации Lando. Этот файл похож на docker-compose.yml , но намного проще. Во-первых, вам даже не нужно его писать — Lando может сделать это за вас! Просто используйте lando init для создания новой среды разработки:

 lando init \ --recipe wordpress --source remote --remote-url https://wordpress.org/latest.tar.gz --webroot wordpress --name "Nelio AB Testing" # name the project as you want

Посмотрим, что делает предыдущая инструкция:

  • Во-первых, мы сообщаем Lando, что хотим создать новый файл конфигурации в текущем каталоге, используя команду lando init .
  • Первый параметр ( --recipe wordpress ) сообщает Lando, что мы хотим создать проект WordPress. Это поможет Lando узнать, какие сервисы необходимо настроить (база данных, веб-сервер и т. д.).
  • Затем мы указываем, что хотим, чтобы Lando загрузил WordPress с WordPress.org.
  • С помощью --webroot wordpress мы сообщаем Ландо, где будет установлен WordPress. Поскольку мы только что указали, что WordPress должен быть загружен с WordPress.org, а ZIP-файл, который загрузит Lando, создаст папку wordpress после распаковки, это место мы используем для Lando.
  • Наконец, мы указываем имя нашего проекта (Lando будет использовать его для создания дружественных доменов URL).

После запуска предыдущей команды вы увидите, как Lando все установит и поприветствует вас следующей информацией:

 NOW WE'RE COOKING WITH FIRE!!! Your app has been initialized! Go to the directory where your app was initialized and run `lando start` to get rolling. Check the LOCATION printed below if you are unsure where to go. Oh... and here are some vitals: NAME my-site LOCATION /tmp/plugin RECIPE wordpress DOCS https://docs.devwithlando.io/tutorials/wordpress.html

Перечислите все файлы в текущей папке, и вы увидите, что Lando создал скрытый файл с именем .lando.yml со следующим содержимым:

 name: my-site recipe: wordpress config: webroot: wordpress

Предельно просто, правда? Теперь запустите свой сервис с помощью lando start , и все готово:

 BOOMSHAKALAKA!!! Your app has started up correctly. Here are some vitals: NAME my-site LOCATION /tmp/plugin SERVICES appserver, database APPSERVER URLS https://localhost:32781 http://localhost:32782 http://nelio-ab-testing.lndo.site https://nelio-ab-testing.lndo.site

Поздравляю! Теперь у вас есть новая установка WordPress. Если мы теперь перейдем к одному из URL-адресов, перечисленных Ландо в начале, вы увидите, что вам просто нужно выполнить шаги, чтобы завершить установку WordPress:

Установите WordPress в стране
Установите WordPress в Lando.

Быстрое завершение установки WordPress

Очевидно, вы можете завершить установку WordPress с помощью установщика на предыдущем экране. Но есть еще лучшее решение: использовать WP-CLI, который также доступен в Lando.

Чтобы установить WordPress с помощью WP-CLI, нам нужно сначала создать wp-config.php wordpress каталоге WordPress. Чтобы создать этот файл, нам нужна некоторая информация о нашей базе данных: где она находится, ее имя пользователя и пароль и т. д. Всю эту информацию можно найти с помощью lando info , которая возвращает следующий JSON:

 [ { service: 'appserver', urls: [ 'https://localhost:32781', 'http://localhost:32782', 'http://nelio-ab-testing.lndo.site', 'https://nelio-ab-testing.lndo.site' ], //... }, { service: 'database', //... creds: { database: 'wordpress', password: 'wordpress', user: 'wordpress', }, //... } ]

Поскольку результаты представляют собой строку JSON, мы можем использовать инструмент Unix jq для получения конкретных значений, которые нас интересуют. Например, если мы хотим узнать пользователя нашей базы данных, просто запустите это:

 $ lando info --service database --format json | jq -r ".[0].creds.user" wordpress

Теперь давайте воспользуемся этой командой и получим все необходимые данные, необходимые для создания файла конфигурации с помощью WP-CLI:

 # Find WordPress' directory (webroot entry in .lando.yml) WEBROOT=`grep webroot .lando.yml | cut -d: -f2 | xargs` # Retrieve database credentials using lando info DBNAME=`lando info --service database --format json | jq -r ".[0].creds.database"` DBUSER=`lando info --service database --format json | jq -r ".[0].creds.user"` DBPASS=`lando info --service database --format json | jq -r ".[0].creds.password"` DBHOST=`lando info --service database --format json | jq -r ".[0].hostnames[0]"` # Create WordPress' config file lando wp config create \ --dbname=$DBNAME \ --dbuser=$DBUSER \ --dbpass=$DBPASS \ --dbhost=$DBHOST \ --path=$WEBROOT

После создания файла мы можем запустить команду установки:

 # Get WordPress' project name from .lando.yml PROJECT_NAME=`grep name .lando.yml | cut -d: -f2 | xargs` SITE_NAME=`echo "$PROJECT_NAME" | sed -e "s/-/ /g" | sed "s/\b[az]/\u&/g"` # Get one of the possible WordPress' URLs ando created (https) URL=`lando info --service appserver --format json | jq -r ".[0].urls" | grep -vw localhost | grep https: | cut -d'"' -f2` # Extract the domain from the previous URL (removing https) DOMAIN=`echo "$URL" | sed -e "s/^https:\/\///"` # Install WordPress lando wp core install --url=$URL --title="$SITE_NAME" --admin_user=admin --admin_password=password --admin_email=admin@$DOMAIN --path=$WEBROOT

Сделанный! У нас уже установлен и работает WordPress.

Как разместить наш проект в WordPress

Если мы сейчас войдем в WordPress и посмотрим на доступные плагины, мы увидим, что нашего плагина (в моем примере Nelio A/B Testing) там нет. Это потому, что Nelio A/B Testing не находится в wordpress/wp-content/plugins/ . Чтобы исправить это, нам просто нужно создать программную ссылку в этом каталоге, которая указывает на корень нашего проекта:

 cd wordpress/wp-content/plugins/ ln -s ../../../ nelio-ab-testing cd -

Вот и все!

Теперь вам решать, какой подход лучше соответствует вашим потребностям. Если вы хотите создать установку WordPress для каждого проекта, просто следуйте инструкциям, которые я описал. Если, с другой стороны, вам нужна одна установка WordPress со всеми вашими темами и плагинами, просто создайте новую папку, инициализируйте там Lando и добавьте все свои плагины в wordpress/wp-content/plugins/ .

Надеюсь, вам понравился этот пост и инструмент так же, как и мне. И я надеюсь, что это сделает вашу работу проще и веселее. После использования Lando я полностью отказался от Docker.

Избранное изображение Виктуар Джоншере на Unsplash.