使用 Docker 包 laradock 布署低版本 PHP 开发环境遇到的一些小问题及解决方法

我平时使用的环境是 Homestead ,我真不想说它是有多方便。但是最近一个项目没法使用它了。因为要使用 PHP5.4 的版本,homestead 如果切换版本这个问题我一直没搞明白,所以没办法,转去用了 mamp ,然后你就会发现 mamp 真垃圾啊。超级不好用。没办法继续研究 docker .于是发现了 laradock ,这个家伙是真心好用,可惜在低版本时会遇到一些问题。其它也不是 Laradock 的问题,这里记录一下。

安装docker

安装这里就省略掉吧。配置这里需要注意一下,因为众所周知的原因,需要把 Docker 切换到国内镜像(我曾经因为没有配置镜像多次安装失败,心累!)
点击 Docker-> Preferences->daemon->registry mirrors ,这里可以添加国内镜像,可以使用网易或阿里云的镜像地址,这里不是重点。默认你添加完了,继续向下吧

安装Laradock

其它官方文档已经非常全面了,我只简单写下,主要是记录出错的解决方法

1 - 克隆项目到本地

    git clone https://github.com/Laradock/laradock.git

2 - 重命名 env-example.env

    cd laradock 
    cp env-example .env

3 - 运行容器

    docker-compose up -d nginx mysql redis beanstalkd

4 -打开浏览器并访问本地主机:http://localhost

    That's it! enjoy :)

上面几个步骤其实已经把 docker 运行起来了,是不是相当的简单?但是我可以有一些其它的需求,比如,我现在的项目是比较老的项目,使用的是TP3.1 的框架,需要使用的 PHP 版本为 5.4 ,需要同时使用 mongomysql 这两种数据库,这里就需要对 laradock 进行一些配置的更改了

重点在这里,配置laradock

我们先去查看一下 .env 文件,这里常规配置

    ############################
    # General Setup
    ############################

    ### Application Path
    # Point to your application code, will be available at `/var/www`.

    //APPLICATION=../ 这里是共享站点目录的位置,也就是当前的laradock目录的上级,为了方便管理,我在laradock的同级目录建了一个WWW目录做为网站目录,于是这里我改成下面了
    APPLICATION=../www/

    ### Data Path:
    # For all storage systems.
    //数据库地址。这里可以使用默认,
    DATA_SAVE_PATH=~/.laradock/data

    ### PHP version
    # Applies to the Workspace and PHP-FPM containers (Does not apply to HHVM)
    //这里是PHP默认支持的版本。只有三个选择,我只好选择5.6了
    # Accepted values: 71 - 70 - 56

    //PHP_VERSION=71  修改为
    PHP_VERSION=56

    ### PHP interpreter
    # Accepted values: hhvm - php-fpm

    PHP_INTERPRETER=php-fpm

继续向下就是一个 PHP 的扩展的配置,你需要开启什么扩展,就把他后面的 false 改成 true ,我需要使用 mongo , mysqlredis ,所以只需要改这个几,但是 LDAPV8JS 也需要一起改,因为不改他们也会报错,这里不详细说了。

    ### WORKSPACE ##########################################################################################################

    WORKSPACE_INSTALL_XDEBUG=false
    WORKSPACE_INSTALL_LDAP=true
    WORKSPACE_INSTALL_SOAP=false
    WORKSPACE_INSTALL_MONGO=false
    WORKSPACE_INSTALL_PHPREDIS=true
    WORKSPACE_INSTALL_MSSQL=false
    WORKSPACE_INSTALL_NODE=false
    WORKSPACE_INSTALL_YARN=false
    WORKSPACE_INSTALL_DRUSH=false
    WORKSPACE_INSTALL_DRUPAL_CONSOLE=false
    WORKSPACE_INSTALL_AEROSPIKE=false
    WORKSPACE_INSTALL_V8JS=true
    WORKSPACE_COMPOSER_GLOBAL_INSTALL=false
    WORKSPACE_INSTALL_WORKSPACE_SSH=false
    WORKSPACE_INSTALL_LARAVEL_ENVOY=false
    WORKSPACE_INSTALL_LARAVEL_INSTALLER=false
    WORKSPACE_INSTALL_DEPLOYER=false
    WORKSPACE_INSTALL_LINUXBREW=false
    WORKSPACE_INSTALL_MC=false
    WORKSPACE_INSTALL_SYMFONY=false
    WORKSPACE_INSTALL_PYTHON=false
    WORKSPACE_INSTALL_IMAGE_OPTIMIZERS=false
    WORKSPACE_INSTALL_IMAGEMAGICK=false
    WORKSPACE_INSTALL_TERRAFORM=false
    WORKSPACE_INSTALL_DUSK_DEPS=false
    WORKSPACE_PUID=1000
    WORKSPACE_PGID=1000
    WORKSPACE_CHROME_DRIVER_VERSION=2.32
    WORKSPACE_NODE_VERSION=stable
    WORKSPACE_YARN_VERSION=latest
    WORKSPACE_TIMEZONE=UTC
    WORKSPACE_SSH_PORT=2222

    ### PHP_FPM ############################################################################################################

    PHP_FPM_INSTALL_XDEBUG=false
    PHP_FPM_INSTALL_MONGO=false
    PHP_FPM_INSTALL_MONGO_OLD=true
    PHP_FPM_INSTALL_MSSQL=false
    PHP_FPM_INSTALL_SOAP=false
    PHP_FPM_INSTALL_ZIP_ARCHIVE=false
    PHP_FPM_INSTALL_BCMATH=false
    PHP_FPM_INSTALL_PHPREDIS=true
    PHP_FPM_INSTALL_MEMCACHED=false
    PHP_FPM_INSTALL_OPCACHE=false
    PHP_FPM_INSTALL_EXIF=false
    PHP_FPM_INSTALL_AEROSPIKE=false
    PHP_FPM_INSTALL_MYSQLI=true
    PHP_FPM_INSTALL_POSTGRES=false
    PHP_FPM_INSTALL_TOKENIZER=false
    PHP_FPM_INSTALL_INTL=false
    PHP_FPM_INSTALL_GHOSTSCRIPT=false
    PHP_FPM_INSTALL_LDAP=true
    PHP_FPM_INSTALL_SWOOLE=false
    PHP_FPM_INSTALL_IMAGE_OPTIMIZERS=false
    PHP_FPM_INSTALL_IMAGEMAGICK=false

这里你会发现我的配置文件比你的配置多出了一行

    PHP_FPM_INSTALL_MONGO_OLD=true

没错,原本的配置文件里是没有这一行的,这个问题是因为PHP5.6 版本的问题,如果直接使用原本的 PHP_FPM_INSTALL_MONGO=true 这个配置,最后你会发现这样的报错 ,

Error: Class 'MongoClient' not found

这个问题在 laradockissue 里已经有人遇到过,地址在这里,虽然官方没有修复,但是已经有人提出了解决方法,地址在这里,好的,我们来看解决方法,需要更改以下三个文件。

docker-compose.yml 文件。

    INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
    INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP}
    INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}

    //多加了这里
    INSTALL_MONGO_OLD=${PHP_FPM_INSTALL_MONGO_OLD}

    INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
    INSTALL_ZIP_ARCHIVE=${PHP_FPM_INSTALL_ZIP_ARCHIVE}
    INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}

env-example 文件,当然别忘记 .env文件。

   PHP_FPM_INSTALL_XDEBUG=false
   PHP_FPM_INSTALL_MONGO=false
   //这里多加了一行代码,别忘记改成true
   PHP_FPM_INSTALL_MONGO_OLD=false

   PHP_FPM_INSTALL_MSSQL=false
   PHP_FPM_INSTALL_SOAP=false
   PHP_FPM_INSTALL_ZIP_ARCHIVE=false  

php-fpm/Dockerfile-56 文件,后面的 56 对应是的 PHP 的版本号,在原本的 MongoBD 前面加入了 Mongo(old).

     #####################################
     # Mongo (old):
     #####################################

     ARG INSTALL_MONGO_OLD=false
     RUN if [ ${INSTALL_MONGO_OLD} = true ]; then \
         # Install the mongo extension
         pecl install mongo && \
         docker-php-ext-enable mongo \
     ;fi

     #####################################
      # MongoDB:
      #####################################

OK。。现在配置文件搞定了,去重新 build 一下吧,记得,你改过配置的都需要重新 build

    docker-composer build php-fpm workspace 

时间可能会久一些,抽根烟等一下吧。等到代码跑完就OK了,现在可以启动了

    docker-compose up -d nginx mongo mysql redis beanstalkd phpmyadmin

打开 localhost ,你又会看到熟悉的 LARAVEL 标志了,当然,我这里显示的是 欢迎使用Thinkphp

本作品采用《CC 协议》,转载必须注明作者和本文链接
Good Good Study , Day Day Up!!
Jourdon
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

按照你这个方法,mysql 开启不到?

file

6年前 评论
Jourdon

@HectorChan docker image 试一下

6年前 评论

win7 下,使用 docker toolbox 安装的 laradock 使用 localhost 访问不了页面,使用 docker-compose ps 命令查看服务都 up 的。

5年前 评论

最后一个 重启命令事docker-compose 没有r

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!