本開發環境,所有基於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 是 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
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
對比與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
上面作了這麼多得準備工做,其實就是爲接下來的安裝作鋪墊。如今,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'
歇一歇