胡桃仁

虚度光阴27 载

laradock+win10 构造多版本php 环境

结果

1
2

1、准备

1
2
3
4
├─code # 项目目录
│ ├─edp # 项目1 php7.1
│ └─test # 项目2 php5.6
└─laradock # laradock

3

2 laradock/.env 配置

2.1、复制env-example 到.env

1
cp laradock/env-example laradock/.env

2.2、修改.env

共享目录

1
APP_CODE_PATH_HOST=../code/

虚拟机的数据文件目录(随便)

默认的虚拟机里的数据库文件存储在了主机的C 盘,可能会很大。

1
DATA_PATH_HOST=/d/project/.laradock/data

默认的php 版本

1
PHP_VERSION=7.1

由于npm 的一些资源可能无法下载会中断

WORKSPACE_INSTALL_NPM 开头的全改成false
比如:

1
2
WORKSPACE_INSTALL_NPM_GULP=false
WORKSPACE_INSTALL_NPM_BOWER=false

3 配置另一个版本的php

复制php-fpm 为php-fpm5.6

1
cp laradock/php-fpm laradock/php-fpm5.6

编辑 laradock/docker-compose.yml

3.1.1、复制一份PHP-FPM 的php 配置并修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### PHP-FPM ##############################################
php-fpm:
build:
context: ./php-fpm
args:
- CHANGE_SOURCE=${CHANGE_SOURCE}
- BASE_IMAGE_TAG_PREFIX=${PHP_FPM_BASE_IMAGE_TAG_PREFIX}
- LARADOCK_PHP_VERSION=${PHP_VERSION}
### PHP-FPM5.6 ##############################################
php-fpm5.6:
build:
context: ./php-fpm
args:
{...与上面的PHP-FPM一样...}
# 写死php 版本
- LARADOCK_PHP_VERSION=5.6
{...与上面的PHP-FPM一样...}
volumes:
# 修改php 版本
- ./php-fpm/php5.6.ini:/usr/local/etc/php/php.ini

3.1.2、把php-fpm5.6 加到nginx 的depends_on

1
2
3
4
5
6
### NGINX Server #########################################
nginx:
depends_on:
- php-fpm
# 添加php-fpm5.6 的依賴
- php-fpm5.6

4 配置nginx

4.1、配置php7.1 的项目

1
cp laradock/nginx/sites/laravel.conf.example laradock/nginx/sites/j-mr.medlive.cn.conf

修改:laradock/nginx/sites/j-mr.medlive.cn.conf

1
2
server_name laravel.test;
root /var/www/laravel/public;

由于一开始就把默认的php 版本设置为了7.1,所以不用改fastcgi_pass php-upstream;

4.2、配置php5.6 的项目

1
cp laradock/nginx/sites/laravel.conf.example laradock/nginx/sites/test.project.cn.conf

修改laradock/nginx/sites/test.project.cn.conf

1
2
3
4
5
6
server_name test.project.cn;
root /var/www/test/;
........
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-fpm5.6:9000; # 这里指定为php-fpm5.6

5 构建

由于已经构建过默认的php-fpm 了,所以不用再次构建

1
docker-compose up -d nginx php-fpm5.6 mysql redis

notice :记得把地址加到主机hosts 里

出错

错误1:Package “imagick” does not have REST info xml available

由于之前构建过默认的7.1 版本的php-fpm,所以在执行
docker-compose up -d nginx php-fpm5.6 mysql redis 重新构建的时候出错

1
2
3
4
5
6
Package "imagick" does not have REST info xml available
install failed
ERROR: Service 'php-fpm5.6' failed to build: The command '/bin/sh -c if [ ${IN
STALL_IMAGEMAGICK} = true ]; then apt-get install -y libmagickwand-dev ima
gemagick && pecl install imagick && docker-php-ext-enable imagick ;fi'
returned a non-zero code: 1

解决:
参考:Unable to install imagick

修改两个php-fpm 文件夹下的Dockerfile

laradock/php-fpm/Dockerfilelaradock/php-fpm5.6/Dockerfile ,都要改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
###########################################################################
# ImageMagick:
###########################################################################

USER root

ARG INSTALL_IMAGEMAGICK=false

RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
apt-get update && \
apt-get install -y libmagickwand-dev --no-install-recommends \
# imagemagick && \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& rm -r /var/lib/apt/lists/* \
;fi

总结

评论