怎樣在MAC下經過brew安裝LNMP

    在開始介紹怎樣在MAC中安裝LNMP環境以前,我只想說一句話,這個過程主要看人品,有的人不用浪費太多時間就能很輕鬆的完成,可是某些人(例如:myself)實在是一個不肯回憶的慘痛時光。好了不說廢話,切入主題......php

 

    本文參考:html

    一、http://www.javashuo.com/article/p-fekfvqci-e.html  很是詳細mysql

    二、http://avnpc.com/pages/install-lnmp-on-osx 與上一篇相似,但也值得借鑑nginx

    三、http://www.cnblogs.com/alexqdh/archive/2012/11/20/2776017.html 雖與標題關係不緊密,但也比較推薦git

    四、https://github.com/Homebrew/homebrew-php/issues/2667  在安裝過程當中遇到的一些問題這裏有記載github

 

    1、安裝Homebrewredis

    Homebrew是一個依賴管理工具,經過brew命令就能夠快速的幫助你安裝工具。安裝brew命令行以前要確保你的電腦上已經安裝了Xcode,而後執行如下命令:sql

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    安裝完成以後,在命令行中輸入    apache

username$ brew
# 下面是返回的內容
Eample usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.md

Further help:
  man brew
  brew home

    這是你就能夠根據返回的幫助信息進行下一步操做了,再此就不一一介紹每一個命令了。只重點說一下 install和unstallvim

# 安裝 FORMULA == 須要安裝的工具名稱 如: php、mysql、nginx
username$ brew install FORMULA    

# 卸載 FORMULA == 須要安裝的工具名稱 如: php、mysql、nginx
username$ brew uninstall FORMULA

  

   2、安裝PHP

    首先,添加Homebrew官方的幾項軟件源。

brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/php

    安裝的時候能夠根據須要本身的須要安裝不一樣版本的PHP環境,網上大多說安裝的說5.6和5.5.

    使用如下命令就能夠安裝PHP環境(php56 => PHP5.6),配置項能夠本身制定(--with-debug 能夠考慮不要)。

# 安裝PHP5.6
brew install php56 \
--without-snmp \
--without-apache \
--with-debug \
--with-fpm \
--with-intl \
--with-homebrew-curl \
--with-homebrew-libxslt \
--with-homebrew-openssl \
--with-imap \
--with-mysql \
--with-tidy

    在安裝的過程當中可能會出現報錯,以下

# 出現問題
checking for ZLIB support... yes
checking if the location of ZLIB install directory is defined... no
configure: error: Cannot find libz

    筆者搜索了網上的一些資料,根據https://github.com/Homebrew/homebrew-php/issues/2549 上介紹的解決方法,執行一條命令就能夠解決這個報錯

xcode-select --install

    除了這個報錯以外,還會遇到跟中權限問題,主要是文件夾沒有寫入權限,根據提示的文件夾,逐一進行修改便可。

    建議使用b "rew doctor"  命令進行錯誤檢查,它會返回一些頗有價值的問題信息,並有解決問題的提示。

    MAC都會自動帶有PHP和Apache環境,所以咱們要添加環境變量,優先執行咱們使用brew安裝的PHP環境。

# 增長環境變量
username$ echo 'export PATH="/usr/local/bin:/usr/local/sbib:$PATH"' >> ~/.bash_profile
username$ source ~/.bash_profile

    在安裝PHP5.6環境後(若是幸運的你能順利的來到這一步),就要繼續安裝PHP的擴展了,能夠直接安裝擴展,無需從新編譯PHP,咱們能夠經過

# 使用brew查找PHP
username$ brew search php56

    此命令能夠幫助咱們查看當前PHP5.6環境下有哪些擴展能夠安裝,這樣咱們就能夠自主選擇擴展進行安裝。下面是我安裝的擴展。

# 安裝PHP擴展
username$ brew install php56-gearman php56-msgpack php56-memcache php56-memcached php56-mongo  php56-phalcon php56-redis php56-xdebug

    在這個過程之中,可能會遇到一個錯誤以下,致使redis安裝失敗

Error: No such file or directory - /usr/local/opt/igbinary/include/igbinary.h

    解決方法是取網上下載igbinary-1.1.1.tar

# 進入到igbinary-1.1.1.tar所在目錄
username$ tar zxvf igbinary-1.1.1.tar
username$ cd igbinary-1.1.1
username$ /usr/local/Cellar/php56/5.6.17/bin/phpize
username$ ./configure --with-php-config=/usr/local/Cellar/php56/5.6.17/bin/php-config
username$ make
username$ make install
username$ vim /usr/local/etc/php/php.ini 
加上:
extensions=igbinary.so

   在igbinary-1.1.1文件夾裏面會有igbinary.h這個文件,將文件放到錯誤提示中的目錄下便可解決,而後從新安裝沒有安裝完成的擴展。

    注意,擴展安裝了,那對應的軟件也要安裝,一樣是實用brew命令進行安裝。而後使用PHP命令查看一下PHP是否安裝成功,它會返回PHP的版本和安裝的擴展等信息。

# 查看PHP信息
username$ php -v

    接下來修改php-fpm配置文件,vim /usr/local/etc/php/5.6/php-fpm.conf,找到pid相關大概在25行,去掉註釋 pid = run/php-fpm.pid, 那麼php-fpm的pid文件就會自動產生在/usr/local/var/run/php-fpm.pid,下面要安裝的Nginx pid文件也放在這裏。

    咱們還可使用php-fpm命令來測試 。

# 測試php-fpm配置
username$ php-fpm -t

    啓動\關閉\重啓php-fpm

# 啓動
username$ php-fpm -D

# 關閉
username$ kill -INT `cat /usr/local/var/run/php-fpm.pid`

#重啓
username$ php-fpm kill -USR2 `cat /usr/local/var/run/php-fpm.pid`

    啓動php-fpm以後,確保它正常運行監聽9000端口

username$ lsof -Pni4 | grep LISTEN | grep php
php-fpm   30907 calvin    9u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   30917 calvin    0u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   30918 calvin    0u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   30919 calvin    0u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
#正常狀況,會看到上面這些進程

    爲了使用方便,將php-fpm設爲開機自啓動。

username$ ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

    通過一番周折應該能夠順利的完成PHP環境的安裝與配置了,若是你在安裝的過程當中出現了其餘問題,請耐心的在網上進行搜索,此文也許只能解決你一部分的問題,good luck!

    3、安裝Nginx

    在經歷了安裝PHP環境的曲折以後,尚未獲得很好的休息,咱們又來安裝Nginx,提及Nginx仍是有有必要多說幾句的,通常狀況下有些人會使用Mac自帶的Apahce,這樣就不須要安裝Nginx了,但爲了更好的開發環境仍是建議去安裝一下Nginx,有益無害。

    一樣,咱們還說使用brew命令來安裝Nginx,命令以下

username$ brew install nginx

    這個安裝過程至關順暢一些,也許仍是會出現文件夾權限寫入問題,逐一進行排查就可以解決。不要忘記使用 "brew doctor" 去檢查是否有錯誤或警告產生在安裝的過程當中。

    安裝完成後去檢查Nginx

#測試配置是否有語法錯誤
username$ nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

    經常使用的Nginx命令

#打開 nginx
username$ sudo nginx

#從新加載配置|重啓|中止|退出 nginx
username$ nginx -s reload|reopen|stop|quit

    Nginx默認監聽的端口說8080,而不是一般認爲的80,因此要使用root執行權限讓Nginx去監聽80端口

# 將Nginx的端口由8080改成80,1.8.1是我安裝的版本,能夠根據安裝狀況去替換
username$ sudo chown root:wheel /usr/local/Cellar/nginx/1.8.1/bin/nginx
username$ sudo chmod u+s /usr/local/Cellar/nginx/1.8.1/bin/nginx

    將Nginx設爲開機自啓

# 開機自啓
user$ ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

    到此Nginx安裝完成。

    4、Nginx+PHP-FPM配置

    單單是安裝完成Nginx和PHP是不夠的,須要將二者結合起來才能知足咱們的常規開發模式。

    建立須要用到的目錄,注意要有權限才能夠執行命令。

# 建立目錄
username$ mkdir -p /usr/local/var/logs/nginx
username$ mkdir -p /usr/local/etc/nginx/sites-available
username$ mkdir -p /usr/local/etc/nginx/sites-enabled
username$ mkdir -p /usr/local/etc/nginx/conf.d
username$ mkdir -p /usr/local/etc/nginx/ssl
username$ sudo mkdir -p /var/www
username$ sudo chown :staff /var/www
username$ sudo chmod 775 /var/www

    接下來配置nginx.conf

# 打開配置文件進入編輯狀態
username$ vim /usr/local/etc/nginx/nginx.conf

    輸入如下內容並保存

worker_processes  1;
error_log   /usr/local/var/logs/nginx/error.log debug;
pid        /usr/local/var/run/nginx.pid;
events {    
    worker_connections  256;
}
http {    
    include       mime.types;    
    default_type  application/octet-stream;    
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';    
    access_log  /usr/local/var/logs/access.log  main;    
    sendfile        on;    
    keepalive_timeout  65;    
    port_in_redirect off;
    include /usr/local/etc/nginx/sites-enabled/*;
}

    設置 Nginx php-fpm 配置文件

# 編輯配置文件
username$ vim /usr/local/etc/nginx/conf.d/php-fpm
#proxy the php scripts to php-fpm
location ~ \.php$ {
    try_files                   $uri = 404;
    fastcgi_pass                127.0.0.1:9000;    
    fastcgi_index               index.php;    
    fastcgi_intercept_errors    on;    
    include /usr/local/etc/nginx/fastcgi.conf;
}

    準備Nginx虛擬主機

#建立 info.php index.html 404.html 403.html文件到 /var/www 下面,若是沒有寫入權限去調整一下
username$ vi /var/www/info.php
username$ vi /var/www/index.html
username$ vi /var/www/403.html
username$ vi /var/www/404.html

    建立默認虛擬主機

# 編輯文件
username$ vim /usr/local/etc/nginx/sites-available/default
# 輸入如下內容
server {
    listen       80;    
    server_name  localhost;    
    root         /var/www/;    
    access_log  /usr/local/var/logs/nginx/default.access.log  main;    
    location / {
            index  index.html index.htm index.php;        
            autoindex   on;        
            include     /usr/local/etc/nginx/conf.d/php-fpm;
    }    
    location = /info {
        allow   127.0.0.1;        
        deny    all;        
        rewrite (.*) /.info.php;
    }    
    error_page  404     /404.html;    
    error_page  403     /403.html;
}

    建立虛擬主機軟鏈接並開啓虛擬主機

username$ ln -sfv /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enabled/default

    這時咱們就能夠在瀏覽器中訪問咱們localhost,去訪問咱們的主頁了(固然,你要事先在index.html/index.php 編輯好內容,才能在localhost中顯示出來)。

    到此,咱們就將Nginx和PHP配置完成,若是發現localhost不能被訪問到的話,能夠試一下localhost:8080,若是能夠輸出的話,那麼就說明你的80端口沒有開放給Nginx。

    4、安裝MySQL

    在整個安裝的過程當中,我的感受MySQL比起上面兩個環境在安裝的過程當中出現問題的機率更大一些。我選擇的是5.6版本,因爲默認的版本的5.7,可是在安裝和配置的過程當中出現了一些問題沒有成功的解決,因此就選擇了低一點的版本。

# mysql56 表示5.6版本,能夠選擇其餘版本進行安裝
username$ brew install mysql56

    整個過程仍是比較順利的,可是不要高興的太早,若是你用mysql命令的時候,它就會報錯,若是沒有報錯那麼恭喜你,下面的內容就能夠跳過了而且能夠放心去使用mysql了。

# 執行mysql命令後的錯誤提示
username$ mysql -u root -p (初始密碼爲空,建議修改)
ERROR 2002 (HY000): Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    出現這個錯誤的緣由是mysql服務沒有啓動。

# 開始解決上一步出現的錯誤
username$ unset TMPDIR
# 而後進入mysql的安裝目錄
username$ cd /usr/local/Cellar/mysql56/5.6.27/
# 執行
username$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
# 檢查問題
username$ mysqld --initialize specified
# 若是出現問題,有多是目錄不存在,去建立對應的目錄便可
# 啓動mysql
username$ mysql.server start
# 進入mysql
username$ mysql -uroot -p
# 若是能成功的進入mysql證實mysql已經安裝成功了

    將mysql設爲開機自啓

username$ mkdir -p ~/Library/LaunchAgents
username$ cp /usr/local/Cellar/mysql56/5.6.27/homebrew.mxcl.mysql56.plist ~/Library/LaunchAgents/

    一切順利的話,到了這裏你就已經將mysql環境安裝完成了。

    mysql 一些命令:要注意mysql.server是在mysql的bin目錄下

mysql.server start|restart|stop...

    

    結束語:安裝過程當中可能會出現各類奇葩的問題,只要有足夠的耐心就能夠將問題解決,本問僅供參考並不具備權威性,若是能夠解決你所遇到的問題,那麼很是榮幸。請不要吝嗇分享好的文章給其餘人。

相關文章
相關標籤/搜索