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

Дата публикации:Май 14, 2014

Каждый разработчик рано или поздно сталкивается с 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 git@github.com: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 /home/dokku/app/ENV
-----> Setting config vars and restarting app
DATABASE_URL: mysql2://root:VQpzDZRrEUAkUuAI@172.17.42.1: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.

Источник: dev.mikamai.com

Поделиться

2 комментария

  1. Massimo Ronca says:

    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!

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.