时间:2021-05-19
在 mac 上用 brew 装 php56 时,因为 openssl 是 1.1 版本而导致各种 google 都搞不定的错误,太折腾了,现在用 docker 创建一个 php56-fpm 服务容器,nginx 直装在宿主机上。
PHP DockerHub 主页
创建容器
# 创建容器docker run -d \--name php56-fpm \-p 9056:9000 \-v /home/wwwroot:/var/www/html--privileged=truephp:5.6-fpm注意:
/var/www/html 是 php docker 镜像的工作目录。
-v /home/wwwroot:/var/www/html 的作用是将宿主机的站点目录挂载到容器上。比如 /home/wwwroot/siteA,在容器中的访问位置是 /var/www/html/siteA。
nignx 转发 php 请求时,会将执行的脚本名 SCRIPT_NAME 和脚本文件名 SCRIPT_FILENAME 转发给 fpm,而后 fpm 去读取脚本执行。
在使用 fpm 容器时,需要注意 nginx 转发的 SCRIPT_FILENAME 是否是 fpm 容器中的有效站点路径,如果 nginx 的 root 并不能直接映射至 fpm 容器的站点 root,我们需要在 php location 中重新定义为 fpm 容器的站点 root。这样 fpm 才能正确的读取到脚本。
即宿主机上的 /home/wwwroot/siteA/public/index.php 要转为 /var/www/html/siteA/public/index.php 发送给 fpm 容器,否则会报 File not found 的错误。
所以 nginx 配置 server 时要注意如下的卷路径转换:
server { listen 8056; .... # 宿主机的站点根目录 root /home/wwwroot/siteA/public; location ~* (^[/]*.php)[/|$] { # 容器中的站点根目录 root /var/www/html/siteA/public; pass_proxy: 127.0.0.1:9056; include fastcgi.conf; }}不过一般情况下大家都是 docker nginx + docker php-fpm,两个容器都统一映射了站点目录,就不会有这个问题了。这里的 nginx 是直接装在宿主机上才导致 nginx 转发 php 请求时需要重新定义下站点的根目录。
登陆容器
# 查看容器是否运行docker ps# 登陆容器docker exec -it php56-fpm /bin/bashphp 的 docker 镜像是基于 ubuntu 我们可以使用 apt-get 安装需要的工具,比如 vim/vi lrzsz net-tools 之类的。
# 在使用 apt-get 安装一些工具前,需要 update 更新一下源# 否则会 apt-get E: Unable to locate packageapt-get updateapt-get install vim安装 php/pecl 扩展
安装 php 扩展
即 php 官方扩展,比如 shomp 这种自带但默认不开启的扩展。
# 查看自带了那些扩展cd /usr/local/php/ext && ls -l# 安装扩展dcoker-php-ext-install shmop安装 pecl 扩展
容器中是有安装 pecl的,所以直接使用 pecl 安装即可,注意扩展对 php 版本的支持即可。
docker-php-ext-enable的主要用途是生成扩展相应的配置文件到 /usr/local/etc/php/conf.d/docker-php-ext-{extName}.ini 方便 php 加载扩展。
# igbinary php5.6 最高版本是 2.0.8pecl install igbinary-2.0.8docker-php-ext-enable igbinary# phpredis php5.6 最高版本是 4.3.0pecl install redis-4.3.0docker-php-ext-enable redis# swoole php5.6 最高版本是 2.0.11pcel install swoole-2.0.11docker-php-ext-enable swoolephp/php-fpm 配置
/usr/local/etc 是 php 容器的配置目录,里面自带了 php 及 php-fpm 的配置文件,配置目录结构如下:
root@aa739592b579:/usr/local# tree etc/ etc/|-- pear.conf|-- php # php 配置目录| |-- conf.d # php 扩展配置| | |-- docker-php-ext-shmop.ini| |-- php.ini # cp 的 php.ini-development/production| |-- php.ini-development| |-- php.ini-production|-- php-fpm.conf # php-fpm 的配置 自带的主要是引入 php-fpm.d|-- php-fpm.conf.default # php-fpm 配置本体 同 php-fpm.d/www.conf 一致|-- php-fpm.d # php-fpm 的扩展配置 |-- docker.conf |-- www.conf # php-fpm 配置本体 模式啊 max/min children 啊都在这里 |-- zz-docker.conf你可映射宿主机的配置目录到容器的 /usr/local/etc,但要注意宿主机上的配置目录与容器现有的要保持一致,或者直接在容器里编辑配置文件。按 docker 的理念我们应该在宿主机上维护一份配置文件映射到容器的配置目录上,这样才能发挥出 docker 容器的复用性。
映射宿主机的 php 配置文件到容器
-v /opt/docker/conf/php/php.ini:/usr/local/etc/php/php.ini-v /opt/docker/conf/php/php-fpm.ini:/usr/local/etc/php-fpm.d/www/conf常见问题
1、File not found到此这篇关于docker 安装 php-fpm 服务 / 扩展 / 配置的文章就介绍到这了,更多相关docker 安装 php-fpm内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言大家都知道PHP-FPM内置了状态页,开启后可查看PHP-FPM的详细运行状态,给PHP-FPM优化带来帮助。打开php-fpm.conf,配置php-fp
开启php-fpm状态页有助于我们分析当前php请求的情况,来决定php-fpm参数是否设置合理。nginx配置:location/status{fastcgi
php-fpm在LNMP的架构中存在两种运行方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始的时候开启一定数量的php-fpm
装完了nginx和php-5.5配置好了nginx调用php后,就开始启动php-fpm。/usr/local/php/sbin/php-fpm就可以启动了。在
我这个博客为了提高运行效率在vps上装了opcache扩展,结果发现有个页面返回502,其他页面正常。检查了php-fpm日志,发现是php-fpm子进程不知道