bitnami/php-fpm:5.6配置

感谢一位朋友(osn)帮助建立了多版本php环境(php5-fpm和php7-fpm共存),centos7+nginx+php-fpm7.1。这个环境下需要用到5.6版本的PHP。直接用yum装5.6版,会和之前装的7.1冲突。所以只好让PHP5跑在docker里了。下面是配置说明。 参考这个说明,如果系统跑php5.6,docker中跑php7,也可以。 或者用docker跑多个版本的php也行。 centos7安装后,用epel源安装nginx1.12,然后用webtatic源装php71w-fpm和php71w-cli。然后装了很多php71w-gd,php71w-pdo,…..的php支持。 php7在nginx的配置,支持PATH_INFO: 创建文件:/etc/nginx/default.d/php71w-fpm.conf ————– location ~ \.php($|/) { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_split_path_info   ^(.+?\.php)(/.*)$;   # 非贪婪匹配 if (!-e   $document_root$fastcgi_script_name) { return   404; } fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO   $fastcgi_path_info  if_not_empty; include   fastcgi_params; } ————– docker是用自带源(extras)  yum安装的。 php的docker镜像有很多。选择了bitnami/php-fpm。因为他的images体积小,才200多MB,版本齐,5.6, 7.0, 7.1, 7.2都有。 这个镜像的说明: https://store.docker.com/community/images/bitnami/php-fpm 拉取镜像,指定php5.6版本,执行: docker pull bitnami/php-fpm:5.6 测试容器,先启动起来看看,9000已经被7.1占用,5.6映射到9001: docker run -d –name phpfpm56 -v /data/web/php5:/app/web/php5 -p 127.0.0.1:9001:9000 bitnami/php-fpm:5.6 我的nginx网站的 root是 /data/web 修改nginx的配置,增加php5.6在目录/data/web/php5/的支持。 在server{  }中添加一个location{  }。这个配置是支持php的PATH_INFO的。 我把配置写在独立文件中了,然后在nginx配置中 include 进去。 我的例子:server { listen …. server_name …. root ….. include /data/config/nginx/phpfpm56.conf;   <—-加了这行 ……. } 我的独立配置文件为 /data/config/nginx/phpfpm56.conf  内容如下。 ————– location /php5/ { location ~ \.php($|/) { fastcgi_pass   127.0.0.1:9001; fastcgi_index  index.php; fastcgi_split_path_info   ^(.+?\.php)(/.*)$;   # 非贪婪匹配 if (!-e   $document_root$fastcgi_script_name) { return   404; } fastcgi_param  SCRIPT_FILENAME   /app/web$fastcgi_script_name; #fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO   $fastcgi_path_info  if_not_empty; include   fastcgi_params; fastcgi_param  DOCUMENT_ROOT   /app/web; } } ————– 建个文件 /data/web/php5/info.php   内容为 <?php   phpinfo(); ?> 浏览器访问 http://你的站/php5/info.php ,如果看到,说明成功了。 —————- 正式配置php-fpm5.6: 把php-fpm56 的配置文件copy到宿主机上,方便修改配置。 之前测试,启动的phpfpm56的容器,先别关。 cd /data/config/phpfpm56/    # 这个目录是宿主机上的目录,把配置文件copy出来。 docker cp phpfpm56:/opt/bitnami/php/etc/php-fpm.conf . docker cp phpfpm56:/opt/bitnami/php/etc/environment.conf . docker cp phpfpm56:/opt/bitnami/php/etc/common.conf . docker cp phpfpm56:/opt/bitnami/php/etc/php.ini . ——– 如果以后需要进入容器,以apache的身份执行命令(因为容器里头没有sudo),则做,否则跳过。 docker cp phpfpm56:/etc/passwd . #增加一行, apache:x:48:48:apache:/app:/bin/bash docker cp passwd phpfpm56:/etc/passwd # 就可以在container中su apache 了 ——– #host机上的配置文件,刚才从容器中copy出来的。 /data/config/phpfpm56/common.conf /data/config/phpfpm56/environment.conf /data/config/phpfpm56/php-fpm.conf /data/config/phpfpm56/www.conf     #如果需要,自行创建 /opt/bitnami/php/etc/php.ini # 以上配置文件中,对log的配置(我在php-fpm.conf中配置了log输出,具体配置不贴出来了) /opt/bitnami/php/logs/phpfpm56-error.log /opt/bitnami/php/logs/phpfpm56-www-slow.log /opt/bitnami/php/logs/phpfpm56-www.log ————— ## 未使用的配置 # common.conf 中就是 user=48   group=48 两行。一般php-fpm都以apache身份运行。 -v /data/config/phpfpm56/common.conf:/opt/bitnami/php/etc/common.conf \   # 抛弃。因内容直接写入 www.conf 或 php-fpm.conf 了 # 这个www.conf 我没用到。 -v /data/config/phpfpm56/www.conf:/opt/bitnami/php/etc/www.conf:ro \ # 这个配置应该可以获取到宿主机的IP。但失败了,不知道为什么。所以没用它。直接把IP写参数里了。 $(docker network inspect –format='{{range .IPAM.Config}}{{.Gateway}}{{end}}’ bridge) ————— docker container stop phpfpm56       # 停止container docker rm phpfpm56                          # 删除container # 重建container docker run -d –name phpfpm56 \ –add-host=mainhost:172.17.0.1 \    <—-宿主机的机器名, IP. –restart always \ -v /data/config/phpfpm56/php-fpm.conf:/opt/bitnami/php/etc/php-fpm.conf:ro \ -v /data/config/phpfpm56/php.ini:/opt/bitnami/php/etc/php.ini:ro \ -v /var/log/phpfpm56:/opt/bitnami/php/logs \ -v /data/web:/app/web \        <—-直接把网站的root映射到容器中。 -p 127.0.0.1:9001:9000   bitnami/php-fpm:5.6 # 设置容器开机自动启动。 docker update –restart always phpfpm56 # 检查 iptables 规则,允许container访问mysql, 检查mysql用户可以从 172.17.0.% 登陆和访问数据库。 # 下面这句,是用来进入容器执行命令的。 docker container exec -it phpfpm56 /bin/bash ————— 增加php5.6的工作目录, 比如 /data/web/newphp56 1. 修改 /data/config/nginx/phpfpm56.conf , 增加一个 location /newphp56/ {  } 配置, 内容copy前一个location的。 2. service nginx reload 注: php5.6-docker 中访问主机的MySQL,使用机器名, mysql-hostname:’mainhost’, 比如: $db=new mysqli(‘mainhost’,’用户名’,’密码’,’db name’); 或(不建议直接用IP): $db=new mysqli(‘172.17.0.1′,’用户名’,’密码’,’db name’); 因为如果容器迁移,宿主机的IP有可能会改变。 ————— 或者把location 中的关于php5.6的配置,单独写到一个文件中。比如 /xxx/handlephp56.conf 需要增加那个目录 就写: location /xxxx/ { include /xxx/handlephp56.conf; } 重启nginx,就行了。 —————