实现dnmp中多站点多版本php并存

docker中实现PHP多版本部署

1.背景

搞了一段时间Python,这两天又要开始做一些PHP相关的项目了,本地开发环境、测试环境、线上环境都需要重新弄了,不想在主机上安装各种环境,决定用Docker方式来部署,但自己又不想写Dockfile和compose文件啥的。于是找了下,发现了一个不错的项目:https://github.com/Tinywan/dnmp (国内:https://gitee.com/Tinywan/dnmp) ,根据介绍完成安装

2.发现问题

安装结束后发现,nginx配置里只有一个站点(A),于是在nginx容器的vhost目录中配置另一个站点(B),想要的是 A站点用PHP8,B站点用PHP7.4。看介绍上说支持多版本PHP共存,可任意切换(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3、PHP7.4、PHP8.0)。但并不满足我多站点用不同版本PHP共存的需求。

3.解决问题

3.1 解决思路

由于多个版本的PHP镜像的端口映射9000:9000,会导致 Bind for 0.0.0.0:9000 failed: port is already allocated 错误,那么就从修改端口容器端口入手。

3.2 解决步骤

  1. 修改docker-compose.yml文件
    为了好记,就把php版本放到端口号里,如php74,端口就为9074。

  2. 修改nginx子站点的配置(php版本和端口号)

  3. 修改php74容器
    文件位置:/usr/local/etc/php-fpm.d/zz-docker.conf,将9000 改为 9074

重启容器,进入到nginx容器里访问,site1.dev和site2.dev 都能显示对应的php版本

4.新的问题和解决办法

于是我修改本机hosts,将自定义域名指向对应的nginx容器IP, 但当我在浏览器输入 site1.dev或site2.dev 并不可访问, 输入:localhost(与site1.dev一个站点)是可以的,就很奇怪。在宿主机ping不通nginx容器,看了下docker的network是bridge方式也没问题,
突然想到这次用的windows电脑安装docker时候选择的是wsl方式(兼容linux子系统),修改本机hosts 指向 wsl子系统应该就行了。

127.0.0.1 localhost
172.19.23.124 site1.dev #wsl子系统IP
172.19.23.124 site2.dev

posted @ 2024-10-17 00:33  天行侠  阅读(24)  评论(0编辑  收藏  举报