Удаленная отладка через XDebug и PhpStorm (via ssh tunneling)
Многие программисты скорее всего уже наступали на эти грабли, проходили дальше, а грабли так и оставались... Если вам необходимо настроить удаленную отладку через SSH тунель, очень надеюсь что данный пост сэкономит Вам несколько часов времени, а после этого вы всегда сможете подсказать молодым специалистам куда пойти чтобы настроить XDebug через SSH-туннель)
Создание SSH-туннеля
Нам нужно пробросить порт с удаленного сервера на локальный комп. Удаленный XDebug отправляет в этот порт отладочную информацию, а наш PhpStorm будет слушать этот порт на локалке. Сначала определимся с номером порта, для этого посмотрим какие из 900x портов свободны. Вы вправе выбрать любой свободный порт, но поскольку XDebug по умолчанию использует port = 9000 - будет правильно выбрать порт из близкого диапазона.
Посмотреть список открытых (занятых) портов на сервере и локалке (на всякий):
netstat -tnlp | grep 900
Примерный вывод команды netstat
с сервера:
Proto Local Address Foreign Address State PID/Program name
tcp 127.0.0.1:9002 0.0.0.0:* LISTEN 24658/ssh
tcp6 ::1:9002 :::* LISTEN 24658/ssh
Смотрим какие из портов заняты и выбираем свободный. Допустим, это порт 9003.
Ok, создаем туннель - пробросим этот порт с сервера на локалку (выполнять на локалке):
ssh -R 9003:localhost:9003 user@server
user и server
- это имя пользователя и удаленного сервера, соответственно.
После выполнения этой команды обратите внимание на вывод в консоли. Удаленный сервер может вывести следующие ошибки:
bind: Cannot assign requested address
# используйте 127.0.0.1 вместо localhost
bind: Address already in use
# порт уже используется, выберите другой
Также стоит проверить доступность соединения через telnet
:
telnet 127.0.0.1 9003
Возможные ответы при подключении:
Connection closed by foreign host. # значит все хорошо
Unable to connect to remote host: Connection refused # ошибка подключения
Чтобы прервать telnet
подключение нажмите Ctrl+] потом Enter и Ctrl+D.
Проверим, что туннель успешно создан и порт открыт (на локалке):
Proto Local Address Foreign Address State PID/Program name
tcp 0.0.0.0:9003 0.0.0.0:* LISTEN 4861/java
Внимание!
В некоторых случаях, для проключения SSH-туннеля рекомендуют отключить IPv6 протокол. Боюсь не силен объяснить почему, но это помогло. После отключения IPv6, при создании туннеля может понадобится явно указывать что нужно использовать IPv4 протокол (параметр -4
):
ssh -4 -R 9003:localhost:9003 user@server
Теперь укажите порт 9003 в .htaccess
и можно переходить к настройке PhpStorm:
php_value xdebug.remote_enable 1
php_value xdebug.remote_port 9003
Настройка PhpStorm
Для настройки PhpStorm необходимо указать проброшенный порт для отладки, запустить "слушатель" этого порта и создать конфигурацию отладки. Тут все довольно просто..
Для включения слушателя выполните: Run » Start Listen for PHP Debug Connections. Также на панели инструментов есть одноименная кнопка (на скриншоте она выключена):
Порт XDebug указывается в настройках проекта: File » Setting » PHP » Debug, поле Debug Port.Также поставьте отметку - Can accept external connections.
Внимание!
При запуске слушателя порта в PhpStorm вы можете получить ошибку: Port 9036 is busy.
Это означает, что указанный порт занят другим приложением - воспользуйтесь netstat
или выберите другой порт.
Теперь осталось создать нужную конфигурацию и запустить сессию отладки XDebug. Можете ознакомиться с информацией «Настройка локальной отладки XDebug и PhpStorm 7.1»