Évitez les pièges ! Utilisez Docker pour créer un environnement de développement PHP (Mac, Docker, Nginx, PHP-FPM, XDebug, PHPStorm, VSCode)
Comme j'ai récemment changé d'ordinateur, je dois redéployer l'environnement de développement local. avant La solution prend trop de place disque, et je suis désolé pour le petit espace du SSD, donc cette fois j'ai adopté la solution Docker pour le déploiement.
Concernant le principe de ce déploiement, mon idée est d'utiliser le plus possible les images officielles et d'essayer de ne pas modifier ou de modifier le moins possible les images. Parce qu'il s'agit d'un environnement de développement local, je souhaite essayer de nouvelles choses et essayer d'utiliser une version logicielle supérieure pour l'implémenter.
En termes de résultats, j'espère que cela pourra aider les étudiants qui ont également besoin de créer un environnement et d'éviter les pièges. Il serait préférable que vous puissiez suivre les étapes de cet article et le faire en une seule fois.
Parlons d'abord de l'environnement :
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 Installation de Docker
Ici, vous pouvez télécharger Docker pour Mac directement depuis le site officiel de Docker. Suivez simplement les instructions et n'entrerez pas dans les détails ici.
2. Installer Nginx
Adresse : https://hub.docker.com/_/nginx
Exécuter directement docker pull nginx pull The dernière image ;
Selon l'adresse ci-dessus, nous pouvons voir certains documents officiels fournis. Nous pouvons simplement suivre l'opération. Ma solution personnelle est de copier l'intégralité du répertoire de configuration de nginx sur une copie locale, puis de lier. le répertoire vers le répertoire de configuration du conteneur nginx pendant l'exécution, ce qui rend plus pratique la modification de la configuration.
Copiez le répertoire de configuration nginx dans le local :
$ docker run --name tmp-nginx -d nginx $ docker cp tmp-nginx:/etc/nginx /Users/yourname/Workspace/etc/nginx $ docker rm -f tmp-nginx
Remarque : /Users/yourname/Workspace/etc, ceci est mon répertoire de travail personnel, vous pouvez le remplacer par le vôtre en fonction du situation ; La fonction de la commande est de démarrer un conteneur nginx exécuté en arrière-plan, de copier le répertoire de configuration, puis de terminer l'opération et de supprimer le conteneur.
Vous pouvez d'abord l'exécuter pour voir l'effet :
$ docker run --name run-nginx -d -p 80:80 -v /Users/yourname/Workspace/www:/usr/share/nginx/html:ro nginx
Explication : Le paramètre -v lie un répertoire local au répertoire Web dans le conteneur nginx. Il n'y a pas de répertoire de configuration de liaison. Vous pouvez créer un hello.html dans le répertoire Web et accéder à http://localhost/hello.html via le navigateur pour voir l'effet. Après cela, vous pouvez d'abord supprimer le conteneur, puis le démarrer après avoir modifié la configuration.
Méthode de suppression :
$ docker rm -f run-nginx
3. Installez php-fpm
Adresse : https://hub.docker.com/_/php
Parce qu'ici, nous devons installer certaines extensions PHP utilisées dans le développement, le meilleur moyen est donc de générer notre propre image basée sur le Dockerfile. Ce qui suit est mon Dockerfile. Vous pouvez vous y référer. selon la situation, sinon l'image générée sera plus grande.
Le contenu du Dockerfile est le suivant :
# 从官方基础版本构建 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 开发环境镜像.
Remarque : j'ai fait référence au contenu de l'auteur de https://www.jianshu.com/p/20fcca06e27e pour ce Dockerfile et l'avez fait Vous pouvez augmenter ou diminuer certains ajustements en fonction de votre propre situation. Parce qu'il s'agit d'un environnement de développement, il est préférable de conserver xdebug, que nous utiliserons également plus tard
Ce qui suit est le suivant ; Fichier Docker qui connecte RUN en série, de sorte que l'image générée puisse être plus petite, mais toujours 636 Mo. L'image officielle php:7.3.7-fpm est de 371 Mo. Si vous souhaitez l'optimiser, vous pouvez également la générer à partir de l'image officielle d'Alpine. . Restons simples et bruts ici.
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 开发环境镜像. "
Parlons des pièges : il est préférable de changer la source d'apt-get en source domestique, sinon elle risque de rester bloquée lors de la construction de l'image car par défaut le conteneur officiel est basé sur Debian, trouver la source Beaucoup d'entre eux sont obsolètes. Par exemple, si le nom de code Debian actuel est stretch, mais que vous utilisez le paquet de Jessie, vous obtiendrez certainement une erreur : "E : Impossible de corriger les problèmes, vous avez conservé des paquets cassés." ; peut suivre directement ce que j'ai dit ci-dessus. Utilisez simplement le Dockerfile pour générer l'image et le test réussit.
Exécuter dans le répertoire où se trouve le Dockerfile :
docker build -t my-php-fpm:2019.7 .
-t définit le nom et l'étiquette de l'image. Veuillez la nommer en fonction de votre propre situation. Une fois l'image créée, vous pouvez la nommer. copiez la configuration de nginx comme nous l'avons fait ci-dessus. Copiez également la configuration appropriée de php dans la zone locale.
$ 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. Modifiez les fichiers de configuration de nginx, php-fpm et xdebug
Modifiez le fichier de configuration nginx et ouvrez / Users/yourname/Workspace/etc/ nginx/default .conf, ajoutez le contenu suivant :
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; }
Il y a un point dans le contenu ajouté qui doit être expliqué, "php-fpm-container". C'est l'alias du conteneur php-fpm que nous créé nous-mêmes, spécifiquement spécifié au moment de l'exécution Oui, nous le mentionnerons plus tard.
Modifiez les fichiers de configuration liés à php, allez dans /Users/yourname/Workspace/etc/php, copiez php.ini-development et renommez-le en php.ini, et modifiez le contenu de la configuration en fonction de votre propre situation .
Modifiez le fichier de configuration xdebug, /Users/yourname/Workspace/etc/php/conf.d/docker-php-ext-xdebug.ini, et ajoutez le contenu suivant
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
Le Les paramètres ci-dessus servent principalement à activer le mode de débogage à distance de xdebug. Parce que php-fpm utilise le port 9000, nous changeons ici le port de xdebug en 9001 ; "host.docker.internal" est nouvellement ajouté dans docker 18.03 et peut être analysé. pour obtenir l'adresse IP de l'hôte, vous n'avez donc pas besoin de noter l'adresse IP.
5. Démarrez les conteneurs php-fpm et 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
说明:我将配置目录、日志目录和 web 目录都分别进行了绑定,方便在本地环境中修改。还记得上面提到的 nginx 中有个配置填写的 “php-fpm-container” 吗?实际上就是在这里指定的,连接两个容器,并给 php-fpm 容器起了个别名,配置中通过别名访问。
在 / Users/yourname/Workspace/www 中创建一个 phpinfo.php 文件,输出 php 信息,通过 http://localhost/phpinfo.php 访问来查看。
6、安装 Chrome 浏览器插件 xdebug helper
可能会被墙,请自行解决。
7、PhpStorm 调试环境配置
建立 / Users/yourname/Workspace/www/xdebug/demo.php,php 文件里面随便写点 php 代码,也可以通过 PhpStorm 新建立一个空项目,但是位置要在我们和 php-fpm 容器绑定的目录。
菜单:PhpStorm->Preferences… 进入偏好设置,按照下图进行设置。
根据上图提示进入 CLI Interpreter 设置窗口,点 “+” 添加配置。
继续配置 Debug 相关设置,如下图:
进入主界面,选择右上的 “Add Configuration...”
进入 debug 配置窗口后选择 “+”,选择 “PHP Web Page“,设置名称后进入 Servers 设置,同时设置 Start URL:“/xdebug/demo.php”
进入主窗口,在程序中打几个断点,然后点击那个绿色的甲虫就可以了。
8、VSCode 调试环境配置
首先安装 PHP Debug 插件,然后打开上面创建的 xdebug 目录。如下图所示,进入调试面板,点齿轮选择 PHP,然后会创建一个 launch.json 文件,修改这个文件加入 pathMappings 配置,这个配置参数用于设置服务器路径与本地路径的对应关系,低版本使用的是 localSourceRoot 和 serverSourceRoot,目前已经被废除。另外记得将端口改为 9001。
进入 demo.php,随意设置两个断点,然后点左侧的运行按钮,进入调试模式,接下来刷新 http://localhost/xdebug/demo.php 会返回到 VSCode 的调试窗口,左侧已经列出调试信息,可选择单步执行跟踪程序的运行。
结尾:实际上这次部署环境踩了不少坑,主要原因是网上的资料都比较陈旧,很多文章也没有后续的更新,或者方向和我不太一致,例如 hub 中直接就有 xdebug 的镜像,但是我还是想尽量用官方提供的镜像自己创建,为了避免踩坑,大家最好还是多多参考官方文档,一般都写的比较清楚了。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!