Heim  >  Artikel  >  Backend-Entwicklung  >  Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

藏色散人
藏色散人nach vorne
2019-07-30 14:11:1012914Durchsuche

Fallstricke vermeiden! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen (Mac, Docker, Nginx, PHP-FPM, XDebug, PHPStorm, VSCode)

Da ich kürzlich meinen Computer gewechselt habe, muss ich die verwendete lokale Entwicklungsumgebung erneut bereitstellen Vorher Die Lösung nimmt zu viel Speicherplatz ein und der geringe Speicherplatz auf der SSD tut mir leid. Daher habe ich dieses Mal die Docker-Lösung für die Bereitstellung übernommen.

In Bezug auf das Prinzip dieser Bereitstellung besteht meine Idee darin, so viel wie möglich offizielle Bilder zu verwenden und zu versuchen, die Bilder nicht oder so wenig wie möglich zu ändern. Da es sich um eine lokale Entwicklungsumgebung handelt, möchte ich neue Dinge ausprobieren und versuchen, zur Implementierung höhere Softwareversionen zu verwenden.

Was die Ergebnisse angeht, hoffe ich, dass es Schülern helfen kann, die auch eine Umgebung einrichten und Fallstricke vermeiden können. Am besten wäre es, wenn Sie die Schritte in diesem Artikel befolgen und es auf einmal erledigen könnten.

Lassen Sie uns zuerst über die Umgebung sprechen:

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-Installation

Hier können Sie Docker für Mac direkt von der offiziellen Docker-Website herunterladen. Befolgen Sie einfach die Anweisungen und gehen Sie hier nicht auf Details ein.

2. Nginx installieren

Adresse: https://hub.docker.com/_/nginx

Docker Pull Nginx Pull The direkt ausführen Aktuelles Bild;

Anhand der oben genannten Adresse können wir einige offizielle Dokumente sehen. Meine persönliche Lösung besteht darin, das gesamte Konfigurationsverzeichnis von Nginx in eine lokale Kopie zu kopieren und dann zu binden Das Verzeichnis wird während der Laufzeit in das Konfigurationsverzeichnis des Nginx-Containers verschoben, wodurch die Konfiguration bequemer geändert werden kann.

Kopieren Sie das Nginx-Konfigurationsverzeichnis in das lokale Verzeichnis:

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

Hinweis: /Users/yourname/Workspace/etc, dies ist mein persönliches Arbeitsverzeichnis, Sie können es entsprechend in Ihr eigenes ändern Situation; Die Funktion des Befehls besteht darin, einen im Hintergrund laufenden Nginx-Container zu starten, das Konfigurationsverzeichnis zu kopieren, dann den Vorgang zu beenden und den Container zu löschen.

Sie können es zuerst ausführen, um den Effekt zu sehen:

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

Erläuterung: Der Parameter -v bindet ein lokales Verzeichnis an das Webverzeichnis im Nginx-Container. Es gibt kein verbindliches Konfigurationsverzeichnis Sie können eine hello.html im Webverzeichnis erstellen und über den Browser auf http://localhost/hello.html zugreifen, um den Effekt zu sehen. Danach können Sie den Container zuerst löschen und ihn dann starten, nachdem Sie die Konfiguration geändert haben.

Löschmethode:

$ docker rm -f run-nginx

3. PHP-fpm installieren

Adresse: https://hub.docker.com/_/php

Da wir hier einige in der Entwicklung verwendete PHP-Erweiterungen installieren müssen, ist es am besten, unser eigenes Image basierend auf der Docker-Datei zu generieren. Sie können darauf verweisen Je nach Situation wird das erzeugte Bild größer.

Der Inhalt der Docker-Datei lautet wie folgt:

# 从官方基础版本构建
FROM php:7.3.7-fpm
# 官方版本默认安装扩展: 
# 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
# 更新为国内镜像
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 扩展
RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv
# GD 扩展
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 扩展
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 扩展 
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 扩展 
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 扩展
RUN pecl install redis-5.0.0 && docker-php-ext-enable redis
# opcache 扩展 
RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
# xdebug 扩展
RUN pecl install xdebug-2.7.2 && docker-php-ext-enable xdebug
# swoole 扩展
RUN pecl install swoole-4.4.0 && docker-php-ext-enable swoole
# 镜像信息
LABEL Author="Stone"
LABEL Version="2019.7"
LABEL Description="PHP 7.3.7 开发环境镜像.

Hinweis: Ich habe diese Docker-Datei unter Bezugnahme auf den Inhalt des Autors unter https://www.jianshu.com erstellt /p/20fcca06e27e und gemacht Sie können einige Anpassungen entsprechend Ihrer eigenen Situation erhöhen oder verringern. Da es sich um eine Entwicklungsumgebung handelt, ist es am besten, xdebug beizubehalten, das wir später auch verwenden werden Das auf diese Weise generierte Docker-File ist kleiner, aber immer noch 636 MB groß. Wenn Sie es optimieren möchten, können Sie es auch aus dem offiziellen erstellen Alpenbild. Lassen Sie es uns hier einfach und grob halten.

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 开发环境镜像. "

Lassen Sie uns über die Fallstricke sprechen: Es ist am besten, die Quelle von apt-get auf eine inländische Quelle zu ändern, da es sonst beim Erstellen des Images hängen bleiben kann, da der offizielle Container standardmäßig auf Debian basiert. Finden Sie die Quelle. Wenn der aktuelle Debian-Codename beispielsweise „Stretch“ lautet, Sie aber Jessies Paket verwenden, erhalten Sie auf jeden Fall die Fehlermeldung „E: Fehler konnten nicht behoben werden, Sie haben defekte Pakete zurückgehalten.“ Ich kann direkt dem folgen, was ich oben gesagt habe. Verwenden Sie einfach die Docker-Datei, um das Bild zu generieren, und der Test ist erfolgreich.

Führen Sie in dem Verzeichnis aus, in dem sich die Docker-Datei befindet:

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

-t-Parameter legt den Bildnamen und die Beschriftung fest. Bitte benennen Sie es entsprechend Ihrer eigenen Situation Kopieren Sie die Nginx-Konfiguration wie oben beschrieben. Kopieren Sie auch die entsprechende PHP-Konfiguration in den lokalen Bereich.

$ 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. Ändern Sie die Konfigurationsdateien von nginx, php-fpm und xdebug

Ändern Sie die nginx-Konfigurationsdatei und öffnen Sie /Users/yourname/Workspace/etc/ nginx/default .conf, fügen Sie den folgenden Inhalt hinzu:

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;
    }

Es gibt einen Punkt im hinzugefügten Inhalt, der erklärt werden muss: „php-fpm-container“. Dies ist der Alias ​​des von uns verwendeten PHP-FPM-Containers selbst erstellt, speziell zur Laufzeit angegeben Ja, wir werden es später erwähnen.

Ändern Sie die PHP-bezogenen Konfigurationsdateien, gehen Sie zu /Benutzer/IhrName/Workspace/etc/php, kopieren Sie php.ini-development, benennen Sie es in php.ini um und ändern Sie den Konfigurationsinhalt entsprechend Ihrer eigenen Situation .

Ändern Sie die xdebug-Konfigurationsdatei /Users/yourname/Workspace/etc/php/conf.d/docker-php-ext-xdebug.ini und fügen Sie den folgenden Inhalt hinzu

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

The Die oben genannten Einstellungen dienen hauptsächlich dazu, den Remote-Debugging-Modus von xdebug zu aktivieren. Da PHP-FPM Port 9000 verwendet, ändern wir hier den Port von xdebug in 9001. „host.docker.internal“ wurde in Docker 18.03 neu hinzugefügt und kann analysiert werden um die IP-Adresse des Hosts zu erhalten, sodass Sie die IP-Adresse nicht notieren müssen.

5. Starten Sie PHP-FPM- und Nginx-Container

$ 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

说明:我将配置目录、日志目录和 web 目录都分别进行了绑定,方便在本地环境中修改。还记得上面提到的 nginx 中有个配置填写的 “php-fpm-container” 吗?实际上就是在这里指定的,连接两个容器,并给 php-fpm 容器起了个别名,配置中通过别名访问。

在 / Users/yourname/Workspace/www 中创建一个 phpinfo.php 文件,输出 php 信息,通过 http://localhost/phpinfo.php 访问来查看。

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

6、安装 Chrome 浏览器插件 xdebug helper

可能会被墙,请自行解决。

7、PhpStorm 调试环境配置

建立 / Users/yourname/Workspace/www/xdebug/demo.php,php 文件里面随便写点 php 代码,也可以通过 PhpStorm 新建立一个空项目,但是位置要在我们和 php-fpm 容器绑定的目录。

菜单:PhpStorm->Preferences… 进入偏好设置,按照下图进行设置。

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

根据上图提示进入 CLI Interpreter 设置窗口,点 “+” 添加配置。

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

继续配置 Debug 相关设置,如下图:

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

进入主界面,选择右上的 “Add Configuration...”

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

进入 debug 配置窗口后选择 “+”,选择 “PHP Web Page“,设置名称后进入 Servers 设置,同时设置 Start URL:“/xdebug/demo.php”

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

进入主窗口,在程序中打几个断点,然后点击那个绿色的甲虫就可以了。

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

8、VSCode 调试环境配置

首先安装 PHP Debug 插件,然后打开上面创建的 xdebug 目录。如下图所示,进入调试面板,点齿轮选择 PHP,然后会创建一个 launch.json 文件,修改这个文件加入 pathMappings 配置,这个配置参数用于设置服务器路径与本地路径的对应关系,低版本使用的是 localSourceRoot 和 serverSourceRoot,目前已经被废除。另外记得将端口改为 9001。

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

进入 demo.php,随意设置两个断点,然后点左侧的运行按钮,进入调试模式,接下来刷新 http://localhost/xdebug/demo.php 会返回到 VSCode 的调试窗口,左侧已经列出调试信息,可选择单步执行跟踪程序的运行。

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

Vermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen

结尾:实际上这次部署环境踩了不少坑,主要原因是网上的资料都比较陈旧,很多文章也没有后续的更新,或者方向和我不太一致,例如 hub 中直接就有 xdebug 的镜像,但是我还是想尽量用官方提供的镜像自己创建,为了避免踩坑,大家最好还是多多参考官方文档,一般都写的比较清楚了。

Das obige ist der detaillierte Inhalt vonVermeiden Sie die Grube! Verwenden Sie Docker, um eine PHP-Entwicklungsumgebung zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen