
WPML for WooCommerce 5.5.2.2 — критическое исправление для WooCommerce 10.3
В готовящемся релизе WooCommerce 10.3 есть критическая проблема совместимости, которая вызывает неправильный расчет цен на вариации товаров.
С помощью Docker Compose, Xdebug и PhpStorm Вы можете создать воспроизводимую, изолированную и легко управляемую локальную среду разработки, которая является точной копией рабочего сервера, что повысит качество Ваших проектов на WordPress.
Приветствую коллег-разработчиков WordPress и опытных пользователей! Сегодня я рад поделиться подробным, но простым руководством по настройке локальной среды разработки WordPress с использованием Docker Compose. Недавно став частью динамичной команды OnTheGoSystems, я решил перенести свою привычную рабочую среду с собой, чему и посвящена эта настройка.
Цель была простой: создать среду, в которой у меня был бы детальный контроль над инструментами разработки, интегрировав Xdebug и WP-CLI с официальным образом WordPress для Docker. Речь идет не об изобретении велосипеда, а о его адаптации под индивидуальные предпочтения и стиль работы. Надеюсь, что это руководство поможет Вам в настройке аналогичной среды и сделает Вашу работу с WordPress еще эффективнее.
Чтобы извлечь максимум пользы из этого руководства, Вам потребуется установить следующие зависимости:
Наша цель — создать локальную среду разработки WordPress, которая будет изолированной, воспроизводимой и легко управляемой. Docker составляет основу этой системы, предоставляя инфраструктуру для контейнеризации приложения и управления им. Xdebug и PhpStorm дополняют эту картину, предлагая расширенные возможности для разработки и отладки PHP-кода.
Наш путь начнется с создания файла Dockerfile, который расширяет официальный образ WordPress для Docker. Мы улучшим этот образ, добавив Xdebug и WP-CLI — инструменты, играющие ключевую роль в задачах разработки и отладки WordPress.
Затем мы составим файл Docker Compose для координации двух ключевых сервисов: WordPress и MySQL. И, хотите верьте, хотите нет, но на этом, по сути, всё!
Прелесть этой настройки в том, что в результате получается локальная среда разработки, которая не только является точной копией рабочего сервера, но и легко воспроизводится. Это означает, что мы можем без труда продублировать точно такую же конфигурацию в нескольких средах или на разных машинах, обеспечивая согласованность и снижая количество проблем, связанных с настройкой.
Наш путь начинается с создания нового файла Dockerfile. Этот файл указывает Docker, как собрать наш образ. Вот базовая конфигурация, с которой я обычно начинаю:
# Use the official WordPress image as a parent image
FROM wordpress:latest
# Install Xdebug
RUN pecl install xdebug
# Install WP-CLI
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
chmod +x wp-cli.phar && \
mv wp-cli.phar /usr/local/bin/wp
# Copy xdebug.ini into the container
COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
В этом Dockerfile мы берем за основу официальный образ WordPress. Затем мы устанавливаем Xdebug и WP-CLI отдельно для ясности и удобства обслуживания. Конфигурационный файл Xdebug (xdebug.ini) копируется в соответствующий каталог внутри контейнера. Это формирует основу моей стандартной конфигурации локальной среды разработки WordPress.
Теперь, когда Xdebug установлен в нашем образе Docker, нам нужно настроить его для работы в локальной среде разработки. Для этого необходимо создать файл xdebug.ini со следующими настройками:
ini zend_extension=xdebug xdebug.mode=debug xdebug.client_port=9003 xdebug.start_with_request=yes
Эти настройки включают расширение Xdebug, задают запуск отладки при каждом запросе и определяют порт клиента, к которому оно должно подключаться (в данном случае 9003). Возможно, Вы заметили, что мы еще не указали client_host, но не волнуйтесь, он появится очень скоро в процессе нашей настройки.
Далее мы создадим файл docker-compose.yml, который настраивает наши сервисы WordPress и MySQL:
yaml
version: '3'
services:
# MySQL Service
mysql:
image: mysql:latest
container_name: mysql_container
restart: always
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
# WordPress Service
wordpress:
depends_on:
- mysql
image: wordpress:latest
container_name: wp_container
volumes:
- ./wp_data:/var/www/html
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DEBUG: 1
XDEBUG_CONFIG: client_host=host.docker.internal
ports:
- "8000:8000"
volumes:
db_data:
В этом файле мы определили два сервиса — MySQL и WordPress. Оба этих сервиса имеют уникальные имена контейнеров для упрощения обращения к ним и управления.
Директива restart: always гарантирует, что сервис всегда будет перезапускаться в случае непредвиденной остановки. Если он остановлен вручную, он перезапустится только при ручном перезапуске контейнера.
Сервис MySQL монтирует том Docker (db_data), обеспечивая постоянное хранение данных даже при удалении контейнера. Для сервиса WordPress мы монтируем локальный каталог (./wp_data) в контейнер. Это означает, что любые изменения в файлах WordPress в нашей локальной системе будут отражаться в контейнере.
Мы добавили две дополнительные переменные окружения для сервиса WordPress: WORDPRESS_DEBUG для включения отладки WordPress и XDEBUG_CONFIG для указания хоста клиента для Xdebug. Для client_host задано значение host.docker.internal — это специальное DNS-имя, которое маршрутизируется на внутренний IP-адрес хоста, позволяя Xdebug обмениваться данными с нашей IDE на хосте.
Обратите внимание, что настройка client_host адаптирована для Windows и macOS. Для Linux распространенной альтернативой является замена host.docker.internal на фактический IP-адрес Вашей машины, который можно узнать с помощью команды терминала ip addr show.
Когда Ваши файлы Dockerfile, конфигурационный файл Xdebug и файл Docker Compose будут готовы, придет время запустить локальную среду разработки WordPress.
Для этого просто перейдите в каталог, содержащий Ваш файл Docker Compose, в терминале и выполните следующую команду:
bash docker-compose up -d
Эта команда укажет Docker запустить Ваши сервисы в фоновом режиме.
После успешного выполнения на Вашей локальной машине будет запущен сайт WordPress, доступный по адресу http://localhost:8000. Любые изменения, которые Вы вносите в PHP-файлы WordPress, теперь будут отражаться на этом сайте, предлагая простой и эффективный способ разработки и отладки Вашего приложения на WordPress.
Кроме того, будет запущен и сервис MySQL, доступный через порт 3306. Это обеспечивает полнофункциональную базу данных MySQL для Вашего приложения на WordPress, воссоздавая реалистичную среду для задач разработки.
Для тех, кто хочет глубже изучить конфигурацию PHP, мы можем добавить файл phpinfo.php в наш образ Docker. При обращении к этому файлу будет представлен подробный обзор Ваших настроек PHP.
Чтобы добавить файл phpinfo.php, Вам сначала нужно создать его в том же каталоге, что и Ваш Dockerfile. Файл должен содержать следующий PHP-код:
<?php phpinfo(); ?>
Затем добавьте следующую строку в Ваш Dockerfile:
# Bonus: Copy phpinfo.php into the container COPY phpinfo.php /var/www/html/phpinfo.php
Эта команда скопирует файл phpinfo.php в корневой каталог WordPress внутри образа Docker.
Чтобы эти изменения вступили в силу, Вам нужно будет пересобрать образ Docker и перезапустить сервисы Docker Compose. Выполните следующие команды в терминале:
bash docker-compose down docker-compose up -d --build
Команда docker-compose down останавливает и удаляет Ваши текущие контейнеры Docker. После этого команда docker-compose up -d –build пересобирает образ Docker с недавно добавленным файлом phpinfo.php и перезапускает сервисы WordPress и MySQL в фоновом режиме.
Теперь Вы можете получить доступ к файлу phpinfo.php, перейдя по адресу http://localhost:8000/phpinfo.php в Вашем веб-браузере. Здесь Вы увидите подробную страницу с описанием конфигурации PHP, которая может стать ценным ресурсом для отладки и проверки.
Теперь, когда Ваша локальная среда разработки WordPress настроена с помощью Docker, Xdebug и PhpStorm, Вы можете приступить к отладке сайта на WordPress. Вот краткое описание того, как начать:
В завершение этого руководства я надеюсь, что оно станет для Вас таким же ценным ресурсом, каким было для меня в моей работе. Возможность настройки этой среды — как мы это сделали, добавив файл phpinfo.php — открывает множество возможностей, делая наш процесс разработки более надежным и эффективным. Весь код доступен в этом репозитории GitHub. Не стесняйтесь скачивать его, пробовать и предлагать улучшения!
Лично я использую ОС Ubuntu, но прелесть этой конфигурации в том, что благодаря Docker это не имеет значения! Поскольку Docker может одинаково работать в любой операционной системе, предпочитаете ли Вы macOS, Windows или Linux, настройка и использование остаются неизменными!
Спасибо, что прошли это руководство вместе со мной. Надеюсь услышать от Вас о Вашем опыте или любых предложениях по дальнейшему улучшению этой конфигурации. Помните, что развитие основывается на обмене знаниями и духе сотрудничества.
Успешного программирования, и давайте продолжать создавать потрясающие проекты на WordPress вместе!