(踩坑)WSL2+docker+laradock 配置並安裝 Laravel 框架

code386發表於2020-06-04

系統環境介紹:
wsl2(Ubuntu18.04) + docker + laradock

建立專案資料夾並在該資料夾下下載laradock

$ mkdir laravel_test
$ cd laravel_test/
$ git clone https://github.com/laradock/laradock.git

目錄結構:
laradock入門配置並安裝Laravel框架

$ cd laradock/
$ cp env-example .env
# 這個變數通常預設就行,最後此時的專案目錄會對映到 workspace 容器的 `/var/www/` 目錄中
APP_CODE_PATH_HOST=../

# 像mysql等需要volume的資料會存放在宿主機中的位置,如果有需要可以修改一下
DATA_PATH_HOST=~/.laradock/data

# php版本(7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6)
PHP_VERSION=7.3


### MYSQL #################################################
# mysql版本,預設是lastest,根據需要修改
MYSQL_VERSION=5.7
# 預設資料庫名字
MYSQL_DATABASE=laravel
# 資料庫使用者名稱
MYSQL_USER=default
# 資料庫使用者密碼
MYSQL_PASSWORD=secret
# 資料庫埠
MYSQL_PORT=3306
# 資料庫root使用者的密碼
MYSQL_ROOT_PASSWORD=root


# 更換中國映象源,改為true
CHANGE_SOURCE=true
# 上面 `CHANGE_SOURCE` 改為`true`之後,就會更換為aliyun映象源
UBUNTU_SOURCE=aliyun


### WORKSPACE #############################################
# 將comoser更換為阿里映象源(更改為其他國內映象源也可以,否則速度不穩定)
WORKSPACE_COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/
# 設定NVM安裝node的淘寶映象源
WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
# 設定node的淘寶的registry
WORKSPACE_NPM_REGISTRY=https://registry.npm.taobao.org/
# 時間改為PRC
WORKSPACE_TIMEZONE=PRC

如果不需要node,可以將以下配置改為false,上面的node淘寶映象源就不需要配置了

WORKSPACE_INSTALL_NODE=false
WORKSPACE_INSTALL_YARN=false
WORKSPACE_INSTALL_NPM_GULP=false
WORKSPACE_INSTALL_NPM_BOWER=false
WORKSPACE_INSTALL_NPM_VUE_CLI=false
WORKSPACE_INSTALL_NPM_ANGULAR_CLI=false

4.1、./laradock/workspace//Dockfile的修改

想要安裝node,還需要以下配置,否則執行docker-compose會出錯

出錯截圖:
laradock入門配置並安裝Laravel框架
原因分析:
透過上述紅字並百度一堆各種對的或錯的解答之後,應該是node是透過nvm來安裝的,但是無法透過raw.githubusercontent.com/creation... 下載安裝nvm。透過瀏覽器輸入網址發現根本訪問不了。
透過檢視 ./laradock/workspace/Dockerfile 查詢網址關鍵字,定位如下圖:
laradock入門配置並安裝Laravel框架
解決方案:

網路上的方法通常就三個方案:
第一:透過查詢上述網址的ip地址,修改host,讓該網址對應ip,但是根本不管用
第二:就是手動下載sh檔案,並且修改Dockerfile的方法安裝nvm
第三:直接把.env檔案中的node全部false,不要node了

因為我自己想要儘可能完整的實現laradock的本該安裝的東西,所以採用第二種方法:

  1. 在github上下載對應版本
    laradock入門配置並安裝Laravel框架
    只需要下載 install.sh(install.sh一定要確保是unix編碼格式) 就可以了,為了方便下載到 ./laradock/workspace/ 目錄中
  2. 修改 ./laradock/workspace/Dockerfile 檔案,修改後如下圖
    laradock入門配置並安裝Laravel框架
    • COPY ./install.sh /tmp/install.sh:將下載的install.sh複製進docker容器中
    • /bin/sh -c /tmp/install.sh:執行install.sh
    • 上兩步已經完成了 註釋掉的 curl

4.2、有機率會出現 /tmp/sources.sh: not found

出錯截圖:
laradock入門配置並安裝Laravel框架
原因分析:
sources.sh不是以unix格式編碼
參考:github.com/laradock/laradock/pull/...
解決方法:

  • 如果是windows系統,用nodepad++等編輯器重新轉為Unix編碼即可
  • 如果是Linux,進入 laradock 目錄,執行以下命令即可:
    $ vi ./workspace/sources.sh
    $ :set ff=unix
    $ :wq

要在 ./laradock 目錄下 執行命令

預設會啟動 workspace、php-fpm 和 composer 等都會自動配置

$ docker-compose up -d nginx mysql

此時進入workspace容器後,會預設在 /var/www 專案目錄下

# 進入workspace容器
$ docker-compose exec workspace /bin/bash

# 在容器中執行composer命令將Laravel框架安裝在 ./laravel 目錄中
root@b0cf8f8333e4:/var/www# composer create-project --prefer-dist laravel/laravel laravel "6.*"

此時的目錄結構如下圖:
laradock入門配置並安裝Laravel框架

我自己習慣在瀏覽器中用localhost訪問,然後為了方便,就直接把 laravel.conf.example 修改為 default.conf 了

所以主要是註釋掉server_name修改專案站點目錄
laradock入門配置並安裝Laravel框架

$ docker-compose restart nginx

此時已經可以在瀏覽器中透過 localhost 訪問了,我是用wsl2環境搭建的,所以宿主機不支援127.0.0.1,只能透過localhost訪問

laradock的mysql容器不是以ip地址連線的,而是以mysql標籤名連線的
所以 ./laravel/.env 中關於DB_HOST的值不是ip地址,而是mysql這個單詞

引數修改為:
./laravel/.env

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

途徑一:透過 phpmyadmin

  1. workspace佔用著8080埠,所以需要修改 ./laradock/.env中的埠
    # 把phpmyadmin預設的8080改為不被佔用的埠
    PMA_PORT=8081
  2. 啟動phpmyadmin
    $ docker-compose up -d phpmyadmin
  3. 瀏覽器網址:localhost:8081
    laradock入門配置並安裝Laravel框架

途徑二:透過 amdiner

  1. 修改 ./laradock/.env 中的埠
    # 把adminer預設的8080改為不被佔用的埠
    ADM_PORT=8082
  2. 啟動 adminer
    $ docker-compose up -d adminer
  3. 瀏覽器網址:localhost:8082
    laradock入門配置並安裝Laravel框架

途徑三:透過宿主機資料庫管理工具管理:
資料庫連線工具:
我的環境是wsl2環境,ip地址就要改為localhost,暫時不支援127.0.0.1
laradock入門配置並安裝Laravel框架

如果不是這樣的環境,應該是mysql? 這個我自己沒有試驗過,還不確定,但是ip地址應該無外乎上面的幾個吧。

至此,基本的配置和安裝都結束了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章