mac下安装nginx和php


Posted in PHP onNovember 04, 2013

一、前话:
1.1、环境选择:
重新在mac上配置php,原本mac上就自带有apach、php以及pgsql,如果图简单的话,直接用就可以了,不过在安装前我仔细思考了一下几个问题:
选apache还是nginx:两个我了解的都比较少,相对而言我接触nginx比较多,服务器用的也是nginx,没办法谁叫nginx负载高呢。为了更好的接触nginx的环境,我决定还是统一下环境,方便今后使用,这是这次的主要关键;
安装php:Mac os自带了php,好像是5.3.8,版本比较落后,不过这不碍事,因为以前我都是通过php-osx by Liip来管理php,所以不担心版本问题。不过php-osx by Liip好像没有fmp相关的配置,这样我我要和nginx一起用的话就相对比较麻烦了,那我只能选择其他方案了
安装mysql:这个就没有什么好疑问的了,目前我肯定不会去用pgsql,毕竟没接触过,需要有学习成本的,所以我在这篇纪录中把关于pgsql的部分都去掉了
1.2、那该如何安装:
既然我否定了系统自带的环境,那么就要通过别的方式去安装了,比如说手动编译。如果是手动编译的话,那么就会遇到下面几个问题:
编译费事,php依赖那么多程序,一个个安装,太累!
如果以后更新怎么办?灾难!!
不过好在mac下有自己的第三方管理程序:homebrew,而且相对而言我觉得他可能在某些方面更优越于linux下的apt-get、yum。如果通过homebrew来安装、管理运行环境的话,至少可以解决我几个问题:
安装问题,我不用繁琐的去安装依赖程序
升级问题,只需要brew update一次升级所有程序
版本问题,homebrew版本更新比较及时,而apt-get、yum来说,今年用的基本是几年前的稳定版本了
OK,下面的安装都是基于 homebrew,如果不熟悉或者还没安装有 homebrew 的话,可以查看这篇关于:Mac开发者利器-Homebrew介绍及安装。
二、安装nginx
2.1、安装:
用 brew 一键安装 nignx:
1
brew install nginx
如果需要安装其他 nginx 的版本,可以 “brew edit nginx” 打开修改 nginx 的安装信息包 formula,默认会用 vi 打开,在文件开头处修改 nginx 相应版本的下载地址就行。
2.2、配置
brew 执行完后,nginx 就安装好了。可以用以下指令对 nginx 进行操作:

#打开 nginx
sudo nginx
 

#重新加载|重启|停止|退出 nginx
nginx -s reload|reopen|stop|quit
打开 nginx 后,默认的访问端口 8080,如果要改为常用的 80 端口,则要修改 “/usr/local/etc/nginx/nginx.conf” 下监听(listen)端口值。
默认的文件访问目录(root)是 “/usr/local/Cellar/nginx/1.4.2/html”(这里的1.4.2是安装的nginx的版本,文件夹名以安装的nginx版本为准)。
2.3、把 nginx 设置为开机启动运行:
mkdir -p ~/Library/LaunchAgents/cp /usr/local/Cellar/nginx/1.4.2/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

不过试了一下,不是超级用户登陆,而是普通用户登陆,并且监听的端口在1024以下的(例如把默认的8080端口改为了80端口),nginx 开机是启动不了。因此,要 nginx 开机启动的话,需要给予它管理员权限:
2
sudo chown root:wheel /usr/local/Cellar/nginx/1.4.2/bin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.4.2/bin/nginx

三、安装mysql
3.1、安装:
brew install mysql

homebrew安装的版本同样是当前最新的稳定版,安装的过程比较简单,不过初始化就相对麻烦很多了,这里我失败了很多次。
3.2、配置:
3.2.1、初始化
初始安装 mysql 的一些配置数据库(例如:information_schema、mysql)
sudo mysql_install_db \
--verbose --user=`whoami` \
--basedir="$(brew --prefix mysql)" \
--datadir=/usr/local/var/mysql \
--tmpdir=/tmp \
--explicit_defaults_for_timestamp

这里我遇到了两个问题,过程都没纪录,这里简单提下解决方案:
系统建议我添加“?explicit_defaults_for_timestamp”;
安装过程中会遇到几个error,说是db的几个文件不存在;
网上搜索了下,大多是建议将/usr/local/var/mysql这个目录修改下权限;
我操作后发现可能不是这样的,造成这个问题在于我在之前操作遇到了错误中止了,生成了一个不完整var目录,所以每次安装失败我就删除以下文件,重新初始化就好了
sudo rm /usr/local/opt/mysql/my.cnf
sudo rm -R /usr/local/var/mysql/

待安装完毕后,会出现一大段mysql相关信息,运行下面的命令启动mysql
/usr/local/opt/mysql/bin/mysqld_safe &

执行完后,就可以在终端里运行 “mysql”,直接进入mysql数据库里。对,不用输入密码,可以直接连接,初始默认是可以匿名访问的。
3.2.2、修改密码
超级用户 “root” 也是没设密码,要设密码的话可以执行下面指令
/usr/local/opt/mysql/bin/mysqladmin -u root password 'new-password'

现在访问 mysql 还是不用密码就可以连接,如果要设置一些登陆密码的安全访问限制,则需执行下面的 mysql安全安装指令
/usr/local/opt/mysql/bin/mysql_secure_installation

主要是设置修改root密码(设置过了可以不用设置,略过)、删除匿名访问、删除root网络访问、删除test数据库。指令执行完后,登陆mysql就需要密码验证了
mysql -u root -p

3.3、开机启动mysql
mkdir -p ~/Library/LaunchAgents/cp /usr/local/Cellar/mysql/5.6.13/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

至此,mysql安装完毕。
四、安装php、php-fpm…
4.1、安装
Mac是预装了php,不过很多扩展都没安装,目测最多只能在终端里执行下php指令,所以我选择重新安装php。由于 brew 默认是没有 php 安装,所以要使用 “brew tap” 来安装 brew 的第三方程序包,这里使用 josegonzalez 的php安装包,具体操作如下:
brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php

执行完后,就可以用 brew 安装php了。这里php有几个版本可以安装,具体可以执行 “brew search php” 查看一下有什么php版本可以安装,一般会有“php52、php53、php54、php55”版本,我安装的是最新的php5.5版本。由于PHP5.5版本已经内嵌了 FPM(FastCGI Process Manager),在安装选项里标明就行,本人 php 的安装配置指令如下:
sudo brew install php55 \
--with-debug \
--with-fpm \
--with-gmp \
--with-homebrew-openssl \
--with-imap --with-intl \
--with-libmysql \
--without-bz2 \
--without-mysql \
--without-pcntl \
--without-pear

更多的安装选项可以通过 “brew options php55″ 查看。
提示:?with-cgi不能和?with-fpm一起安装,互相冲突
指令执行完后,php 跟 php-fpm 就安装好了。
4.2、配置
由于是重装php,之前系统预装的php还没卸载,因此在终端调用php时,还是以之前系统的php版本做解析,所以这里需要修改path,指定 php 的解析路径。在~/.bashrc(没有则创建)最后加入一行:
export PATH="$(brew --prefix php54)/bin:$PATH"
[html]
[code]
source ./.profile

不存在这个文件的朋友请参照这片文章进行配置:Mac系统终端命令行不执行命令 总出现command not found解决方法
OK,php-fpm安装完成。
要修改配置 php 或者 php-fpm 的话,可以修改 “/usr/local/etc/php/5.5/php.ini” 、 “/usr/local/etc/php/5.5/php-fpm.conf”。
详细配置方法可以参照相关资料:
php-fpm 启动参数及重要配置详解
Linux平滑编译升级php至5.5.0
启动 php-fpm 的话就直接在终端里执行 “php-fpm”,默认打开 php-fpm 会显示一个状态 shell 出来,也可以把 php-fpm 的配置文件里的 “daemonize = no” 改为 “daemonize = yes”,就会以后台守护进程的方式启动,对于刚修改的配置文件,可以执行 “php-fpm -t” 来检测配置有没有问题。
4.3、开机启动
开机启动 php-fpm(下面的 5.5.3 是当前安装 php 的具体版本号):
mkdir -p ~/Library/LaunchAgents/cp /usr/local/Cellar/php54/5.5.3/homebrew-php.josegonzalez.php55.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php55.plist

为了方便,写了个启动、关闭、重启 php-fpm 的 shell 脚本:
#!/bin/shparam=$1
start()
{
    fpms=`ps aux | grep -i "php-fpm" | grep -v grep | awk '{print $2}'`
    if [ ! -n "$fpms" ]; then
        php-fpm
        echo "PHP-FPM Start"
    else
        echo "PHP-FPM Already Start"
    fi
}
stop()
{
    fpms=`ps aux | grep -i "php-fpm" | grep -v grep | awk '{print $2}'`
    echo $fpms | xargs kill -9
    for pid in $fpms; do
        if echo $pid | egrep -q '^[0-9]+$'; then
            echo "PHP-FPM Pid $pid Kill"
        else
            echo "$pid IS Not A PHP-FPM Pid"
        fi
    done
}
case $param in
    'start')
        start;;
    'stop')
        stop;;
    'restart')
        stop
        start;;
    *)
        echo "Usage: ./phpfpm.sh start|stop|restart";;
esac

五、设置 nginx 的 php-fpm 配置
在server块中添加解析文件类型“index index.html index.htm index.php;”
server {
        listen       80;
        server_name  localhost;
        index index.html index.htm index.php;
        ......
}

打开 nginx 默认注释掉的php location设置,修改如下(具体配置参数,例如路径,这里以我本地安装为准):
location ~ .*\.(php|php5)?$ {
        #fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  /Library/WebServer/public_html$fastcgi_script_name;
        include /usr/local/etc/nginx/fastcgi_params;
        #include fcgi.conf;
}

修改目录用户、用户组:
sudo chown www:www /Library/WebServer/public_html

OK,这样就可以在访问目录下(默认是/Library/WebServer/public_html)执行 php 文件了。嗯,赶快输出一下 “phpinfo()” 吧~
<?php
phpinfo();
PHP 相关文章推荐
php正则校验用户名介绍
Jul 19 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
第四章 php数学运算
Dec 30 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
php双向队列实例讲解
Nov 17 PHP
php使用curl模拟登录后采集页面的例子
Nov 04 #PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 #PHP
php网站判断用户是否是手机访问的方法
Nov 01 #PHP
php合并js请求的例子
Nov 01 #PHP
php上传文件中文文件名乱码的解决方法
Nov 01 #PHP
PHP防止跨域提交表单
Nov 01 #PHP
PHP查询网站的PR值
Oct 30 #PHP
You might like
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
urllib2自定义opener详解
2014/02/07 Python
Python2.x与Python3.x的区别
2016/01/14 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
python之django母板页面的使用
2018/07/03 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
写给爸爸的道歉信
2014/01/15 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
力学专业求职信
2014/07/23 职场文书
六年级学生评语大全
2014/12/26 职场文书
2015年采购部工作总结
2015/04/23 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS