Гайд для remote подключения. Постарался обьяснить максимально подробно для новичков, так как понимаю как больно прыгать по статьям и теряться в последовательности. Тема актуальная, в силу того, что локалки не у всех мощные — иногда проще работать через виртуалку. Надеюсь моя бессонная ночь с загадкой о проблеме поможет кому нибудь справиться с этим за полчаса.
Предварительно необходимо убедиться, чтобы в контейнере под php-fpm у вас был пакет Xdebug. Нужно либо установить в ручную, либо зашить в Dockerfile — конечно же второе будет лучше, т.к не придется при перезапуске делать одно и то же действие с установкой.
Мой DockerFile пример с командами установщика ( для удобства прикрепляю целиком, чтобы вы не гадали какой порядок тех или иных команд )
Dockerfile
FROM php:8.1-fpm USER root RUN apt-get update && apt-get install -y \ apt-utils \ libpq-dev \ curl \ libpng-dev \ iptables-persistent \ libzip-dev \ libfreetype6-dev \ libjpeg62-turbo-dev \ zip unzip \ iputils-ping \ git && \ docker-php-ext-install pdo_mysql && \ docker-php-ext-install bcmath && \ docker-php-ext-configure gd --with-freetype --with-jpeg && \ docker-php-ext-install gd && \ docker-php-ext-install zip && \ docker-php-ext-install exif && \ pecl install xdebug && \ docker-php-ext-enable xdebug && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ COPY ./.docker/php/conf.d/php.ini /usr/local/etc/php/conf.d/php.ini COPY ./.docker/php/conf.d/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini RUN rm /usr/local/etc/php-fpm.d/www.conf COPY ./.docker/php/conf.d/www.conf /usr/local/etc/php-fpm.d/www.conf # Install composer ENV COMPOSER_ALLOW_SUPERUSER=1 RUN curl -sS https://getcomposer.org/installer | php -- \ --filename=composer \ --install-dir=/usr/local/bin WORKDIR /var/www/myproject
Также в конфигурации xdebug.ini, которая должна лежать по пути /php/conf.d/xdebug.ini
Должны быть следующие настройки
xdebug.start_with_request=yes
xdebug.mode=debug
xdebug.client_host=<ваш белый айпи>
xdebug.log="/tmp/xdebug.log"
xdebug.client_port=9003
xdebug.idekey=PHPSTORM
Если все ок перезапускаем контейнера на всякий случай с флагом билд
sudo docker-compose up -d —build
Если не ок, то разбираемся с докером.
1.1 Настройки роутера
-
Убедитесь, что у вас белый айпи на роутере
-
Для этого можно попробовать перезагрузить роутер и посмотреть меняется ли ip например на сайте 2ip
-
По умолчанию услуга статического айпи не включена в стоимость, поэтому ее необходимо докупить у провайдера, провалившись в личный кабинет вашего провайдера и после этого перезагрузить роутер — у вас появится новый айпи, который не должен меняться при повторной перезагрузке.
-
-
После того как вы убедились, что ip статический (белый) — необходимо пробросить порты на роутере. Для этого провалитесь по адресу http://192.168.0.1 для некоторых роутеров, или http://192.168.1.1 — в форме логина, если никто не менял пароли можно посмотреть креды на обратной стороне роутера. По умолчанию это что то типа admin:admin.
-
В панели настроек найдите раздел с port forwarding. ( он может находиться в network или в разделе сетевой экран )
-
Необходимо открыть 9003 порты для wan сети, добавив строку в таблице для протоколов TCP&UDP. В некоторых ситуациях нужно также указать ip назначения — это может быть в контексте вашего локального устройства, или устройства, которое отправляет запросы (ip виртуалки). В моем случае это было локальное устройство. Посмотреть айпи устройства в локальной сети можно с помощью команды
ipconfig getifaddr en0в случае если у вас macos и нету кабеля ethernet напрямую в устройство. Если кабель есть то вместо 0 на конце команды поменяйте на единицу. -
После открытия портов на всякий случай можно перезагрузить роутер
-
-
Чтобы убедиться, что у нас нет ошибок на уровне портов и коннекта необходимо проверить это дело следующим образом:
-
Для проверки запросов можно использовать простую утилиту dbgpClient от xdebugger. Ее можно установить по ссылке и запустить из терминала локальной машины с помощью ./dbgpClient-macos
Он начнет прослушивать порт 9003 и напишет
Waiting for debug server to connect on port 9003.-
В случае , если 9003 порт уже занят — мы можем его убить с помощью
sudo kill -9 <PID>а сам PID посмотреть с помощью командыsudo lsof -i :9003
-
-
После запуска кидаем запрос с самой локальной машины на себя же с помощью команды
telnet 127.0.0.1 9003(если нет telnet , то установите эту утилиту командойbrew install telnet. Если нет homebrew — то устанавливайте его ) -
Если запрос прошел успешно в окне терминала с запущенной утилитой xdebug появится строка коннекта. Если же нет, то скорее всего у вас включен брэндмауэр с блокировкой доступов ( другими словами firewal ) — который можно выключить в системных настройках -> конфиденциальность и безопасность (в разделе брэндмауэра).
-
-
Для проверки с виртуалки (заходим на виртуалку) и делаем так:
curl -Iv <белый ip>:9003-
Возможно придется установить curl , если он выдаст ошибку curl not found. Установить вы его можете следующими командами для ubuntu
-
sudo apt update -
sudo apt install curl -
И проверьте что он установлен корректно
curl –version
-
Если курл прошел успешно в окне терминала с запущенной утилитой xdebug появится строка:
Connect from <ip виртуалки>:<port>Если курл не прошел, то возможно на виртуальной машине также есть настройки файрвола , которые запрещают 9003 порт. Ну и для теста можно попытаться и установить правила разрешения в ручную через утилиту ufw —
sudo ufw status(проверка портов) -
-
В xdebug.ini ставим белый айпишник, перебилдим контейнера на всякий случай и можно переходить к настройкам IDE.
1.2 Настройки PhpStorm
Предварительно добавьте ssh конфигурацию со своим удаленным сервером в IDE, чтобы не подключаться по ssh каждый раз руками.
-
Сначала в настройках IDE вам необходимо создать сервер для php интерпретатора.
-
Зайдите в Preferences IDE -> PHP -> Servers и создайте сервер, если ваш сайт работает на домене, в разделе host надо указать домен без протокола (example.com) , если на домене не установлен https — указываем порт 80, если установлен , то указываем 443 порт
-
Ставим галку на Use path mappings.
-
-
Далее переходим в раздел PHP->Debug и в Xdebug подразделе указываем 9003 порт , ставим галку на can accept external connections и на остальных 3х пунктах ниже
-
Следующим пунктом нужно настроить удаленный php интерпретер — для этого переходим в сам раздел php, где строка CLI интерпретера в правом углу нажимаем троеточие, в левом сайдбаре нажмем плюсик и создадим новую конфигурацию для интерпретера
-
В Name вводим что угодно , выбираем ssh конфигурацию с нашей виртуалкой и в php executable указываем путь до php (стандартно он будет /usr/bin/php)
-
Остальное по вашему желанию, для меня это было не обязательно, не забудьте сохранить все и убедиться что в настройках PHP подтянулась новая конфигурация в строке CLI интерпретера, а также появилась строка path mappings
-
-
Теперь в правом верхнем углу IDE находим дропдаун слева от зеленого жучка , нажимаем ПКМ и переходим в edit configuration. Здесь необходимо создать конфигурацию для процесса дебага
-
Создаем на плюсик в левом сайдбаре PHP Remote Debug, имя любое
-
Сервер выбираем , который мы создавали
-
Ставим галку на filter debug by ide key и вводим в поле ide key строку
-
“PHPSTORM” — без кавычек.
-
После этого переходим к следующему этапу:
1.3 Расширение xdebug helper и отладка
-
В зависимости от браузера вам нужно установить расширение которое должно называться Xdebug Helper
-
Далее зайти в его параметры через ПКМ по иконке расширения и в контекстном меню пункт Параметры , где указать IDE KEY “PHPSTORM” — без кавычек
-
Переходим на домен или ip сервера, который вы указывали в конфигах IDE — PHP -> Servers. Нажимаем на расширение и выбираем режим debug в выпадающем списке.
-
Кидаем запрос еще раз и открываем IDE , в разделе debugger должен пойти процесс отлова брейкпоинтов
Приятной всем отладки!
ссылка на оригинал статьи https://habr.com/ru/articles/753264/
Добавить комментарий