简介
以往搭建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,如下图:
安装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
开启调试模式
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信息中相关配置是否正确
第二步,vscode 安装 PHP Debug 插件
第三步,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}/",
}
}
]
}