使用Laradock建立Laravel運行環境 & 遇到的問題

環境:windows 跑 VirtualBox ubuntu 18.04

執行 apt upgrade 和 apt update

安裝 git, docker.io, docker-compose

docker版本:17.06.2ce

docker-compose版本:1.17.1


運行laradock

於/文件下載laradock

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

複製環境設定

cp env-example .env

運行container

docker-compose up -d nginx mysql phpmyadmin

進入 workspace container 建製 laravel 專案資料夾

docker exec -it

建製laravel

於當前路徑安裝 composer

apt install composer

下載 laravel安裝程序

composer global require "laravel/installer"

將 composer 加入環境變數

export PATH=$PATH:$HOME/.composer/vendor/bin

建立專案資料夾blog

laravel new blog

更改 laradock 容器映射路徑

/vim laradock/.env

### Paths #################################################
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../blog/  
# 找到上面這行,修改為 laravel 專案於 laradock/ 的相對路徑

如果在container外面編輯專案的話要把這個地方改一下,資料才可以順利同步到container內# Point to where the `APP_CODE_PATH_HOST` should be in the container. You may add flags to the path `:cached`, `:delegated`. When using Docker Sync add `:nocopy`
APP_CODE_PATH_CONTAINER=/var/www:delegated #這裡要把cache改成delegated

更改專案資料夾blog權限

因為於 container 內建立的專案資料夾 owner, group都是root,用IDE編輯內容的話極度不方便,所以我會將資料夾和其子目錄的 owner, group 更改為自己常用的帳號

於~/文件sudo chown {userName} blog -Rsudo chgrp {userName} blog -R

更改 /blog/.env 環境設置DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=mysql
DB_USERNAME=root
DB_PASSWORD=rootREDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

目前遇到的問題

於 workspace container 中執行下面指令會出現錯誤artisan make:auth
artisan migrate // 執行這一行時,mysql會拒絕request

1.目前查到的原因:最新版的mysql所造成的問題,似乎跟用戶密碼的加密方式有關,但我更改mysql 使用者密碼 =>不加密 還是無法解決此問題。

2.更改 laradock/.env 的 mysql 版本 => 5.7會造成 mysql container 異常中止

3.嘗試使用 https://github.com/laradock/laradock/issues/1392
中的方法來解決上述問題,嘗試中…

4.使用實體機安裝ubuntu 18.04 ...跑 docker-compose mysql:5.6版可以順利架起 container 不懂為什麼用vm跑會失敗…


後續解決方案

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

上述錯誤訊息,參考https://github.com/laradock/laradock/issues/1392#issuecomment-409612243
到mysql的container中執行

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; 
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';

之後就可以順利執行migration了