Встречайте кастомный бойлерплейт для WordPress - Bedrock

В предыдущей статье мы установили и настроили программу Deployer, а также написали несколько команд, которые позволили нам упростить процесс заливки сайта. Но в нашем процессе всё равно осталась уйма недостатков. Самый главный недостаток - это отсутствие в наших процессах контроля версий. Хорошо, скажете Вы, но это же WordPress, о каком контроле версий может идти речь? Ведь в папке сайта файлы ядра перемешаны с пользовательским кодом и ассетами. Да, мы можем создать репозиторий в корне сайта, добавить в .gitignore папки ядра, и пользовательские папки, где хранятся картинки, так как добавить их в Git не представляется возможным. Но останется море файлов плагинов, которые могут занять значительный объем, а ведь они не будут часто меняться. Зачем их тогда держать под контролем Git? На наше счастье большинство этих проблем уже решены в специальном бойлерплейте для WordPress под названием Bedrock. Он имеет оригинальную структуру, отличающуюся от привычной нам:

├── composer.json
├── config
│   ├── application.php
│   └── environments
│       ├── development.php
│       ├── staging.php
│       └── production.php
├── vendor
└── web
    ├── app
    │   ├── mu-plugins
    │   ├── plugins
    │   ├── themes
    │   └── uploads
    ├── wp-config.php
    ├── index.php
    └── wp

Ядро WordPress и плагины не находятся под контролем Git и устанавливаются при помощи Composer. Веб-директорией является папка web. Ядро при этом установится в подпапку wp, а плагины и темы будут располагаться в подпапке app.

Как же решена проблема доставки плагинов? Для этого создан отличный ресурс Wpackagist, который аккумулирует плагины из каталога WordPress и создает для каждого пакет Composer. Для установки нужного плагина достаточно набрать в консоли подобную команду, найдя свой плагин в каталоге Wpackagist:

composer require wpackagist-plugin/akismet

Проект с Bedrock на борту создаётся командой:

composer create-project roots/bedrock НАЗВАНИЕ_ПРОЕКТА

Все настройки проекта хранятся не в привычном wp-config.php, а в файле .env, который обычно используют фреймворки наподобие Laravel или Symfony. После установки проекта, заполняем конфиг нашими данными и устанавливаем сайт обычным образом, открыв его адрес в браузере. Не забывайте, что веб-директория находится не в корне проекта и необходимо сменить настройки вашего веб-сервера перед запуском.

Деплой Bedrock-проекта

Деплой проекта на Bedrock принципиально отличается от тех способов, которые мы рассмотрели ранее. Теперь весь наш код находится под контролем и нет никакой нужды деплоить код с локального компьютера, можно автоматизировать этот процесс.

Деплой проекта на Bedrock состоит из следующих шагов:

  • Запуск клонирования репозитория проекта в новую папку(каждый деплой создает папку с новым порядковым номером);
  • После успешного клонирования запускаются команды установки, через Composer, и если это необходимо, сборка ассетов через Node.js;
  • Если установка также успешна, то в папке проекта симлинк current меняется на новый, указывающий на новую папку;

Мной написан минимальный конфиг для деплоя проекта с Bedrock, он находится в репозитории: https://github.com/zorca/wp-deploy.

Установить его просто - нужно скопировать файлы deploy.php и deploy.yml в папку проекта и поменять данные в конфиге deploy.yml на свои. Полный процесс деплоя запускается командой из Git Bash:

dep deploy

Для того, чтобы репозиторий был доступен с нашего удаленного сервера, на нем необходимо сгенерировать SSH-ключ и добавить его в нужный репозиторий проекта или в свою учетную запись в панели провайдера репозитория. Процесс всё еще не до конца автоматизирован. Для полной автоматизации нам необходимо настроить сервис для CI/CD, который будет запускать деплой при пуше в определённую ветку репозитория.

В следующей статье настроим автоматический деплой на примере Gitlab и Github.