使用docker快速搭建php开发调试环境

2020-07-25 653 0

简介

以往搭建php环境是非常麻烦的,因操作系统环境差异中间会踩不少坑,本人也是一路踩过来的,最近因重装deepin操作系统,所以想使用docker来搭建一些常用的环境,这样即简单高效本机环境又干净。

安装php环境,有很多方案:LAMP、PHPWAMP、php+apache,php-fpm+nginx等,一键集成方案个人不太喜欢,因为会带来很多额外的东西 ,加上自己java开发常用nginx,所以使用php-fpm+nginx方案来搭建

安装php-fpm

第一步,创建php-fpm容器

使用docker search php 可以发现很多可用的php-fpm镜像,这里使用bitnami/php-fpm
注:先copy容器中的配置出来,便于后续自定义,如下/home/hushow/php-fpm/conf目录,相关配置可以参考官网

docker run -itd --name php-fpm -p 9000:9000
-v /home/hushow/wp-nginx/wp/:/var/www/html/ 
-v /home/hushow/php-fpm/conf/:/opt/bitnami/php/etc/  bitnami/php-fpm

此时telnet 127.0.0.1 9000 正常,证明安装顺利

  • 问题9000端口Connection refused

    找到ph-fpm配置中的listen = 127.0.0.1:9000 改为 listen = 9000,监听任意端口,因为127.0.0.1是容器内部IP

第二步,获取php-fpm容器IP

查看php-fpm容器内IP端口,用于后续nginx反向代理指向
执行命令:docker inspect php-fpm,如下图:
file

安装nginx

注:先copy容器中的配置出来,便于后续自定义,如下/home/hushow/wp-nginx/conf目录,相关配置可以参考官网

第一步,创建nginx空器

docker run -itd --name wp-nginx -p 80:80 
-v /home/hushow/wp-nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /home/hushow/wp-nginx/conf/conf.d:/etc/nginx/conf.d 
-v /home/hushow/wp-nginx/wp:/var/www/html nginx

第二步,为nginx配置php反向代理

注:以下配置172.17.0.3:9000则为以上php-fpm容器IP,nginx会将请求转发到此IP端口上

注:以下root /var/www/html 需要对应创建nginx容器时的挂载信息-v /home/hushow/wp-nginx/wp:/var/www/html

server {
  listen 0.0.0.0:80;
  server_name localhost;
  root /var/www/html;
  index index.php;

  #所有.php请求
  location ~ \.php$ {
    fastcgi_pass 172.17.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    add_header t_php "php";
    add_header uri $uri;
    add_header ruri $request_uri;

  }
}

第三步,创建php页面

在以上/home/hushow/wp-nginx/wp目录下,创建info.php文件:
注:/home/hushow/wp-nginx/wp 需要是创建nginx时挂载目录

<?php
phpinfo();
?>

第四步,验证info.php页面

在浏览器中仿问:http://127.0.0.1/info.php
file

开启调试模式

php运行环境配置好了,但是如果像各大语言一样调试php代码呢? 当然这样看你使用什么IDE了,我比较喜欢使用vscode来开发php,要进行调试php server端肯定离不开XDebug php扩展了,可喜的是bitnami/php-fpm镜像中已经帮你打包好一切了,只需要你开启配置.

要在宿主机的vscode中调试php-fpm容器中运行的php代码,这无疑是远程代码技能了.

第一步, 在php-fpm配置中开启XDebug扩展

编辑php-fpm中php.ini文件,在文末加入如下配置:

注意不同xdebug版本有差异,本人采过坑

  • For Xdebug v3.x.x:

    https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_autostart

    [XDebug]
    zend_extension="/opt/bitnami/php/lib/php/extensions/xdebug.so"
    xdebug.mode=debug
    xdebug.start_with_request=yes
    ;对应vscode监听IP
    xdebug.client_host=172.18.0.1
    ;对应vscoe监听端口
    xdebug.client_port=9001
    xdebug.output_dir=/tmp
  • For Xdebug v2.x.x:

    [XDebug]
    zend_extension="/opt/bitnami/php/lib/php/extensions/xdebug.so"
    xdebug.remote_enable=true
    ;对应vscode监听IP
    xdebug.remote_host=172.17.0.1
    ;对应vscoe监听端口
    xdebug.remote_port=9001
    xdebug.remote_handler=dbgp
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir=/tmp
    ;自动启动,必须开启
    xdebug.remote_autostart =1

最后运行docker restart php-fpm 重启php server

如果debug还是不生效,查看phpinfo信息中相关配置是否正确
file

第二步,vscode 安装 PHP Debug 插件

file

第三步,vscode 配置调试参数

{
    "version": "0.2.0",
    "configurations": [
        {
            # vscode监听IP(必须和容器内相通)
            "hostname": "172.17.0.1",
            # vscode监听port
            "port": 9001,
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "xdebugSettings": {
                "max_children": 128,
                "max_data": 512
            },
            # 远程代码和vscode中映射(重要)
            "pathMappings":{
                "/var/www/html": "${workspaceRoot}/",
              }
        }
    ]
}

第四步,享受php的调试快感吧

file

相关文章

网站的IPv6升级过程
linux下快速开启内网穿透(ssh隧道)
Git 常用命令
Linux对数据库定时备份

发布评论