Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

藏色散人
Libérer: 2023-04-07 07:02:01
avant
12855 Les gens l'ont consulté

É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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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 开发环境镜像.
Copier après la connexion

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 开发环境镜像. "
Copier après la connexion

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 .
Copier après la connexion

-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
Copier après la connexion

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;
    }
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

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

7、PhpStorm 调试环境配置

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

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

8、VSCode 调试环境配置

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

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

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

Évitez la fosse ! Utilisez Docker pour créer un environnement de développement PHP

结尾:实际上这次部署环境踩了不少坑,主要原因是网上的资料都比较陈旧,很多文章也没有后续的更新,或者方向和我不太一致,例如 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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!