mac安装php+nginx+mysql环境
Table of Contents
安装iTerm2终端:iTerm2官网,后面的命令都用该终端来输入执行,当然你喜欢用别的其他的终端也可以。
安装macOS包管理软件:Mac安装Homebrew并更换国内镜像源。
安装php
使用brew安装php
brew install php
启动|停止|重启php
brew services start|stop|restart php
比如我要启动php,则运行以下命令(停止和重启同理):
brew services start php
查找php配置文件位置:
brew info php | grep -A 1 php.ini
安装php包管理工具composer
brew install composer
使用pecl安装扩展
pecl是php的扩展管理工具,新版php已经自带pecl(7.2/7.3都自带了,7.1我不确定),如果你的php没有pecl,可以使用这个方法安装:Mac Homebrew1.5以后安装php扩展的方法。
先查询有没有这个扩展
pecl search 扩展名
再安装扩展
pecl install 扩展名
安装mysql
使用brew安装mysql:
brew install mysql
启动|停止|重启mysql:
brew services start|stop|restart mysql
比如我要启动mysql,则运行以下命令(停止和重启同理):
brew services start mysql
注意启动时如果弹出提示问你是否允许mysql授受传入网络连接,点允许即可。
mysql配置文件在:
/usr/local/etc/my.cnf
安装nginx
使用brew安装nginx:
brew install nginx
或者如果你想安装openresty(支持lua扩展的nginx):
brew install openresty/brew/openresty
启动|停止|重启nginx(注意因为nginx要设置运行用户和组,需要使用sudo运行,否则显示启动成功实际上没启动,错误日志里会有报错):
sudo brew services start|stop|restart nginx
比如我要启动nginx,则运行以下命令(停止和重启同理):
sudo brew services start nginx
openresty也是一样(实际上启动的也是nginx):
sudo brew services start|stop|restart openresty
注意启动时如果弹出提示问你是否允许nginx授受传入网络连接,点允许即可。
nginx配置文件在:
/usr/local/etc/nginx/nginx.conf
如果是openresty,则配置文件在:
/usr/local/etc/openresty/nginx.conf
为什么openresty的配置文件也是nginx.conf
呢?因为说白了,openresty也是nginx,只不过支持使用lua(一种编程语言)扩展而已。
启动nginx后访问http://localhost:8080
,如果看到下图所示的页面,表示运行正常:
以上方式启动后php、mysql、nginx后,如果你重启电脑,它们会自动启动,所以你关机再开机,或者你重启电脑,不需要自己去启动了,一般都会自动启动除非出问题了。
检查php、mysql、nginx是否已启动(这里以php为例,其他同理):
ps aux | grep php
如下图所示:
修改php/nginx的运行用户和组
为防止出现权限问题,请把php-fpm和nginx的启动用户指定为你系统用户名和组。
修改php-fpm运行用户和组
注意php7.2是版本,你要查看你当前是什么版本,不一定是我这个7.2.
vim /usr/local/etc/php/7.2/php-fpm.d/www.conf
找到以下配置(大概在22-23行):
user = _www
group = _www
把它们改成:
user = 你的用户名
group = staff
注意,你的用户名可以执行whoami
命令获取,比如我的就是:
最后重启php:
brew services restart php
修改nginx运行用户和组
打开nginx配置文件
vim /usr/local/etc/nginx/nginx.conf
在它的第一行应该有一个#user nobody;
,把它改成:user 你的用户名 staff;
,那你的用户名是什么呢?运行whoami
即可获取。
重载nginx配置,先用-t
测试配置文件是否正确,如果正确会有ok/successful这样的字样:
sudo nginx -t
然后重载nginx配置(如果不输出任何信息,表示重载成功):
sudo nginx -s reload
注意,以后凡是修改了nginx配置文件,都使用这种方法重载配置。
设置nginx默认配置
默认配置会开启显示目录,这样你少量的测试代码都可以放在这里运行,但如果是一个项目,最后单独设置一个配置文件(其实基本上跟以下配置类似,具体网上查询怎么设置)。
首先你要确定一个目录作为你项目代码的存放目录,我自己是在用户目录下创建一个叫www的目录:
mkdir ~/www
然后进入到nginx配置文件目录:
cd /usr/local/etc/nginx/servers/
用vim创建一个默认配置文件:
vim default
输入以下配置:
#设置一个vhost,属于ngx_http_core_module
server {
#设置监听端口为80端口
listen 80 default_server;
#server_name定义一个虚拟主机名称,当http请求到达nginx监听的80端口时,nginx从http请求的header中的host字段获取到host值,并与server_name等于该host值的server匹配
server_name localhost;
#charset属于ngx_http_charset_module
charset utf-8;
#设置访问日志和错误日志路径,属于ngx_http_log_module模
access_log /usr/local/var/log/nginx/localhost.access.log;
error_log /usr/local/var/log/nginx/localhost.error.log;
#root指令属于ngx_http_core_module模块,与server、location同级,只是它可以写在server和location里面,当然它也可以写在http下面
root /Users/bruce/www;
#启用目录列表输出(off为禁用,默认为off),属于ngx_http_autoindex_module
autoindex on;
#是否显示精确文件大小(单位为Byte),默认为on,如果你要自动按大小四舍五入显示kb/mb/gb,则要设置为off
autoindex_exact_size off;
#显示格式,默认为html,另外还可以为xml/json/jsonp
autoindex_format html;
#是否显示当地时间(不设置默认off,off则显示UTC时间)
autoindex_localtime on;
#根据匹配的URI来指定具体配置,注意该命令属于ngx_http_core_module模块,虽然它写在server里面,但并不隶属于server,它与server命令是同级的
location / {
#index指令,属于ngx_http_index_module模块
#index index.php index.html index.htm;
#gzip,属于ngx_http_gzip_module
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
}
location ~ \.php$ {
#fastcgi_pass属于ngx_http_fastcgi_module
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
#include属于core functionality(核心功能),并不属于某个模块
include fastcgi.conf;
}
}
注意保证以下几个配置的路径存在,其中root指定的目录为你的代码目录(不要照抄我的):
access_log /usr/local/var/log/nginx/localhost.access.log;
error_log /usr/local/var/log/nginx/localhost.error.log;
root /Users/Bruce/www;
保存,然后重载nginx配置,然后在你的代码目录创建一个index.php文件,放输入代码:
<?php
phpinfo();
打开浏览器,访问http://localhost
,如果能看到php的配置,说明已经配置成功。