更新於 2017/1/10:Laravel 官方已推出 Laravel Valet,建議採用 Valet 方式進行安裝。
建議你熟悉 Terminal 的操作再參考本篇,否則容易把系統環境搞亂。
在開發 Laravel Application 時,新手可能使用 *AMP 的系統環境整合包,而大多數人會選擇官方所提供的 Homestead。但 Homestead 其實就是一包很大包的虛擬機再配上 Vargrant,曾幾何時我也是使用 Homestead,但是因為我的小 Macbook Air 實在是受不了虛擬機容量一大包,又吃一堆記憶體。
雖然標題是寫 Laravel,但是要應用在其他的 PHP Application 也是可行的。本篇就以 Homebrew 為主軸,打造 Laravel 的開發環境。
如同 ubuntu 有 apt-get
、CentOS 有 yum
一樣,Homebrew 就是 OSX 的套件管理器。不同的是前者都是系統內建的,而 Homebrew 則是因為 OSX 本身沒有這種東西,所以就有大神為 OSX 打造了套件管理器。
在開始之前,先說說開發 Laravel 需要哪些需求?
Laravel 是目前在 PHP 中最熱門的 Framework,其實除了透過 *AMP 指向 public
資料夾及使用 Homestead 外,Laravel 也提供了 command line 的方式啟動 development server。
$ php artisan serveLaravel development server started on http://localhost:8000/
只要在專案目錄中執行 php artisan serve
,就會執行 development server。也就是說我們至少需要 php-cli 來執行 development server。
PHP-CLI 為 PHP Command Line Interface,也就是 Command Line 的 PHP 執行環境。
沒錯,開發一個 Web Application 一定需要資料庫,而我平常是使用 MariaDB,所以我們也必須安裝 MariaDB。
而我平常在開發的時候,會把 Cache、Session、及 Queue 的 Driver 都設定為 Redis,所以我們會安裝 Redis。
所以我們必須透過 Homebrew 安裝這些東西:
開始之前,當然必須先安裝 Homebrew,官方網站已有提供指令進行安裝,打開 terminal 並輸入即可:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
此指令會透過 curl 下載官方安裝檔,並透過 ruby 執行。他會在你的電腦安裝 homebrew。
Homebrew 的使用方式很簡單,以下介紹幾個常用指令:
brew update
:更新 Homebrew。brew search wget
:透過 brew search
可以搜尋套件,範例為搜尋名字有 wget 的套件。brew install wget
:你可以使用 brew intsall
來安裝套件,範例會安裝 wget。更多指令可以輸入 brew help
,或參考官方的 FAQ。
當然,我們首先必須安裝 PHP,我們先執行以下指令尋找 php:
$ brew search php
你應該會看到非常多的 php,像是 homebrew/php/php53
、homebrew/php/php54
⋯⋯ 一直到最新的 homebrew/php/php70
。而 php 7.0 有相容舊版本,所以我是使用 php 7.0 開發,所以我們來搜尋一下 php 7.0:
$ brew search php70
你會看到 PHP 7.0,及 PHP 7.0 的 extenstions。我們直接安裝 php70 即可:
$ brew install php70
安裝完後,執行以下指令看看是否有安裝完成:
$ php -vPHP 7.0.2 (cli) (built: Jan 7 2016 10:40:26) ( NTS )Copyright (c) 1997-2015 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
你可以進入一個 Laravel 專案,並執行 development server 看看:
$ laravel new awesome_homebrew$ cd awesome_homebrew$ php artisan serveLaravel development server started on http://localhost:8000/
你也可以指定 Port:
$ php artisan serve --port=8080Laravel development server started on http://localhost:8080/
如果是一般的 PHP 專案,可以用以下方式開啟 development server:
$ php -S localhost:8000 -t publicPHP 7.0.2 Development Server started at Mon Feb 1 17:02:58 2016Listening on http://localhost:8000Document root is /Users/jigsawye/Projects/laravel/demo/publicPress Ctrl-C to quit.
其中 localhost:8000
的部分是指你要開在哪個 Host,後面的 public 則是選擇你 indxe.php
的目錄,也就是 Application 進入點。
安裝方式一樣,先搜尋再安裝:
$ brew search mariadb$ brew install mariadb
安裝完成後,Homebrew 會提示你可以使用以下指令開啟 MySQL:
$ mysql.server startStarting MySQL. SUCCESS!
然後你可以連接至你的 MySQL:
$ mysql -uroot
$ brew search redis$ brew install redis
同樣的,Homebrew 提示使用以下指令開啟 Redis:
$ redis-server /usr/local/etc/redis.conf5725:M 01 Feb 15:53:36.291 * Increased maximum number of open files to 10032 (it was originally set to 2560)._.__.-``__ ''-.__.-`` `. `_. ''-._ Redis 3.0.7 (00000000/0) 64 bit.-`` .-```. ```\/ _.,_ ''-._( ' , .-` | `, ) Running in standalone mode|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379| `-._ `._ / _.-' | PID: 5725`-._ `-._ `-./ _.-' _.-'|`-._`-._ `-.__.-' _.-'_.-'|| `-._`-._ _.-'_.-' | http://redis.io`-._ `-._`-.__.-'_.-' _.-'|`-._`-._ `-.__.-' _.-'_.-'|| `-._`-._ _.-'_.-' |`-._ `-._`-.__.-'_.-' _.-'`-._ `-.__.-' _.-'`-._ _.-'`-.__.-'5725:M 01 Feb 15:53:36.293 # Server started, Redis version 3.0.75725:M 01 Feb 15:53:36.293 * DB loaded from disk: 0.000 seconds5725:M 01 Feb 15:53:36.293 * The server is now ready to accept connections on port 6379
不過你會發現,Redis 會佔用一個 terminal,相當不便。
相信有些人可能會發現,在啟動 MariaDB 及 Redis 時,指令有些微的不同,沒有一個統一管理這些 services 的工具,像是 ubuntu 的 service <servicename> start
。雖然 Homebrew 有提供 launchctl
來管理,不過操作起來實在是太麻煩了。其實 Homebrew 額外有提供一個 services 的管理工具,透過這個工具就可以統一管理所有的 services。
執行以下指令安裝:
$ brew tap homebrew/services
如果你剛剛有透過指令啟動 MariaDB 與 Redis,現在我們先將它關閉。Redis 直接透過 Ctrl + C
關閉即可,MariaDB 請使用以下指令關閉:
$ mysql.server stopShutting down MySQL... SUCCESS!
使用以下指令可以查看目前所安裝的 services:
$ brew services listName Status User Plistmariadb stoppedphp70 stoppedredis stopped
很方便吧!接著我們來啟動 MariaDB 及 Redis:
$ brew services start mariadb==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)$ brew services start redis==> Successfully started `redis` (label: homebrew.mxcl.redis)
查看一下啟用之後的 services 列表:
$ brew sercies listName Status User Plistmariadb started jigsawye /Users/jigsawye/Library/LaunchAgents/homebrew.mxcl.mariadb.plistphp70 stoppedredis started jigsawye /Users/jigsawye/Library/LaunchAgents/homebrew.mxcl.redis.plist
若要關閉 servies,執行 brew services stop <servicename>
即可!
在一些專案可能需不同的 PHP 版本來執行,以下就說明如何接換多版本的 PHP。
像前面說明的一樣,我們可以直接安裝其他版本的 PHP:
$ brew install php56Error: Cannot install homebrew/php/php56 because conflicting formulae are installed.php70: because different php versions install the same binaries.Please `brew unlink php70` before continuing.Unlinking removes a formula's symlinks from /usr/local. You canlink the formula again after the install finishes. You can --force thisinstall, but the build may fail or cause obscure side-effects in theresulting software.
你應該看到這個錯誤,他的意思是指你已經安裝了其他版本的 PHP,請 unlink
其他版本後再安裝。unlink
意指你必須將原本綁的 php70
給卸除掉(並非移除),再接著安裝。
$ brew unlink php70$ brew install php56
接著就可以查看 PHP 版本,你應該切換成 PHP 5.6:
$ php -vPHP 5.6.17 (cli) (built: Jan 8 2016 10:27:48)Copyright (c) 1997-2015 The PHP GroupZend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
若要切換回去也相當簡單,unlink
PHP 5.6 再 link
PHP 7.0 即可:
$ brew unlink php56Unlinking /usr/local/Cellar/php56/5.6.17... 18 symlinks removed$ brew link php70Linking /usr/local/Cellar/php70/7.0.2... 17 symlinks created$ php -vPHP 7.0.2 (cli) (built: Jan 7 2016 10:40:26) ( NTS )Copyright (c) 1997-2015 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
有時你可能需要安裝 PHP 的 extenstions,像是為了產生 PHPUnit 的 coverage report 就必須安裝 Xdebug,為了提升執行速度則裝 OPCache。
所有的 PHP extenstions 都是以 phpXX-*
來命名,也就是說如果你現在使用 PHP 7.0,那麼就會是 php70-*
。讓我們來搜尋 PHP 7.0 有哪些 extenstions 可以安裝:
$ brew search php70homebrew/php/php70 homebrew/php/php70-imagick homebrew/php/php70-mongodb homebrew/php/php70-pthreadshomebrew/php/php70-amqp homebrew/php/php70-intl homebrew/php/php70-msgpack homebrew/php/php70-rdkafkahomebrew/php/php70-apcu homebrew/php/php70-kafka homebrew/php/php70-mustache homebrew/php/php70-redishomebrew/php/php70-apcu-bc homebrew/php/php70-libsodium homebrew/php/php70-oauth homebrew/php/php70-snmphomebrew/php/php70-ast homebrew/php/php70-lzf homebrew/php/php70-opcache homebrew/php/php70-tidyhomebrew/php/php70-blitz homebrew/php/php70-mailparse homebrew/php/php70-pcntl homebrew/php/php70-uuidhomebrew/php/php70-ev homebrew/php/php70-mcrypt homebrew/php/php70-pdo-dblib homebrew/php/php70-v8jshomebrew/php/php70-gmp homebrew/php/php70-mecab homebrew/php/php70-pdo-pgsql homebrew/php/php70-xdebughomebrew/php/php70-hprose homebrew/php/php70-memcached homebrew/php/php70-pspell homebrew/php/php70-yaml
你會看到一拖車的 extenstions,這邊我以 Xdebug 為例:
$ brew install php70-xdebug
然後看看你的 PHP 版本,Xdebug 應該已經安裝完成:
$ php -vPHP 7.0.2 (cli) (built: Jan 7 2016 10:40:26) ( NTS )Copyright (c) 1997-2015 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologieswith Xdebug v2.4.0RC3, Copyright (c) 2002-2015, by Derick Rethans
所有的 extenstions 啟用檔案都會存放在 /usr/local/etc/php/X.X/conf.d/ext-*.ini
,以剛剛安裝的 Xdebug 為例,他的檔案會存放在 /usr/local/etc/php/7.0/conf.d/ext-xdebug.ini
。若要關閉該 extenstions,用編輯器編輯他即可:
sudo vim /usr/local/etc/php/7.0/conf.d/ext-xdebug.ini
檔案內容很簡單:
[xdebug]zend_extension="/usr/local/opt/php70-xdebug/xdebug.so"
若要關閉,把第二行註解掉在存檔即可:
[xdebug]# zend_extension="/usr/local/opt/php70-xdebug/xdebug.so"
註解完後就關閉了:
$ php -vPHP 7.0.2 (cli) (built: Jan 7 2016 10:40:26) ( NTS )Copyright (c) 1997-2015 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
到此就完成囉,其實安裝起來不會很困難,操作起來也很簡單。相比 *AMP 與 Homestead,使用的資源及容量也輕巧很多。希望本篇可以提供給操作 terminal 一段時間的人做參考,畢竟自幹環境比起一鍵安裝包安心多了 XD,想裝就裝,想砍就砍!
← Back to Home