Рубрики
Uncategorized

Избегайте ям! Использование Docker для решения проблемы Nginx PhpStorm против кода XDebug в среде разработки PHP

Автор оригинала: David Wong.

Версия статьи: 2019.7

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

Давайте начнем с окружающей среды:

Докер 18.09.2 Nginx 1.17.1 PHP 7.3.7 XDebug 2.7.2 PhpStorm 2019.1.3 VSCode 1.36.1

1. Установка докера

Здесь вы можете скачать Docker для Mac непосредственно с официального сайта Docker. Просто следуйте подсказке напрямую. Здесь это повторяться не будет.

2. Установка Nginx

Адрес: https://hub. docker .com//nginx Выполните команду docker pull nginx, чтобы напрямую извлечь последнее изображение. Согласно вышеуказанному адресу, мы можем увидеть некоторые документы, предоставленные правительством. Мы можем сделать это в соответствии с операцией. Мой личный план состоит в том, чтобы скопировать весь каталог конфигурации nginx в локальную копию, а затем привязать каталог к каталогу конфигурации контейнера nginx при запуске, чтобы было удобнее изменять конфигурацию.

Скопируйте каталог конфигурации nginx локально:

$ docker run --name tmp-nginx -d nginx
$ docker cp tmp-nginx:/etc/nginx /Users/yourname/Workspace/etc/nginx
$ docker rm -f tmp-nginx

Описание:/Пользователи/ваше имя/Рабочее пространство/и т.д., это мой личный рабочий каталог, когда ситуация меняется на их собственную строку; роль команды состоит в том, чтобы запустить закулисный контейнер nginx, скопировать каталог конфигурации, остановить запуск и удалить контейнер.

Вы можете запустить его первым, чтобы увидеть эффект:

$ docker run --name run-nginx -d -p 80:80 -v /Users/yourname/Workspace/www:/usr/share/nginx/html:ro nginx

Описание: – Параметр V связывает локальный каталог с веб-каталогом в контейнере nginx. В нем нет каталога конфигурации привязки. Вы можете построить привет. HTML в веб – каталоге и посетите http://localhost/hello.html через браузер. После этого вы можете удалить контейнер. После этого мы можем изменить конфигурацию для запуска. Двигай. Метод удаления:

$ docker rm -f run-nginx

3. Установка php-fpm

Адрес: https://hub.docker.com//php Потому что здесь нам нужно установить некоторые расширения PHP, используемые в разработке, поэтому лучший способ-создать наш собственный образ в соответствии с файлом Docker. Вот мой док-файл. Вы можете обратиться к нему. Вы можете удалить нежелательные расширения в зависимости от ситуации, в противном случае сгенерированное изображение будет больше.

Файл Dockerfile выглядит следующим образом:

# Build from the Official Foundation Version
FROM php:7.3.7-fpm
# The official version installs the extension by default: 
# Core, ctype, curl
# date, dom
# fileinfo, filter, ftp
# hash
# iconv
# json
# libxml
# mbstring, mysqlnd
# openssl
# pcre, PDO, pdo_sqlite, Phar, posix
# readline, Reflection, session, SimpleXML, sodium, SPL, sqlite3, standard
# tokenizer
# xml, xmlreader, xmlwriter
# zlib

# Update to Domestic Mirror
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \
    && apt-get update

# bcmath, calendar, exif, gettext, sockets, dba, 
# mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm extension
RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv

# GD Extension
RUN apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && rm -r /var/lib/apt/lists/* \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

# imagick extension
RUN export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && apt-get install -y --no-install-recommends libmagickwand-dev \
    && rm -r /var/lib/apt/lists/* \
    && pecl install imagick-3.4.4 \
    && docker-php-ext-enable imagick

# mcrypt extension 
RUN apt-get install -y --no-install-recommends libmcrypt-dev \
    && rm -r /var/lib/apt/lists/* \
    && pecl install mcrypt-1.0.2 \
    && docker-php-ext-enable mcrypt

# Memcached extension 
RUN apt-get install -y --no-install-recommends libmemcached-dev zlib1g-dev \
    && rm -r /var/lib/apt/lists/* \
    && pecl install memcached-3.1.3 \
    && docker-php-ext-enable memcached

# redis extension
RUN pecl install redis-5.0.0 && docker-php-ext-enable redis

# opcache extension 
RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache

# Xdebug extension
RUN pecl install xdebug-2.7.2 && docker-php-ext-enable xdebug

# swoole extension
RUN pecl install swoole-4.4.0 && docker-php-ext-enable swoole

# Mirror information
LABEL Author="Stone"
LABEL Version="2019.7"
LABEL Description= "PHP 7.3.7 Development Environment Mirror".

Примечание: В этом докерфайле я ссылаюсь на содержимое автора https://www.jianshu.com/p/20fcca06e27e, и внесите некоторые коррективы, вы можете увеличить или уменьшить в зависимости от вашей собственной ситуации, потому что это среда разработки, лучше сохранить xdebug, мы будем использовать его позже; Ниже приведена серия файлов Docker, которая может генерировать изображение меньшего размера, но все еще имеет 636M. Официальное изображение php: 7.3.7-fpm составляет 371 м. Если вы хотите оптимизировать изображение, которое также может быть сгенерировано на основе официального изображения Alpine, давайте начнем с простого приблизительного изображения.

FROM php:7.3.7-fpm

RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \
    && apt-get update \
    && export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmagickwand-dev libmcrypt-dev libmemcached-dev zlib1g-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv gd \
    && pecl install imagick-3.4.4 mcrypt-1.0.2 memcached-3.1.3 redis-5.0.0 xdebug-2.7.2 swoole-4.4.0\
    && docker-php-ext-enable imagick mcrypt memcached redis xdebug swoole \
    && docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache

LABEL Author="Stone"
LABEL Version="2019.7"
LABEL Description= "PHP 7.3.7 Development Environment Mirror."

Поговорим о яме: исходный код apt-get лучше заменить внутренним исходным кодом, иначе он может застрять в построении зеркала; потому что по умолчанию официальный контейнер основан на Debian, и часто приходится находить устаревший исходный код, например, текущий код Debian растянут, но использование пакета джесси неизбежно будет неправильным “E: Не удалось исправить проблемы, у вас были сломанные пакеты. “; вы можете напрямую сгенерировать зеркало в соответствии с файлом Dockerfile выше меня, и тест пройдет.

Выполните в каталоге, в котором находится файл Dockerfile:

docker build -t my-php-fpm:2019.7 .

– Параметр t задает имя изображения и метку. Пожалуйста, назовите его в соответствии с вашей собственной ситуацией. После создания образа вы можете скопировать соответствующую конфигурацию PHP в локальное место, как мы скопировали конфигурацию nginx выше.

$ docker run --name tmp-my-php-fpm -d my-php-fpm:2019.7
$ docker cp tmp-my-php-fpm:/usr/local/etc /Users/yourname/Workspace/etc/php
$ docker rm -f tmp-my-php-fpm

4. Измените файлы конфигурации nginx, php-fpm и Xdebug

Измените файл конфигурации nginx, откройте/Users/yourname/Workspace/etc/nginx/default.conf и добавьте следующее:

 location ~ \.php$ {
        fastcgi_pass   php-fpm-container:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
        include        fastcgi_params;
    }

В добавлении есть один момент, который необходимо объяснить: “php-fpm-контейнер”-это псевдоним контейнера php-fpm, который мы создали сами, который указывается во время выполнения, и мы упомянем об этом позже.

Измените файл конфигурации, связанный с php, введите/Users/yourname/Workspace/etc/php и переименуйте копию php.ini-development в php.ini. Содержимое конфигурации может быть изменено в соответствии с вашей собственной ситуацией. Измените файл конфигурации Xdebug/Users/yourname/Workspace/etc/php/conf.d/docker-php-ext-xdebug.ini и добавьте следующее

xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host = host.docker.internal 
xdebug.remote_port = 9001
xdebug.remote_log = /var/log/php/xdebug.log
xdebug.idekey = PHPSTOR

Вышеуказанные настройки в основном предназначены для открытия режима удаленной отладки xdebug, поскольку php-fpm использует 9000 портов, поэтому здесь мы меняем порт Xdebug на 9001; “host.docker.internal” – это новое дополнение docker 18.03, которое можно проанализировать, чтобы получить IP-адрес хоста, поэтому нет необходимости записывать мертвый IP-адрес.

5. Запустите контейнеры php-fpm и nginx

$ docker run --name run-my-php-fpm \
-v /Users/yourname/Workspace/www:/var/www/html \
-v /Users/yourname/Workspace/etc/php:/usr/local/etc \
-v /Users/yourname/Workspace/log/php:/var/log/php \
-d my-php-fpm:2019.7
$ docker run --name run-nginx \
-p 80:80 \
--link run-my-php-fpm:php-fpm-container \
-v /Users/yourname/Workspace/www:/usr/share/nginx/html \
-v /Users/yourname/Workspace/etc/nginx:/etc/nginx \
-v /Users/yourname/Workspace/log/nginx:/var/log/nginx \
-d nginx

Примечание. Я связываю каталог конфигурации, каталог журналов и веб-каталог отдельно для удобства изменения в локальной среде. Помните ли вы, что в nginx, упомянутом выше, есть конфигурация с именем “php-fpm-контейнер”? Фактически, здесь указано, что два контейнера подключены и имеют псевдонимы к контейнеру php-fpm, доступ к которому осуществляется через псевдонимы в конфигурации.

Создайте phpinfo. PHP-файл в/Пользователи/ваше имя/Рабочее пространство/www и вывод информации PHP через http://localhost/phpinfo.php….

6. Установите плагин для браузера Chrome Xdebug helper

Это может быть стена. Пожалуйста, решите это самостоятельно.

7. Конфигурация среды отладки PhpStorm

Установите/Пользователи/ваше имя/Рабочее пространство/www/Xdebug/demo. php. Напишите какой-нибудь PHP – код в PHP-файле. Вы также можете создать пустой проект с помощью PhpStorm, но он находится в каталоге, привязанном к нашему контейнеру php-fpm.

Меню: PhpStorm – > Настройки… Введите настройки предпочтений и установите их, как показано ниже. Войдите в окно настроек интерпретатора CLI в соответствии с приведенным выше приглашением и добавьте конфигурацию в”+”. Продолжайте настраивать параметры, связанные с отладкой, следующим образом: Перейдите в главный интерфейс и выберите “Добавить конфигурацию…” справа. После входа в окно конфигурации отладки выберите”+”, выберите “Веб-страница PHP”, задайте имя, введите настройки сервера и задайте начальный URL: “/xdebug/demo.php” Войдите в главное окно, разбейте несколько пунктов в программе, а затем нажмите на зеленого жука.

8. Конфигурация среды отладки кода VS

Сначала установите плагин отладки PHP, а затем откройте каталог отладки, созданный выше. Как показано на следующем рисунке, войдите в панель отладки, наведите шестеренку, чтобы выбрать PHP, а затем создайте файл launch.json. Измените этот файл, чтобы добавить конфигурацию сопоставления путей. Этот параметр конфигурации используется для задания соответствующей связи между путем к серверу и локальным путем. В низкой версии используются локальный исходный код и серверный исходный код, которые использовались в настоящее время. Упразднять. Также не забудьте изменить порт на 9001.

Войдите demo.php, установите две точки останова по желанию, затем нажмите кнопку “Запуск” слева, чтобы войти в режим отладки, а затем обновите http://localhost/xdebug/demo…. Информация об отладке указана слева, поэтому вы можете выбрать пошаговый запуск программы отслеживания.

Конец: На самом деле, среда развертывания наступила на множество ям. Основная причина в том, что информация в интернете довольно старая, многие статьи не обновлялись, или направление не соответствует мне. Например, прямо в хабе есть изображение Xdebug, но я все равно хочу создать его сам с помощью изображения, предоставленного правительством, чтобы не наступить на яму. Вам лучше обратиться к более официальным документам, которые обычно написаны более четко. Благодаря удобству docker я буду время от времени обновлять эту статью, поэтому я установил номер версии в начале этой статьи. Я надеюсь, что это будет полезно для всех вас.