@l4m3r

Насколько удобно Docker интегрирован в PhpStorm?

Я так понял такой же удобной интеграции в IDE, как при локальной php+node ПО нет?

1) php + xdebug завелось просто с огромный бубном и мусором в docker-compose.
2) node я так понял вообще не выйдет, чтобы появилась вкладка npm со списком команд из package. Да и вообще, о всяких browsersync можно забыть.
3) Вкладка Docker позволяет только запускать/перезапускать/удалять контейнеры и образы.

Разрабывать проект только оперируя в терминале командами docker-compose exec npm watch / docker-compose exec php artisan make:XXX / docker-compose exec php composer require? Или их как-то можно сократить? Хватило ума только добавить в bashrc alias artisan="docker-compose exec php", но это так себе кмк.

PS: да, я задавал подобный вопрос. Но там я описал всё криво.
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Можно призвать make
Особенно когда нужно группировать несколько команд

Вот пример, к сожалению чужой, у меня до Докера пока руки не доходят как следует взяться, Вагрант пока все покрывает
Пример Makefile
Работает в линуксах так: make {command}

А тут посмотрите сколько команд выполняет make init :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
romash
@romash
web-разработчик
Про xdebug могу сказать, что вы скорее всего что-то не так готовите. Важно понимать, что сам xdebug является по сути клиентом, который отправляет данные дебаг-серверу (в данном случае его поднимает PHPStorm). Исходя из этого можно с уверенностью заявить, что в docker-compose вообще ничего, связанного с дебагом быть не должно (максимум сюда можно отнести проброс папки vendor, если вам нужно в дебаге проходить по подгруженным композером библиотекам).

Как работает xdebug: вы открываете в браузере страницу, php начинает её обрабатывать, xdebug смотрит в свой конфиг и, если видит инфу для подключения (адрес и порт дебаг-сервера), то подключается к нему, узнаёт о брейкпоинтах и дальше они между собой взаимодействуют, но подключение поднимает php, то есть оно идет из контейнера на хост, никакие порты при этом пробрасывать не нужно, так как из контейнера ваш хост всегда видно.

Я ставлю в конфиге xdebug.remote_connect_back=on, тогда не нужно указывать xdebug.remote_host и он ищет сервер на ip, с которого открыли страницу. Правда так не подебажишь cli, но ip-шник хоста тоже можно как-то достать, можете погуглить, если очень хочется.

Допустим, у вас в xdebug.ini написано следующее:
zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.remote_autostart=on
xdebug.remote_connect_back=on
xdebug.remote_port=9999


Тогда в PHPStorm достаточно:
Settings > Languages & Frameworks > PHP > Debug
В разделе Xdebug указать порт 9999 и поставить галку на Can accept external connections.
В самом низу, в Advanced settings убрать галку с Notify if debug session was finished without being paused

Settings > Languages & Frameworks > PHP > Servers
Добавить сервер:
Name и Host указать из server_name nginx (с другими прокси не настраивал)
Port тоже из конфига nginx, а не тот, что пробрасывается наружу!
Эти данные php берет от своей прокси внутри контейнера и передаёт при поднятии сессии дебага, так что, если неправильно указать, Path mapping не заработает.
Галочка на Use path mappings и поставить в соответствие папке проекта абсолютный путь внутри контейнера

Также на всякий случай и для сравнения инструкция для VSCode:
Установить расширение PHP Debug и добавить в конфигурацию дебага следующее
{
    "name": "Listen for XDebug in Docker",
    "type": "php",
    "request": "launch",
    "port": 9999,
    "pathMappings": {
        "Абсолютный путь к папке проекта в контейнере": "${workspaceRoot}"
    }
}


Это дело у меня прекрасно работает и из под винды со старой docker-machine, и "огромным бубном" я бы это не называл...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы