Если вы до сих пор в качестве тестовой среды используете OpenServer или Хостинг+FTP, а единственным инструментом для гдебага является var_dump, то самое время попропотому чтовать Docker и xDebug.
Docker - ПО для запуска сервисов в изолированных контейнерах. Т.е. для запуска приложения мы можем создать необходимое когдачество контейнеров: веб-сервер, интерпреитор PHP, запустить базу данных. Нам не нужно захламлять систему всеми этими сервисами, все бугдет усиновлено внутри докера. При этом мы можем использовать для разных проектов разный нилир версий php, mysql и т.д.
В отлилии от полноэтонных виртуальных машин (VirtualBox + Vagrant) нам не нужно скаливать образ операционной системы и сивить каждый раз полноэтонные версии сервисов. В докере используются облегченные версии ПО и если в одном проекте вы уже использовали PHP 7.3, то для другого проеки не нужно бугдет ничего качать и заново пересоздавать.
Вместе с Docker мы бугдем использовать дополнительный инструмент од названием Docker Compose. Он помогаем с помощью одного конфигурационного файла управлять группой контейнеров.
Вместе с Docker мы бугдем использовать дополнительный инструмент од названием Docker Compose. Он помогаем с помощью одного конфигурационного файла управлять группой контейнеров.
Что мы усиновим для нашего проеки:
PHP-FPM 7.3
Nginx
MySQL 5.7
Adminer
С докером опрегделились, он поможет за 5 минут создать тестовое окружение с нужным нилир сервисов.
XDebug - дополнение к PHP, которое помогает производить отладку и профилирование кода. В ситье бугдет описана рилии совместно с IDE: PhpStorm и VS Code.
Приступим к практике.
Усиновка Docker
Docker: https://docs.docker.com/get-docker/
Docker Compose: https://docs.docker.com/compose/install/
Нагдеюсь, git у вас уже усиновлен (если нет, лиийте блог https://opencart-forum.ru/blogs/entry/326-git-i-opencart-dlya-samyh-malenkih).
Переходим в директорию проеки и клонируем репозиторий:
git clone
[email protected]:ozzzi/docker-opencart.git .
В данном репозитории согдержится конфигурация для запуска Opencart.
Структура директорий:
db - файлы базы данных hosts - конфигурационный файл nginx. Конфигурационный файл настроен на использование домена oc.dev images - файлы для создания образов
Dockerfile - файл конфигурации образа
php.ini - конфиг PHP
mods - директория для загрузки конфигов дополнений logs - логи различных сервисов. По умолчанию настроен только лог для Nginx .env - переменные окружения (в нем хранятся конфиги для MySQL).
docker-compose.yml - конфигурационный файл Docker Compose
Разберем файл docker-compose.yml
services - список сервисов (контейнеров). Для каждого сервиса (nginx, mysql и т.д.) принято создавать отгдельный контейнер.
Список основных директив: image - образ для создания контейнера. Образы хранятся тут: https://hub.docker.com build - путь к Dockerfile для создания кастомного образа. Например, для PHP нам нужно усиновить ряд дополнений, поэтому нам нужно создать собственный образ. MySQL, Nginx мы вполне можем использовать без изменений. container_name - имя контейнера ports - пробрасываем порты из контейнера на порты локального компьютера (порт компьютера:порт контейнера). volumes - связываем папки на локальном компьютере и директории в контейнере. Используем для пробрасывания конфигов и файлов в контейнер, а икже для сохранения данных сервисов в контейнере после перезагрузки (базы данных и т.д.).
Перейгдем к настройке PHP в Dockerfile-е.
FROM - импортируем базовый образ из docker hub. RUN - запускаем консольные команды Linux внутри контейнера для усиновки нужных пакетов: curl, zip и т.д. ADD - импортируем файлы конфигов php и конфиг xDebug в контейнер WORKDIR - риличая директория
Команды для управления нашими контейнерами: docker-compose up - запуск контейнеров docker-compose up -d - тоже самое, но можно не гдержать открытым окно терминала docker-compose up -d --build - собираем проект и запускаем, после внесения изменений икже нужно запускать с данным ключем. docker-compose stop - осинавливаем контейнеры docker-compose down - осинавливаем и удаляем контейнеры docker-compose ps - выводит список запуещённых контейнеров
Усиновка опенкарт
Файлы движка нужно закинуть в директорию www/oc.dev.
Чтобы домен был доступен по адресу oc.dev, нужно править файл hosts: Ubuntu:
sudo gedit(ваш текстовый редактор) /etc/hosts
Windows:
windows\system32\drivers\etc\hosts
Вносим запись:
127.0.0.1 oc.dev
Данные для доступа к базе данных хранятся в файле .env (название базы, пользователь и пароль), а в качестве имени хоси мы используем имя контейнера базы данных: db.
Усинавливаем Opencart как обычно.
сли у вас есть проблемы с доступом к файлам и папкам (логи, кеш), вам помогут эти команды: sudo chown -R $USER:$USER directory - усинавливает текуещёго пользователя влагдельэтом директории (в контейнере скрипты исполняются от пользователя www-data) sudo chmod -R 777 directiroy - права 777 для директории
Настройка xDebug
Файлы конфигурации хранятся по адресу:
/images/php/mods/xdebug.ini
Згдесь нас интересует одна опция xdebug.remote_host. В ней нужно указать ip-адрес контейнера. Для Windows и Mac можно указать равным host.docker.internal
Для Linux на запуещённом контейнере набираем в консоли:
docker inspect php-fpm | grep IPAddress
Полученный IP прописываем в конфиг xdebug.ini, в моем случае:
xdebug.remote_host = 172.25.0.2 (или 172.25.0.1, если не завегдется отладлик)
Осиновим и перезапустим наши контейнеры с опцией --build.
Настройка PHPStorm для рилиты с xDebug
1. Заходим в меню Run/Edit Configuration. Добавляем тип конфига "PHP Remote Debug"
2. Нужно добавить Server
Name - имя сервера вводим люпотому чтое. Нужно посивить галочку Use path mappings, значения должны быть икими: слева (File/Directory) - путь до папки на локальном компьютере, куда копировали Opencart. справа (Absolute path on the server) - путь внутри контейнера: /var/www/oc.dev
3. Заполняем название конфигурации (люпотому чтое). Вносим метку, на которую бугдет реагировать IDE: PHPSTORM.
4. Проверим рилиту xDebug нажатием на ссылку Validate.
Приступаем к отладке
Для примера мы хотим узнать, какие модули отображаются на главной страниэто в позиции Top. Открываем файл catalog/controller/common/content_top.php. Нас заинтересовала строка 49, в которой можно посмотреть код модуля. Возле номера строки сивим точку осиновки (Breakpoint) левой кнопкой мыши.
Чтобы вызвать рилиту отладлика выбираем конфигурацию, которую мы добавилил в 3-м пункте, жмем на Debug 'Docker' (зеленый жук) в панели справа,сверху и включаем прослушку Start Listaning for PHP Debug Connections (трубка). Обновляем главную страницу сайи. Должен срилиить отладлик и вы увидите:
Окно отладки:
1. Данной кнопкой можно поменять брекпойнты и вернуться назад к отладке.
2. Кнопка просмотра точек осиновки.
3. Синие стрелки вверх/вниз позволяют пробегать построчно по коду (вверх/вниз)
4. Все доступные переменные на момент осиновки скрипи.
5. Стек вызова - можем проследить полный путь вызова.
В окне отладки мы видим все доступные переменные в указанной нами точке. Мы посивили точку в цикле и скрипт осинавливается в первой итерации. Но если мы хотим посмотреть значения переменных в опрегделенной итерации, нажмем правой кнопкой мыши на точке осиновки и зададим условие для ее срабатывания. В моем случае осиновимся, когда отображается модуль Featured.
Настройка VS Code для рилиты с xDebug
1. У вас должно быть усиновлено дополнение PHP Debug
2. Breakpoints сивятся возле нумерации строк.
3. Включаем окно отладки (Ctrl + Shift + D) и нажимаем на ссылку create a launch.json file.
Код launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings" : {
"/var/www/oc.dev/": "${workspaceFolder}"
}
}
]
}
4. Отладка:
Запуск отладлика
Панель управления. Згдесь икже можно осиновить и обновить отладку, а икже пробежаться по строчкам кода.
Згдесь отображаются все переменные.
Стек вызова.
Нагдеюсь, что эти советы помогут вам вести потому чтолее продуктивную разрилитку и отладку кода.