前言:
在实际开发中肯定遇到过项目用不同的laravel版本,服务器也是用不同的php版本
导致本地跑项目的时候会存在php版本不兼容的问题,想着能不能用laradock配置多版本php共存
在网上找了很久没有能直接拿到就用的,不过在其中却得到一些启发
1:进入laradock文件,将php-fpm复制一份为php-fpm56
PS:这里的php-fpm56是指我要装多一个php5.6版本,后续步骤可根据自己所需进行修改
原本我装的是php7.3的版本,这个是在.evn文件中默认的
2:打开laradock目录下的.docker-composer.yml配置文件
复制一份原本的PHP-FPM配置信息修改为自己想要的版本
### PHP-FPM ############################################## php-fpm: build: context: ./php-fpm args: #省略 volumes: - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - docker-in-docker:/certs/client expose: - "9000" extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} - DOCKER_HOST=tcp://docker-in-docker:2376 - DOCKER_TLS_VERIFY=1 - DOCKER_TLS_CERTDIR=/certs - DOCKER_CERT_PATH=/certs/client - FAKETIME=${PHP_FPM_FAKETIME} depends_on: - workspace networks: - backend links: - docker-in-docker ### PHP-FPM56 ############################################## php-fpm56: build: context: ./php-fpm56 #这里也就是第一部复制的文件 args: #省略 - LARADOCK_PHP_VERSION=5.6 #这里我们手动指定一个版本,不让build的时候读.env默认的版本 volumes: - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - docker-in-docker:/certs/client expose: - "9000" extra_hosts: - "dockerhost:${DOCKER_HOST_IP}" environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} - DOCKER_HOST=tcp://docker-in-docker:2376 - DOCKER_TLS_VERIFY=1 - DOCKER_TLS_CERTDIR=/certs - DOCKER_CERT_PATH=/certs/client - FAKETIME=${PHP_FPM_FAKETIME} depends_on: - workspace networks: - backend links: - docker-in-docker
3:重新启动容器,docker会重新build
docker-compose up -d nginx php-fpm56 mysql redis
之前的文章我们知道关联启动的时候会默认帮我们启动php-fpm和workspace容器
这时我们手动再添加一个新增的php-fpm56即可
重新build需要一段时间
4:给不同项目的nginx.conf配置文件指定php版本
a项目的配置文件
server { listen 80; #listen [::]:80 default_server ipv6only=on; # For https # listen 443 ssl default_server; # listen [::]:443 ssl default_server ipv6only=on; # ssl_certificate /etc/nginx/ssl/default.crt; # ssl_certificate_key /etc/nginx/ssl/default.key; server_name testa.cc; root /var/www/testa/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_pass php-upstream; #这里是默认的 fastcgi_index index.php; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fixes timeouts fastcgi_read_timeout 600; include fastcgi_params; } location ~ /\.ht { deny all; } location /.well-known/acme-challenge/ { root /var/www/letsencrypt/; log_not_found off; } }
b项目的配置文件
server { listen 80; #listen [::]:80 default_server ipv6only=on; # For https # listen 443 ssl default_server; # listen [::]:443 ssl default_server ipv6only=on; # ssl_certificate /etc/nginx/ssl/default.crt; # ssl_certificate_key /etc/nginx/ssl/default.key; server_name testb.cc; root /var/www/testb/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_pass php-fpm56:9000; #在这里我们指定使用5.6版本 fastcgi_index index.php; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fixes timeouts fastcgi_read_timeout 600; include fastcgi_params; } location ~ /\.ht { deny all; } location /.well-known/acme-challenge/ { root /var/www/letsencrypt/; log_not_found off; } }
配置完成后重启nginx容器即可
docker-compose restart nginx
5:验证
在2个项目的入口文件打印phpinfo()
可以参考之前的文章