使用 Docker 包 laradock 佈署低版本 PHP 開發環境遇到的一些小問題及解決方法

Jourdon發表於2017-10-25

我平時使用的環境是 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!!

相關文章