Современная рабочая среда для WordPress на базе Docker и Dokku

Каждый разработчик рано или поздно сталкивается с WordPress, учитывая, что это одна из самых популярных блоговых платформ/CMS, если не самая популярная. Как говорит Википедия, примерно 22% веб-сайтов работают на данной системе (что означает один сайт из пяти), она прекрасно известна пользователям, у нее есть многочисленное сообщество (более чем 30 тысяч предложенных плагинов), и она активно поддерживается разработчиками.

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

Обычно поток операций включает в себя:

  • Загрузка последней стабильной версии WordPress
  • Переименование wp-config-sample.php в wp-config.php
  • Если вы используете git (а вы должны это делать!), добавление wp-config.php к .gitignore
  • Открытие соединения (по возможности не FTP, но скорее всего это будет именно оно) и (медленная) загрузка всего необходимого на сервер
  • Создание удаленного wp-config.php с конфигурацией продакшна
  • Запуск инсталлятора
  • Надежда на то, что никто не перезапишет  wp-config.php на локальную копию

С другой стороны, современные потоки операций строятся вокруг некоторой системы управления версиями (обычно git), в которой развертывание осуществляется путем передачи (pushing) ветви (branch) на публичный сервер.

Называется такой подход «push-to-deploy» и именно он используется в Heroku.

К счастью, несколько умных парней решили создать Docker и Dokku, два проекта, которые позволяют создать свой собственный heroku-подобный PaaS за пару минут (если вы хотите попробовать их, Digital Ocean предлагает облачные серверы с предустановленным Dokku всего за 5 долларов в месяц). Давайте посмотрим, как применить эти проекты к WordPress.

Дальше в статье я буду использовать следующие данные:

  • app – название приложения
  • dokku – адрес (или имя хоста, если задано) целевого сервера, на котором запущены Docker  и Dokku
  • dokku-user – пользователь, запускающий Dokku на удаленной машине

Сначала мы должны клонировать WP с github:

git clone [email protected]:WordPress/WordPress.git app

Затем мы создаем файл wp-config.php, изменяем параметры конфигурации на переменные среды, и коммиттим его. Таким образом, нам не придется задавать их в коде.

define('DB_NAME', getenv('WP_DB_NAME'));
 
/** MySQL database username */
define('DB_USER', getenv('WP_DB_USER'));
 
/** MySQL database password */
define('DB_PASSWORD', getenv('WP_DB_PASS'));
 
/** MySQL hostname */
define('DB_HOST', getenv('WP_DB_HOST'));
git add wp-config.php
git commit -m 'added WordPress configuration'

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

Если вы используете Apache, вы можете задать значения с помощью SetEnv, если вы работаете с  Nginx и phpf-pm, вы можете использовать раздел ENV вашего пула приложения.

При развертывании через Dokku вам не понадобится все это.

Для нашего первого развертывания нам понадобится добавить новый remote, указывающий на наш сервер Dokku:

git remote add dokku dokku-user@dokku:app

И передать код:

git push dokku master

Вы увидите следующее:

Counting objects: 163187, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (33726/33726), done.
Writing objects: 100% (163187/163187), 84.87 MiB | 4.95 MiB/s, done.
Total 163187 (delta 128758), reused 163156 (delta 128730)
-----> Building app ...
       PHP (classic) app detected
-----> Bundling NGINX 1.4.3
-----> Bundling PHP 5.5.5
-----> Bundling extensions
       phpredis
       mongo
-----> Setting up default configuration
-----> Vendoring binaries into slug
-----> Discovering process types
       Default process types for PHP (classic) -> web
-----> Releasing app ...
-----> Deploying app ...
-----> Cleaning up ...
=====> Application deployed:
       http://app_url
 
To dokku@dokku:app
 * [new branch]      master -> master

Как вы видите, все уже поставляется вместе с билдпаком PHP. Dokku обнаружил PHP приложение и дал Docker’у команду создать изолированный контейнер, который может запускать приложение.

Вы можете теперь открыть браузер и перейти к app_url (у него может быть два формата: http://ip_adress:port или http://app.defaultdomain). В любом случае это должно привести к запуску вашего приложения).

Наш wp-config в данный момент полностью пустой. Сервер ответит следующим образом:

error

Это – хорошие новости, поскольку это означает, что сервер фактически отвечает на наш запрос.

Чтобы завершить установку, нам нужно сделать следующее:

  • Создать базу данных
  • Настроить среду приложения с учетными данными

Чтобы создать базу данных в нашем контейнере приложения, нам понадобится плагин MariaDB plugin for Dokku.

Есть также MySQL-плагин, однако у него имеется раздражающий баг, а поскольку MySQL и MariaDB практически идентичны, мы будем придерживаться последнего.

Установка плагина для Dokku очень проста (напоминает обычный запуск):

cd /var/lib/dokku/plugins
git clone https://github.com/Kloadut/dokku-md-plugin mariadb
dokku plugins-install

Некоторые из плагинов не требуют финального шага plugins-install, однако это никоим образом не повредит.

Совет: вы можете запускать dokku команды на своей локальной машине и выполнять их на удаленном сервере: ssh dokku-host dokku-command (к примеру, ssh dokku help).

Теперь мы можем создать базу данных:

ssh dokku mariadb:create app
 
 -----> Creating /var/www/dokku/app/ENV
-----> Setting config vars and restarting app
DATABASE_URL: mysql2://root:[email protected]:49170/db
-----> Releasing app ...
-----> Release complete!
-----> Deploying app ...
-----> Deploy complete!
 
-----> app linked to mariadb/app database
 
-----> MariaDB container created: mariadb/app
 
       Host: 172.17.42.1
       Port: 49170
       User: 'root'
       Password: 'VQpzDZRrEUAkUuAI'
       Database: 'db'

И задать переменные среды:

# the format is dokku config:set app key=value key=value
 # I splitted up the command on different lines for clarity
 ssh dokku config:set app WP_DB_HOST='172.17.42.1:49170'
 ssh dokku config:set app WP_DB_NAME='db'
 ssh dokku config:set app WP_DB_USER='root'
 ssh dokku config:set app WP_DB_PASS='VQpzDZRrEUAkUuAI'

Если все прошло верно, то вы должны увидеть стандартную установку WordPress.

Выберите заголовок, создайте администратора и – все готово!

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

Мы рассказали вам, что можно сделать с помощью Docker и Dokku.

Блог про WordPress
Комментарии: 2
  1. Massimo Ronca

    Hi, I’m the original author of the article you kindly translated.
    Can you please point the source to the permalink of the article and link it?
    thank you!

    1. Дмитрий (автор)

      Ok!
      Thx for the article!

Добавить комментарий

Получать новые комментарии по электронной почте.