使用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了