Mac OSX系統下,使用homebrew搭建PHP開發環境

本開發環境,所有基於HomeBrew安裝。php

主要軟件版本:PHP5.5.25,Nginx 1.8.0,MySQL5.6.25html

    近段時間工做環境切換到Mac,因此以OS X Yosemite(10.10.3)爲例,記錄一下在MAC系統下,全新安裝PHP開發環境的過程。node

    確保系統已經安裝好Xcode。若是有最新版本,最好是先手動升級到最新版的Xcode.mysql

    在命令行執行如下命令,從新安裝 Xcode Command Line Tools。能夠減小後續安裝的一些沒必要要的麻煩nginx

xcode-select —install

    再執行如下命令,使之生效
git

xcodebuild -license

第一步:安裝經常使用的軟件

    brew

    Brew 是 Mac 下面的包管理工具,經過 Github 託管適合 Mac 的編譯配置以及 Patch,能夠方便的安裝開發工具。 Mac 自帶ruby 因此安裝起來很方便,同時它也會自動把git也給你裝上。官方網站: http://brew.sh 。github

    執行命令
redis

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

    而後執行如下命令來安裝所須要的依賴sql

brew install FORMULA

    自檢:查看是否有更新。建議每次操做以前先執行下這個命令
chrome

brew doctor

  若是有須要更新,則

brew update && brew upgrade

  首先添加幾個brew官方的幾個軟件源

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

    Oh My Zsh 和 iTerm2

    ohmyzsh 和 iTerm2兩個命令行工具,在Mac os x下是必定要裝的. 兩組配合起來使用,搭配一些插件。簡直神器。

curl -L http://install.ohmyz.sh | sh
brew cask install iterm2

    雖然Mac自帶了zsh,也能夠本身安裝最新版的zsh

brew install zsh

    查看系統支持的shell列表,也能夠更改系統默認的shell

cat /etc/shells  //查看列表
zsh --version    //查看版本
chsh -s /bin/zsh //更改系統默認的shell

    homebrew-cask

     對比與mac系統的app store,對於開發者來講,cask裏面的軟件源更全面,更新速度也快,操做起來也更舒服 -_-

brew tap phinze/homebrew-cask  //添加軟件源
brew install brew-cask

    cask經常使用命令:

brew cask search        #列出全部能夠被安裝的軟件
brew cask search php    #查找全部和php相關的應用
brew cask list          #列出全部經過cask安裝的軟件
brew cask info phpstorm #查看信息
brew cask uninstall qq  #卸載

    安裝經常使用的開發包&軟件

    安裝開發包

brew install wget watch tmux cmake openssl imagemagick graphicsmagick gearman geoip readline autoconf multitail source-highlight autojump zsh-completions sshfs

    升級下系統自帶的vim

brew install ctags macvim --env-std --override-system-vim

    安裝經常使用的軟件:

brew cask install alfred appcleaner firefox google-chrome phpstorm sublime-text sequel-pro sketch mplayerx thunder qq

    MySQL PHP Nginx Redis Memcache Mongodb

        上面作了這麼多得準備工做,其實就是爲接下來的安裝作鋪墊。如今,Come on !

     安裝Mysql

brew install mysql

    設置mysql開機啓動:

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

    經過mysqladmin設置一個密碼

mysqladmin -uroot password "mypassword"

    若是在操做的時候出現了空密碼沒法登入的狀況,經過mysqld_safe來設置

sudo mysqld_safe --skip-grant-tables
mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('mypassword') WHERE User='root';
mysql> FLUSH PRIVILEGES;

    開啓mysql的安全機制:

/usr/local/opt/mysql/bin/mysql_secure_installation

    根據提示,輸入密碼以後,依次確認一些安全選項。具體的參數能夠參考國外友人的文章

$ ps aux | grep mysql  //查看mysql的運行狀況
$ mysql -uroot -p

    安裝 phpmyadamin

brew install phpmyadmin

    安裝PHP,因爲mac系統自帶了php。所以若是直接先安裝php,而後再安裝php的擴展的話,有可能會遇到二者的phpize的版本不一致的狀況,致使拓展不能正常初始化。So, 反其道而行之。首先安裝PHP的拓展,這樣,brew會自動的安裝上拓展所依賴的php程序。但這樣不能配置PHP的編譯的參數(能夠先正常走一遍)

    解決phpize 版本不一致的一般的作法,是先

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /usr/include

    或者:

cd php-5.5.14/ext/mcrypt
phpize –-clean  //清除phpize編譯的configu的緩存

    先查看php5都有哪些安裝選項  (先按正常流程走一遍)

brew options php55

    這裏,我用到了下面的這些配置參數:

brew install php55 \                
--without-snmp \
--without-apache \
--with-debug \
--with-fpm \
--with-intl \
--with-homebrew-curl \
--with-homebrew-libxslt \
--with-homebrew-openssl \
--with-imap \
--with-mysql \
--with-mysqli \
--with-tidy \
--with-gmp \
--with-imap \
--with-libmysql;

    選擇性的安裝一些所須要的拓展 (有些是我的興趣安裝的)

brew install php55-apcu\
 php55-gearman\
 php55-geoip\
 php55-gmagick\
 php55-imagick\
 php55-intl\
 php55-mcrypt\
 php55-memcache\
 php55-memcached\
 php55-mongo\
 php55-opcache\
 php55-pdo-pgsql\
 php55-phalcon\
 php55-redis\
 php55-sphinx\
 php55-swoole\
 php55-xdebug\
 php55-uuid;

    若是按正常順序執行完畢以後,出現phpize版本不一致的狀況,則所有卸載PHP包括插件,再按照上面說的反其道安裝一遍,就會解決。

    因爲Mac自帶了php和php-fpm,所以須要添加系統環境變量PATH來替代自帶PHP版本。

echo 'export PATH="$(brew --prefix php55)/bin:$PATH"' >> ~/.bash_profile      #for php
echo 'export PATH="$(brew --prefix php55)/bin:$PATH"' >> ~/.bash_profile      #for php-fpm
echo 'export PATH="/usr/local/bin:/usr/local/sbib:$PATH"' >> ~/.bash_profile  #for other brew install soft
source ~/.bash_profile

    測試一下安裝效果

#brew安裝的php 在/usr/local/opt/php55/bin/php
php -v
#Mac自帶的PHP
/usr/bin/php -v 
#brew安裝的php-fpm 他在/usr/local/opt/php55/sbin/php-fpm
php-fpm -v
#Mac自帶的php-fpm
/usr/sbin/php-fpm -v

    修改php-fpm配置文件

vim /usr/local/etc/php/5.5/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 -t
php-fpm -c /usr/local/etc/php/5.5/php.ini -y /usr/local/etc/php/5.5/php-fpm.conf -t
#啓動php-fpm
php-fpm -D
php-fpm -c /usr/local/etc/php/5.5/php.ini -y /usr/local/etc/php/5.5/php-fpm.conf -D

#關閉php-fpmkill -INT `cat /usr/local/var/run/php-fpm.pid`
#重啓php-fpmkill -USR2 `cat /usr/local/var/run/php-fpm.pid`
#還能夠用這個命令來啓動php-fpm
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

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

lsof -Pni4 | grep LISTEN | grep php

    PHP-FPM開機啓動:

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

     安裝nginx 

brew install nginx --with-http_geoip_module

    nginx 的關閉啓動:

#測試配置是否有語法錯誤
nginx -t
#打開 nginx
sudo nginx
#從新加載配置|重啓|中止|退出 nginx
nginx -s reload|reopen|stop|quit

#也可使用Mac的launchctl來啓動|中止
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

    nginx的開機啓動:

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

    Nginx監聽80端口須要root權限執行:

sudo chown root:wheel /usr/local/Cellar/nginx/1.8.0/bin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.8.0/bin/nginx

    配置nginx.config,  Nginx通常都會運行多個域名,這裏參考了ubuntu的結構

mkdir -p /usr/local/var/logs/nginx
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabled
mkdir -p /usr/local/etc/nginx/conf.d
mkdir -p /usr/local/etc/nginx/ssl
sudo mkdir -p /var/www
sudo chown :staff /var/www
sudo chmod775 /var/www

    編輯Nginx全局配置

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" $host $request_time $upstream_response_time $scheme '
    '$cookie_evalogin';
  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/*;
}

    這樣一來首先能夠把一些可複用配置獨立出來放在  /usr/local/etc/nginx/conf.d 下,好比fastcgi的設置就能夠獨立出來

vim /usr/local/etc/nginx/conf.d/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虛擬主機準備工做

vi /var/www/info.php
vi /var/www/index.html
vi /var/www/403.html
vi /var/www/404.html

     而後  /usr/local/etc/nginx/sites-enabled 目錄下能夠一個文件對應一個域名的配置              

vim /usr/local/etc/nginx/sites-enabled/default
server {
  listen	   80;
  server_name  localhost;
  root		 /var/www/;
  location / {
    index  index.html index.htm index.php;
    include	 /usr/local/etc/nginx/conf.d/php-fpm;
  }
  location = /info {
        allow127.0.0.1;
        deny    all;
        rewrite (.*) /.info.php;
   }

   error_page404     /404.html;
   error_page403     /403.html;
}

    此時啓動了php-fpm而且啓動了Nginx後,就能夠經過  http://localhost 來運行php程序了

    建立ssl默認虛擬主機default-ssl

vim /usr/local/etc/nginx/sites-available/default-ssl
server {
    listen 443;
    server_name  localhost;
    root       /var/www/;

    access_log  /usr/local/var/logs/nginx/default-ssl.access.log  main;

    sslon;
    ssl_certificate      ssl/localhost.crt;
    ssl_certificate_key  ssl/localhost.key;

    ssl_session_timeout5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_cipherson;

    location / {
        include   /usr/local/etc/nginx/conf.d/php-fpm;
    }

    location = /info {
        allow 127.0.0.1;
        deny    all;
        rewrite (.*) /.info.php;
    }

    error_page404     /404.html;
    error_page403     /403.html;
}

    建立phpmyadmin虛擬主機

vim /usr/local/etc/nginx/sites-available/phpmyadmin #輸入如下配置
server {
    listen 306;
    server_name  localhost;
    root    /usr/local/share/phpmyadmin;

    error_log   /usr/local/var/logs/nginx/phpmyadmin.error.log;
    access_log  /usr/local/var/logs/nginx/phpmyadmin.access.log main;

    sslon;
    ssl_certificate      ssl/phpmyadmin.crt;
    ssl_certificate_key  ssl/phpmyadmin.key;

    ssl_session_timeout5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_cipherson;

    location / {
        index  index.html index.htm index.php;
        include   /usr/local/etc/nginx/conf.d/php-fpm;
    }
}

    設置SSL

mkdir -p /usr/local/etc/nginx/ssl
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=State/L=Town/O=Office/CN=localhost" -keyout /usr/local/etc/nginx/ssl/localhost.key -out /usr/local/etc/nginx/ssl/localhost.crt
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=State/L=Town/O=Office/CN=phpmyadmin" -keyout /usr/local/etc/nginx/ssl/phpmyadmin.key -out /usr/local/etc/nginx/ssl/phpmyadmin.crt

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

ln -sfv /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enabled/default
ln -sfv /usr/local/etc/nginx/sites-available/default-ssl /usr/local/etc/nginx/sites-enabled/default-ssl
ln -sfv /usr/local/etc/nginx/sites-available/phpmyadmin /usr/local/etc/nginx/sites-enabled/phpmyadmin

    啓動|中止Nginx

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

    設置別名,最後能夠對全部服務的啓動中止設置別名方便操做

vim ~/.bash_profile
alias nginx.start='launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist'
alias nginx.stop='launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist'
alias nginx.restart='nginx.stop && nginx.start'

    歇一歇

相關文章
相關標籤/搜索