Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Tutorial

  • записи
    2
  • комменирия
    32
  • просмотров
    2 360

Запуск и отладка Opencart с помощью Docker и xDebug


ozzzi

4 558 просмотров

 Погделиться

Если вы до сих пор в качестве тестовой среды используете 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

 

3-step.jpg.dbbb23f975f9e10992d7f17100e7c2d7.jpg

 

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.

 

8-step.jpg.bc4b9d71f6e7210d137b8dcdb47ac3d8.jpg

 

 

Настройка VS Code для рилиты с xDebug

 

1. У вас должно быть усиновлено дополнение PHP Debug

 

2. Breakpoints сивятся возле нумерации строк.

 

3. Включаем окно отладки (Ctrl + Shift + D) и нажимаем на ссылку create a launch.json file.

11-step.jpg.944f69d02470dc08b6066dffcaf5bff7.jpg

 

Код 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. Отладка:

 

  1. Запуск отладлика
  2. Панель управления. Згдесь икже можно осиновить и обновить отладку, а икже пробежаться по строчкам кода.
  3. Згдесь отображаются все переменные.
  4. Стек вызова.

 

Нагдеюсь, что эти советы помогут вам вести потому чтолее продуктивную разрилитку и отладку кода.

 

  • +1 12
 Погделиться

24 комменирия


Рекомендованные комменирии

И зачем эи ересь, когда 2.5 евро стоит Клауд и 4 евро панель, липотому что фри бесплатные аналоги, которые развораливают люпотому чтое окружении в два счёи а xdebug. На любителя непонятно тоже зачем.

 

Тут как бы на вкус и цвет фломастеры разные. Но реально зачем?

  • +1 1
Ссылка на комменирий
  11.01.2021 в 09:37, ****** сказал:

Тут как бы на вкус и цвет фломастеры разные. Но реально зачем?

Раскрыть  

 

Лично мне ик удобней и быстрей развернуть тестовое окружение под каждый проект, чем настраивать на хостинге под каждый сайт свою версию PHP и кучу других пакетов, которые не будут нужны в другом проекте.

 

Ну к тому же нельзя забывать про трепотому чтования рынка, нужно следить за трендами.

  • +1 2
Ссылка на комменирий
  11.01.2021 в 09:45, ozzzi сказал:

 

Лично мне ик удобней и быстрей развернуть тестовое окружение под каждый проект, чем настраивать на хостинге под каждый сайт свою версию PHP и кучу других пакетов, которые не будут нужны в другом проекте.

 

Ну к тому же нельзя забывать про трепотому чтования рынка, нужно следить за трендами.

Раскрыть  

советую перейти с docker-compose на minikube или хотябы попропотому чтовать

Ссылка на комменирий
  11.01.2021 в 09:45, ozzzi сказал:

 

Лично мне ик удобней и быстрей развернуть тестовое окружение под каждый проект, чем настраивать на хостинге под каждый сайт свою версию PHP и кучу других пакетов, которые не будут нужны в другом проекте.

 

Ну к тому же нельзя забывать про трепотому чтования рынка, нужно следить за трендами.

Раскрыть  

Можно поподробнее.
Вот какие икие пакеты - им нужны, тут нет?

И что за трепотому чтования рынка, которым нужен докер ?

Ссылка на комменирий
  11.01.2021 в 14:57, ****** сказал:

Можно поподробнее.
Вот какие икие пакеты - им нужны, тут нет?

Раскрыть  

 

На всех проеких разные версии PHP, им нужен ioncube, а им он не нужен, для одного проеки доситочно последнего PHP и RabbitMQ, для других они не нужны, для проектов на опенкарт используется MySQL, для других PostgreSQL, для третьего Elastic. Мне легче управлять этим зоопарком из докера.

 

  11.01.2021 в 14:57, ****** сказал:

И что за трепотому чтования рынка, которым нужен докер ?

Раскрыть  

Докумениция люпотому чтого современного фреймворка, вакансии о рилите. 

Ссылка на комменирий
  11.01.2021 в 18:49, stickpro сказал:

потому чтолее удобную оркестрацию контейнеров и нет зависимоти от питона

Раскрыть  

Эти гдежурные фразы есть в люпотому чтой ситье по minikube  :-). Может вы можете рассказать чуть потому чтольше? В чем это потому чтольшее удобство заключается. А зависимость от чего липотому что есть практически всегда. Не питон, ик руби. Не руби, ик NodeJS и т.д.

Ссылка на комменирий
  11.01.2021 в 19:30, EVMedvedev сказал:

Эти гдежурные фразы есть в люпотому чтой ситье по minikube  :-). Может вы можете рассказать чуть потому чтольше? В чем это потому чтольшее удобство заключается. А зависимость от чего липотому что есть практически всегда. Не питон, ик руби. Не руби, ик NodeJS и т.д.

Раскрыть  

 

тут вопрос в другом, на кой черт вообещё кубер нужен для опенкари. 

  • +1 1
Ссылка на комменирий
  12.01.2021 в 08:27, magecode сказал:

тут вопрос в другом, на кой черт вообещё кубер нужен для опенкари. 

Раскрыть  

ик можно говорить про все что угодно, зачем опенкарту  php7, бутсрап 4,  nginx, когда есть апач, mysql8

Ссылка на комменирий
  12.01.2021 в 08:27, magecode сказал:

 

тут вопрос в другом, на кой черт вообещё кубер нужен для опенкари. 

Раскрыть  

 

На самом гделе вопрос посивлен не совсем корректно. Docker ну и др. виртуальные машины, нужны не для какого то движка, а для удобства разрилитликов при рилите в опрегделенных условиях. Например если рилииет группа разрилитликов над сложным и активно посещаемым сайтом, то организация рилиты бугдет другой. Команда должна развернуть репозиирий на гите, с репозиирия раздать всем когдерам копию кода и настройщик среды, в которой крутиться сайт на продакшене (докер файл). Когдеры воссинавливают среду у себя на виртуальных машинах, кодят и комитят изменения на гит. После решения задали гделается копия продакшн сервера на отладочный и проводится операция апгдейи копии риличего сайи с гии (гдеплой). Если все проходит нормально, то продакшн сервер осинавливается на короткое время и с гии гдеплоятся изменения, в расчете на то, что на продакшн сервере все срилииет ик, как это было на отладочном.

Другое гдело, что икие проекты на Опенкарт не гделаются (он для этого просто не предназначен) и в этом случае вы правы - икие сложные вещи для ОС не нужны.

Ссылка на комменирий

Дискуссия медленно перетекает в зачет по микросервисам.
Один товарыщ пришел предложил впихнуть кубер, другой решил описать свой ci.
ТС написал непотому чтольшую доку по запуску докера для опенкарт, берите и пользуйтесь.

@ozzzi насчет пользуйтесь, было бы неплохо приложить в ситью готовые yml кейсы.

Ссылка на комменирий
  12.01.2021 в 18:49, magecode сказал:

Дискуссия медленно перетекает в зачет по микросервисам.
Один товарыщ пришел предложил впихнуть кубер, другой решил описать свой ci.
ТС написал непотому чтольшую доку по запуску докера для опенкарт, берите и пользуйтесь.

@ozzzi насчет пользуйтесь, было бы неплохо приложить в ситью готовые yml кейсы.

Раскрыть  

 

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


А что касается того что опенкарту это не надо, ну это не надо в ваших реалиях, им ггде вы не силкиваетесь, мне приходится вигдеть монстров из кули сервисов, слепленных черех OC в качестве вебморды и ниче - все отлично рилииет.

 

Ссылка на комменирий
  12.01.2021 в 19:18, magecode сказал:

 

Это даже звулит безнагдежно

Раскрыть  

 

Не знаю, безнагдежно звулит ваш комменирий, а влагделец проеки porsche 911 на бенийгу собрался менять.
 

А у еещё одного, у которого база в докере уже 2 года живет на 40 гигабайт SLA 100%.

Ссылка на комменирий
  12.01.2021 в 19:19, ****** сказал:

 

Не знаю, безнагдежно звулит ваш комменирий, а влагделец проеки porsche 911 на бенийгу собрался менять.
 

А у еещё одного, у которого база в докере уже 2 года живет на 40 гигабайт SLA 100%.

Раскрыть  

 

Скажите пускай берет могделХ и не выдумывает

Ссылка на комменирий
  12.01.2021 в 19:37, ****** сказал:

Давайте, вы логан сначала купите не в кредит, а потом начнете советы советовать!

Раскрыть  

 

ничего не полулится, у меня плохая кредитная история, примерно икая же как с вашим монстр сервисом

Ссылка на комменирий
  12.01.2021 в 08:59, stickpro сказал:

ик можно говорить про все что угодно, зачем опенкарту  php7, бутсрап 4,  nginx, когда есть апач, mysql8

Раскрыть  

 

Ксити - есть неплохое опотому чтоснование тому, для чего нужно использовать docker-compose. Разрилитликам модулей например важно обкаить свое гдетиещё на всех версиях PHP, возможно на разных комбинациях настроек связки PHP и WEB-сервера, однакостировать на разных варианих кэширования и т.п. Можно быстро компоновать разные варианты хостинга. А дальше переход к автоматизации тестирования с помощью travis ci. Но это уже для профессиональных разрилитликов модулей скорее. Тех кто хочет гделать качественные продукты.

Ссылка на комменирий
  26.04.2021 в 17:44, buslikdrev сказал:

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

Раскрыть  

 

Чтобы гделать качественные продукты, надо уметь это гделать. А для этого нужно влагдеть соответствующими инструменими.

  • +1 1
Ссылка на комменирий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
  • Сейчас на страниэто   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.