一. 準(zhǔn)備開發(fā)環(huán)境
最近學(xué)習(xí) laravel,發(fā)現(xiàn)MVC 的概念和 Asp.net 很類似。不想把本機(jī)的環(huán)境搞得混亂,找到了 laradock 的這個(gè)好東西。(P.S.?自從有了 docker,各種開發(fā)環(huán)境的搭建就變得非常簡單了。)
按照 laradock.io 的說明,很容易就把開發(fā)環(huán)境搭建好了。第一部分簡單記錄下搭建步驟。
我的是 Mac 系統(tǒng),打開終端,進(jìn)入某個(gè)目錄(e.g. /Users/<user>/)。然后clone laradock。
1.?git clone https://github.com/Laradock/laradock.git
進(jìn)入 laradock 目錄(/Users/<user>/laradock/)。后面很多命令都需要在這里運(yùn)行的。
2. cp env-example .env
然后打開.env 文件,修改 APPLICATION 的值,指向希望存放代碼的目錄,相對(duì)路徑或絕對(duì)路徑都可以(e.g. /Users/<user>/projects)
3. docker-compose up -d nginx mysql redis phpmyadmin
通過 docker-compose 來啟動(dòng)項(xiàng)目需要的模塊(每個(gè)模塊是單獨(dú)的 docker 容器)。workspace和 php-fpm 會(huì)自動(dòng)運(yùn)行的,所以不需要指定。這里我需要運(yùn)行 nginx, mysql, redis 以及 mysql 的管理工具。
如果在瀏覽器輸入 http://localhost 會(huì)提示404。為了測試環(huán)境是否正確,可以在 APPLICATION 指定的目錄(/Users//projects)下面創(chuàng)建 public子目錄,里面放一個(gè) index.php 文件,這樣 http://localhost 就能訪問到了。
不過我們想要 laravel 框架,所以需要進(jìn)入 workspace 容器里面,創(chuàng)建基于 laravel 的工程。
4.?docker-compose exec --user=laradock workspace bash
現(xiàn)在你會(huì)發(fā)現(xiàn)已經(jīng)進(jìn)入了 workspace 的容器了,并且用戶是 laradock。當(dāng)前的目錄是/var/www。這個(gè)目錄正好是 host 機(jī)器里面的/Users/<user>/projects 一個(gè)映射。現(xiàn)在可以創(chuàng)建項(xiàng)目了,輸入命令
5. composer create-project laravel/laravel coolapp
這里的 coolapp 是項(xiàng)目的名字,可以隨意指定。如果像我一樣等了很久也沒有反應(yīng)的話。先通過 ctrl+c 結(jié)束命令。需要先設(shè)置國內(nèi)的鏡像。執(zhí)行如下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer create-project laravel/laravel coolapp?
輸入 exit 退出 workspace容器,你會(huì)發(fā)現(xiàn)/Users/<user>/projects 下面多了一個(gè) coolapp 的目錄。還是在 laradock 目錄里面,執(zhí)行如下命令先停止容器。
6. docker-compose down
修改一下.env 里面APPLICATION 的值為/Users/<user>/projects/coolapp。然后可以再次啟動(dòng)
7. docker-compose?up -d nginx mysql redis phpmyadmin
再瀏覽器里面輸入 http://localhost 就能發(fā)現(xiàn) Laravel 頁面了。
二. 通過 PHPStorm 調(diào)試 PHP
以前用慣了 Visual Studio,發(fā)現(xiàn)能調(diào)試是一件很幸福的事。laradock 本身是支持 xdebug 的,需要修改一些配置。
1. 打開.env 文件,修改下面的值。
WORKSPACE_INSTALL_XDEBUG=true
PHP_FPM_INSTALL_XDEBUG=true
2. 修改Laradock/PHP-FPM/xdebug.ini 以及 Laradock/workspace/xdebug.ini文件,修改或添加如下的內(nèi)容:
xdebug.remote_enable=1
xdebug.remote_host=docker.for.mac.localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.remote_handler=dbgp
xdebug.max_nesting_level=250
xdebug.remote_log=”/var/www/xdebug_logs/xdebug_docker.log”
需要說明的是,remote_host 設(shè)置的是 docker 容器所在主機(jī)的地址。我的 host 是 Mac,所以可以用 docker.for.mac.localhost。如果是 windows,需要用 docker 中可以訪問的主機(jī) ip 地址。
3. 接下來需要重新 build 容器
docker-compose build workspace php-fpm
我在 build 的時(shí)候遇到了如下的錯(cuò)誤,不能下載 xdebug安裝。
?--->
Running in 2c241ea48d1f
No releases available for package
"pecl.php.net/xdebug"
install failed
ERROR: Service 'php-fpm'
failed to build: The command '/bin/sh -c if [ ${INSTALL_XDEBUG} = true ]; then ? ? pecl install
xdebug && ? ? docker-php-ext-enable xdebug ;fi' returned a non-zero code: 1
后來發(fā)現(xiàn)連上 VPN 就可以了成功 build 了。

4. 重啟容器
docker-compose down && docker-compose up -d nginx mysql redis phpmyadmin
5. 打開 PHPStorm,進(jìn)入Preferences->Language & Frameworks->PHP->Servers,新建一個(gè) server,這里取名 php-fpm。

Host 里面填入 laradock。這是因?yàn)閘aradoc/.env 文件里面有一行設(shè)置了 serverName。
### Remote Interpreter ####################################
# Choose a Remote Interpreter entry matching name. Default is `laradock`
PHP_IDE_CONFIG=serverName=laradock
然后設(shè)置 host 機(jī)器里面的代碼目錄以及與server 的映射( /var/www)。
6. 配置 Run->Edit Configuration如下圖。

7.?點(diǎn)擊電話那個(gè)按鈕啟動(dòng)監(jiān)聽,然后按下小蟲子開始 debug。

8. 在瀏覽器里面輸入 URL,比如 http://localhost?,F(xiàn)在就可以調(diào)試了。

9. 有的時(shí)候不想調(diào)試的話,可以在 laradock 目錄下面執(zhí)行
./php-fpm/xdebug stop
需要調(diào)試的時(shí)候通過./php-fpm/xdebug start 開啟。
最后說一下如何訪問phpmyadmin。在瀏覽器里面輸入 http://localhost:8080。

服務(wù)器填寫 mysql,用戶名和密碼默認(rèn)都是 root.
References:
https://medium.com/full-stack-development/laradock-xdebug-ms-code-no-problem-35a4338deb3f