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

Sage — это стартовая тема WordPress, на основе которой можно легко создавать собственную тему. Она адаптирована под инструменты и особенности современной разработки frontend.

Создать новый сайт на WordPress с использованием Bedrock и Sage — очень просто. Ещё проще перевести на эти инструменты уже существующий сайт, созданный изначально на WordPress в традиционном виде.

Исходные данные

Имеем веб-сервер, например, на Debian 8. Установлены и настроены nginx, php-fpm, mysql и т.д. Также будем считать, что уже установлен Composer. Рекомендую эту статью, если вы не знакомы с установкой и настройкой этого базового софта.

Для сайта d1mon.site создаём каталог /var/www/d1mon.site и соответственно конфигурация nginx для сайта на WordPress будет выглядеть примерно так:

server {
  listen 80;
  server_name d1mon.site;

  root /var/www/d1mon.site;
  index index.php index.html;

  location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off;
    log_not_found off;
    expires 3d; # кеширование статики 3 дня
  }

  location / {
    try_files $uri $uri/ /index.php?$args; # красивые ссылки
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
  }

  access_log /var/log/www/d1mon.site/access.log;
  error_log /var/log/www/d1mon.site/error.log;
}

Bedrock

Переходим в каталог сайта /var/www/d1mon.site, выполняем:

 composer create-project roots/bedrock ./

Этой командой мы устанавливаем Bedrock непосредственно в этот каталог. Точнее, в соответствии с терминологией, мы создаём новый проект на Bedrock в этом каталоге.

Одновременно с этим мы получаем все нужные для работы сайта зависимости, в числе их WordPress новейшей версии.

В этом же каталоге находится пример файла конфигурации сайта .env.example. Скопируйте его в .env и настройте:

DB_NAME=имя_базы_данных
DB_USER=пользователь_базы_данных
DB_PASSWORD=пароль_этого_пользователя
DB_HOST=localhost

WP_ENV=development
WP_HOME=http://d1mon.site
WP_SITEURL=${WP_HOME}/wp

# Generate your keys here: https://roots.io/salts.html
AUTH_KEY='>DfN1%3?)g......xhy>#xvYn}.]'
SECURE_AUTH_KEY=',<J),4w!]......^1-n!0ADzP_Q<|'
LOGGED_IN_KEY='tP0X6;<.....B3YC#1f'
NONCE_KEY='o<}A{(rt....JX+Y$J{qa'
AUTH_SALT='%ymI@.....sfFr2fU)fI'
SECURE_AUTH_SALT='Yymd]p@.....^hN9@&+la@V'
LOGGED_IN_SALT='mATc#.....&gOEh{<5k2'
NONCE_SALT='ir3}.....DHcv?o)'

Указанная база данных должна быть пустой, если создаётся новый сайт.

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

Собственно на этом установка и настройка Bedrock завершена!

В соответствии с новой структурой каталогов, которую предлагает Bedrock для сайта, основной рабочий каталог это web. Именно он должен показываться в интернете. Это корневой каталог сайта. Часть других системных каталогов и файлов будут находится за его пределами, что полезно из соображений безопасности.

Перечень всех ключевых каталогов и файлов:

├── 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

Чтобы только каталог web показывался в интернете нужно изменить конфигурацию nginx для сайта. Следуя примеру приведённому выше надо найти строчку:

root /var/www/d1mon.site;

— корневой каталог сайта, где дописать нужное нам:

root /var/www/d1mon.site/web;

Перезапускам nginx:

/etc/init.d/nginx restart

Если вы создаёте новый сайт, то ничего предварительно делать больше не нужно. Открывайте свой сайт и следуйте указаниям мастера настройки WordPress.

Теперь, что касается переноса уже существующего WordPress-сайта:

  • Конечно, все операции по переносу необходимо производить не на работающем сайте. Лучше всего разверните локальный веб-сервер.
  • Перед началом работ лучше активировать стандартную тему и отключить все плагины.
  • Каталог сайта /var/www/d1mon.site должен быть пустым. Сначала мы разворачиваем в него Bedrock, а потом уже копируем в новую структуру каталогов свои plugins и uploads.
  • Базу данных разворачивайте существующего сайта, в файле конфигурации .env вписывайте её данные.
  • Поскольку изменилась структура каталогов, то те картинки, которые были загружены на сайт и вставлены в статьях, теперь имеют неверные адреса. Можно воспользоваться каким-нибудь плагином, который все исправит, а можно внести правки непосредственно в базе данных. Для меня проще встрой вариант. Создаём бэкап базы данных, открываем бэкап в каком-нибудь приличном редакторе, делаем автоматический поиск ссылок с заменой, загружаем бэкап обратно в базу.
  • Не торопитесь включать сразу все плагины. Особенно если это плагины ваши собственные. Возможно, они имеют привязку к вашей бывшей структуре каталогов и файлов. Включайте плагины по одному, проверяйте постоянно работоспособность сайта.

Sage

Чтобы установить стартовую тему перейдите в каталог тем /var/www/d1mon.site/web/app/themes и выполните команду:

composer create-project roots/sage mytheme 8.5.0

Здесь mytheme — это название вашей темы, задавайте любое.

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