全新Mac配置PHP开发环境教程
用了一年的mac os x了,之前不熟悉这个系统,用的是系统自带的php以及dmg包安装的mysql,时间长了,慢慢觉得macbook的速度跟不上了,虽然关机次数不多,但是每次开机,或者唤醒电脑的时候,系统明显有一定时间的卡顿。特别表现在开机的时候。完全可以去泡一个来一桶了。因此干掉md101上的光驱,换上256g的sandisk ssd, 干掉原厂的2g 2,换上8g 2 。 速度应该是杠杠的了,至少可以再服役2年吧。
趁着这次加硬盘的机会,就准备彻底重做开发环境。现在对mac也有了一定的了解,特地记录一下本次的开发环境安装详情,给自己一个备忘,希望也可以帮助到刚接触mac
环境的同学们。本开发环境,全部基于homebrew安装。
主要软件版本:php5.5.14,nginx 1.6.0,mysql5.6.19
os x mavericks
重新安装系统,在苹果商店下载好os x mavericks安装文件,然后准备一支16g的usb3.0 u盘。制作 osx mavericks全新安装启动u盘。
插上u盘,在终端执行:
sudo /applications/install\ os\ x\
mavericks.app/contents/resources/createinstallmedia --volume /volumes/untitled
--applicationpath /applications/install\ os\ x\ mavericks.app --nointeraction
untitled 是你的u盘盘符,根据实际情况来。
erasing disk: 0%… 10%… 20%… 30%…100%…
>copying installer files to disk…
copy complete.
making disk bootable…
copying boot files…
>copy complete.
>done.
看到上面的信息说明启动盘制作成功。 安装起来so easy :)
安装完成系统之后, 暂时还没有去迁移文件,由于本人喜好摄影,有大量raw格式的原图在aperture
的照片库中,尼康d800一张raw文件有40m左右,到时候迁移照片库和照片流希望不要掉坑里了。 等开发环境搞定再说了,更新os x系统到10.9.4
,然后安装最新的xcode, 以及在商店买过的软件。确定系统无问题了,进入下一步...
brew
brew 是 mac 下面的包管理工具,通过 github 托管适合 mac 的编译配置以及 patch,可以方便的安装开发工具。 mac 自带ruby
所以安装起来很方便,同时它也会自动把git也给你装上。官方网站: <http://brew.sh>; 。
安装完成之后,建议执行一下自检,brew doctor如果看到
your system is ready tobrew.那么你的brew已经可以开始使用了。
安装:
ruby -e "$(curl -fssl https://raw.github.com/mxcl/homebrew/go/install)"
自检:
brew doctor
常用命令: (所有软件以php5.5为例子)
brew update #更新brew可安装包,建议每次执行一下
brew search php55 #搜索php5.5
brew tap josegonzalez/php #安装扩展<gihhub_user/repo>
brew tap #查看安装的扩展列表
brew install php55 #安装php5.5
brew remove php55 #卸载php5.5
brew upgrade php55 #升级php5.5
brew options php55 #查看php5.5安装选项
brew info php55 #查看php5.5相关信息
brew home php55 #访问php5.5官方网站
brew services list #查看系统通过 brew 安装的服务
brew services cleanup #清除已卸载无用的启动配置文件
brew services restart php55 #重启php-fpm
注意:brew services 相关命令最好别经常用了,提示会被移除
~ brew services restart php55
warning: brew services is unsupported and will be removed soon.
you should use launchctl instead.
please feel free volunteer to support it in a tap.
stopping `php55`... (might take a while)
==> successfully stopped `php55` (label: homebrew.mxcl.php55)
==> successfully started `php55` (label: homebrew.mxcl.php55)
oh my zsh
ohmyzsh & iterm2两个神器,在mac os x下是一定要装的. 两组配合起来使用,加上插件。简直是神一样的存在。 秒杀梅西,内马尔啊:)
oh 猛戳到官网
安装 oh my zsh
curl -l http://install.ohmyz.sh | sh
设置默认shell
查看系统支持的shell列表,mac 10.9.4 自带了 zsh 5.0.2,linux上得安装。
cat /etc/shells # list of acceptable shells for chpass(1). # ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh zsh --version zsh 5.0.2 (x86_64-apple-darwin13.0) chsh -s /bin/zsh
虽然mac自带了zsh,如果你想要最新版的zsh,那么你用 brew install zsh安装一个最新的吧。
/usr/local/bin/zsh --version zsh 5.0.5 (x86_64-apple-darwin13.3.0) 区别也不会很大, 默认的版本已经很新了。
homebrew-cask
安装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 #查看 phpstorm 的信息
brew cask uninstall qq #卸载 qq
这里谈谈cask对比mac app store的优势:
对常用软件支持更全面(特别是开发者),cask里面会给你一些惊喜;
软件更新速度快,一般都是最新版本 store上很久很久才会更新版本;
命令安装感觉比打开store方便,另外store在国内的速度也是xxoo。
iterm2
安装iterm2:
brew cask install iterm2
上面提过的神器组合,更多使用方法请参考[iterm2官方文档](
n), 这里就不详细说明了。
安装开发常用的包&软件
安装开发包
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
alfred 是个很不错的东西,推荐必须安装。它默认搜索目录不包含brew cask安装的软件,因此手动将`/opt/homebrew-
cask`添加到alfred的搜索目录
mysql php nginx redis memcache
前面做了这么多的准备工作,其实 zsh iterm2 brew 等等这些由于篇幅以及能力有限,一时半会也讲不完,更多选择,更多欢乐,就在google
search,现在才入正题。come on :)
安装mysql
brew install mysql
mysql开机启动:
ln -sfv /usr/local/opt/mysql/*.plist ~/library/launchagents launchctl load ~/library/launchagents/homebrew.mxcl.mysql.plist
安装完成之后开启mysql安全机制:
/usr/local/opt/mysql/bin/mysql_secure_installation
根据终端提示,输入root密码,然后依次确认一些安全选项。具体信息可以参考
查看一下mysql运行情况
~ ps aux | grep mysql calvin 1695 0.0 0.5 2719864 90908 ?? s 1:38上午 0:00.31 /usr/local/cellar/mysql/5.6.19/bin/mysqld --basedir=/usr/local/cellar/mysql/5.6.19 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/cellar/mysql/5.6.19/lib/plugin --bind-address=127.0.0.1 --log-error=/usr/local/var/mysql/calvinsmacbook-pro.local.err --pid-file=/usr/local/var/mysql/calvinsmacbook-pro.local.pid --socket=/tmp/mysql.sock --port=3306 calvin 1323 0.0 0.0 2444628 1020 ?? s 1:38上午 0:00.04 /bin/sh /usr/local/opt/mysql/bin/mysqld_safe --bind-address=127.0.0.1 --datadir=/usr/local/var/mysql #测试连接mysql mysql -uroot -p welcome to the mysql monitor. commands end with ; or \g. your mysql connection id is 23 server version: 5.6.19-log homebrew copyright (c) 2000, 2014, oracle and/or its affiliates. all rights reserved. oracle is a registered trademark of oracle corporation and/or its affiliates. other names may be trademarks of their respective owners. type 'help;' or '\h' for help. type '\c' to clear the current input statement. mysql>
安装phpmyadmin
brew install phpmyadmin
安装php
添加brew的php扩展库:
brew update brew tap homebrew/dupes brew tap josegonzalez/homebrew-php
可以使用brew options php55命令来查看安装php5.5的选项,这里我用下面的选项安装:
brew install php55 --with-fpm --with-gmp --with-imap --with-tidy --with-debug --with-mysql --with-libmysql
php编译过程中如果遇到configure: error: cannot find openssl's <evp.h>错误,执行xcode-select --install 重新安装一下xcode command line tools 在githubhomebrew上有关于这个讨论:
_for future reference of anybody looking for command line tools with xcode 5,
open up a terminal window and type xcode-select --install. a window will
appear informing you command line tools are required. click install and you
should be good to go_
等待php编译完成,开始安装php常用扩展,扩展安装过程中brew会自动安装依赖包,例如php55-pdo-pgsql
会自动装上postgresql,这里我安装以下php扩展:
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-uuid\ php55-xdebug;
扩展里面提一下 和.一个是c语言写的php框架,安装来个人摸索熟悉一下,还没有真正的使用过,大致看了一下文档,感觉非常吊炸天。目前公司的项目是基于yii2的,也看看这个框架。
另外一个swoole是国产的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)/sbin:$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
php 5.5.14 (cli) (built: jul 16 2014 15:43:06) (debug)
copyright (c) 1997-2014 the php group
zend engine v2.5.0, copyright (c) 1998-2014 zend technologies
with zend opcache v7.0.3, copyright (c) 1999-2014, by zend technologies
with xdebug v2.2.5, copyright (c) 2002-2014, by derick rethans
#mac自带的php
/usr/bin/php -v
php 5.4.24 (cli) (built: jan 19 2014 21:32:15)
copyright (c) 1997-2013 the php group
zend engine v2.4.0, copyright (c) 1998-2013 zend technologies
#brew安装的php-fpm 他在/usr/local/opt/php55/sbin/php-fpm
php-fpm -v
php 5.5.14 (fpm-fcgi) (built: jul 16 2014 15:43:12) (debug)
copyright (c) 1997-2014 the php group
zend engine v2.5.0, copyright (c) 1998-2014 zend technologies
with zend opcache v7.0.3, copyright (c) 1999-2014, by zend technologies
with xdebug v2.2.5, copyright (c) 2002-2014, by derick rethans
#mac自带的php-fpm
/usr/sbin/php-fpm -v
php 5.4.24 (fpm-fcgi) (built: jan 19 2014 21:32:57)
copyright (c) 1997-2013 the php group
zend engine v2.4.0, copyright (c) 1998-2013 zend technologies
修改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-fpm
kill -int `cat /usr/local/var/run/php-fpm.pid`
#重启php-fpm
kill -usr2 `cat /usr/local/var/run/php-fpm.pid`
#也可以用上文提到的brew命令来重启php-fpm,不过他官方不推荐用这个命令了
brew services restart php55
#还可以用这个命令来启动php-fpm
launchctl load -w ~/library/launchagents/homebrew.mxcl.php55.plist
启动php-fpm之后,确保它正常运行监听9000端口:
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开机启动:
ln -sfv /usr/local/opt/php55/*.plist ~/library/launchagents launchctl load ~/library/launchagents/homebrew.mxcl.php55.plist
安装php composer
brew install composer
#检查一下情况
composer --version
composer version 1.0.0-alpha8 2014-01-06 18:39:59
redis memcached这些软件brew 已经自动依赖安装上,如果想开机自动启动,或者查看使用说明 brew info redis即可。另外,composer的中文文档:猛戳这里
安装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.6.0_1/bin/nginx
sudo chmod u+s /usr/local/cellar/nginx/1.6.0_1/bin/nginx
配置nginx.conf
创建需要用到的目录:
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 chmod 775 /var/www
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配置文件
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 下面
vi /var/www/info.php vi /var/www/index.html vi /var/www/403.html vi /var/www/404.html
创建默认虚拟主机default
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;
}
创建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; ssl on;
ssl_certificate ssl/localhost.crt;
ssl_certificate_key ssl/localhost.key;
ssl_session_timeout 5m;
ssl_protocols sslv2 sslv3 tlsv1;
ssl_ciphers high:!anull:!md5;
ssl_prefer_server_ciphers on;
location / {
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;
}
创建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; ssl on;
ssl_certificate ssl/phpmyadmin.crt;
ssl_certificate_key ssl/phpmyadmin.key;
ssl_session_timeout 5m;
ssl_protocols sslv2 sslv3 tlsv1;
ssl_ciphers high:!anull:!md5;
ssl_prefer_server_ciphers on;
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
接下来你可以通过下面这些连接访问:
<http://localhost/> -> index.html
<http://localhost/info> -> info.php via phpinfo();
<http://localhost/404> -> 404.html
<https://localhost/> -> index.html(ssl)
<https://localhost/info> -> info.php via phpinfo();(ssl)
<https://localhost/404> -> 404.html(ssl)
<https://localhost:306> -> phpmyadmin(ssl)
设置快捷服务控制命令
为了后面管理方便,将命令 alias 下,vim ~/.bash_aliases 输入一下内容:
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' alias php-fpm.start="launchctl load -w ~/library/launchagents/homebrew.mxcl.php55.plist" alias php-fpm.stop="launchctl unload -w ~/library/launchagents/homebrew.mxcl.php55.plist" alias php-fpm.restart='php-fpm.stop && php-fpm.start' alias mysql.start="launchctl load -w ~/library/launchagents/homebrew.mxcl.mysql.plist" alias mysql.stop="launchctl unload -w ~/library/launchagents/homebrew.mxcl.mysql.plist" alias mysql.restart='mysql.stop && mysql.start' alias redis.start="launchctl load -w ~/library/launchagents/homebrew.mxcl.redis.plist" alias redis.stop="launchctl unload -w ~/library/launchagents/homebrew.mxcl.redis.plist" alias redis.restart='redis.stop && redis.start' alias memcached.start="launchctl load -w ~/library/launchagents/homebrew.mxcl.memcached.plist" alias memcached.stop="launchctl unload -w ~/library/launchagents/homebrew.mxcl.memcached.plist" alias memcached.restart='memcached.stop && memcached.start'
让快捷命令生效
echo "[[ -f ~/.bash_aliases ]] && . ~/.bash_aliases" >> ~/.bash_profile source ~/.bash_profile #创建站点目录到主目录,方便快捷访问 ln -sfv /var/www ~/htdocs
有时间会进一步整理一下,感觉有点乱,第一次在segmentfault上码字,写到一半的时候不小心滑一下触摸板,浏览器后退了,虽然有提示不要离开,点击了不离开之后,safari白屏。 然后还特地去吐了个槽,害我白白又浪费很久来写这个博客。希望能帮助到刚刚接触mac的同学。enjoy mac‘s development evn :)
参考资料:install nginx, php-fpm, mysql and phpmyadmin on os x mavericks using homebrew
本文由fish创作
上一篇: PHP快速生成各种信息提示框的方法