Современная рабочая среда для 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 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 в данный момент полностью пустой. Сервер ответит следующим образом:
Это – хорошие новости, поскольку это означает, что сервер фактически отвечает на наш запрос.
Чтобы завершить установку, нам нужно сделать следующее:
- Создать базу данных
- Настроить среду приложения с учетными данными
Чтобы создать базу данных в нашем контейнере приложения, нам понадобится плагин 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