在自己的地盘上做个记录,不然每次遇到问题又要花时间去百度……

首先,mac 上需要有 Homebrew 工具(官方网址https://brew.sh),如果还没有安装的话可以上官网,复制命令在终端里运行即可。

这里Homebrew的官方源可能会比较慢,建议切换成国内镜像

中科大镜像源

https://mirrors.ustc.edu.cn/brew.git

https://mirrors.ustc.edu.cn/homebrew-core.git

https://mirrors.ustc.edu.cn/homebrew-cask.git

清华大学镜像源

https://mirrors.ustc.edu.cn/brew.git

https://mirrors.ustc.edu.cn/homebrew-core.git

https://mirrors.ustc.edu.cn/homebrew-cask.git

具体使用哪个镜像地址,我们可以使用 ping 命令测一下响应时间来决定,替换镜像源可以用如下命令

cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

Homebrew 基本指令

// 查看配置
$brew config 

// 安装:
$brew install 软件名
eg: brew install wget

// 卸载:
$brew uninstall 软件名
eg: brew uninstall wget

// 查询:
$brew search 软件名

// 更新 Homebrew,注意官方仓库可能会比较耗时
$brew update

安装软件

首先,安装 Nginx。在终端直接输入如下命令,等待命令执行结束就可以了(一般不太会出问题)

// 安装Nginx
$brew install nginx

安装命令执行结束后,通过查看版本信息查看是否安装成功。

// 安装成功后,可查看当前的安装版本
$nginx -v
nginx version: nginx/1.21.6

安装成功之后,我们打开浏览器,在地址栏输入 http://localhost,浏览器应该显示类似如下内容的页面

如果未正常显示,检查Nginx是否正常启动

// 启动 nginx 服务
$brew services start nginx

// 停止nginx服务
$brew services stop nginx

// 重启nginx服务
$brew services restart nginx

接下来,安装PHP。如果我们需要安装不同版本的PHP,使用如下命令搜索需要安装的版本,再进行安装

$brew search php

上图是搜索出来的php相关软件包,我们如果要安装7.2版本,则可以使用命令

$brew install php@7.2

或者我们希望直接安装最新版本

// 安装PHP,直接使用下方命令会自动安装最新版本
$brew install php

和安装Nginx一样,等待命令执行结束,我们通过查看版本信息,验证是否按照成功

$php -v
PHP 8.1.5 (cli) (built: Apr 16 2022 00:14:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.5, Copyright (c), by Zend Technologies

接下来,我们要为Nginx配置PHP服务。

PHP 的配置文件一般在PHP的安装目录中,我们这里使用Homebrew安装,配置文件在 /usr/local/etc/php 目录中

第一步,先配置PHP,有几个配置文件 php.ini、php-fpm.conf、www.conf 三个文件需要配置

php.ini 中,建议修改时区,其他视情况修改

# 设置时区
date.timezone = PRC

在配置 php-fpm.conf 和 www.conf 之前,我们先要知道Nginx与PHP的两种通信方式:unix socket和tcp socket。

两者相比较 unix socket 在大多数时候效率会更高一些,因为在同一台服务器中,减少了不必要的tcp开销。但是,unix socket 在高并发场景下并不稳定,当连接数暴增时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错并且不返回异常。

php-fpm.conf 中建议修改:

1、修改daemonize=yes 或者 直接注释这一行,在行首添加英文符号(;)

2、如果是使用unix socket通信的,需要修改去掉 pid = run/php-fpm.pid 这一行的注释(这里路径是相对 /usr/local/var 的路径,也可设置绝对路径)

[global]
; Pid file
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid


; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
daemonize = yes

如果我们选择 unix socket 通信,www.conf 文件需要修改,否则该文件可以不做修改

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
;listen = /usr/local/var/run/php-fpm.pid

上面几个主要的PHP配置修改完成之后,我们修改Nginx配置。Nginx的配置文件一般在 /etc/nginx 目录中,我们这是在 /usr/local/etc/nginx 目录中

其中 nginx.conf 是全局配置,如果我们要配置多个站点 可以在 servers 目录里进行单独配置(当然,也可以把全部配置写到 nginx.conf 文件中,只是那样管理起来会比较麻烦)

在 server { } 节点中新增如下内容,为PHP文件添加解析

location ~ \.php$ {
    # 第一种 tcp socket
    fastcgi_pass    127.0.0.1:9000; 
    # 第二种 unix socket
    #fastcgi_pass    unix:/usr/local/var/run/php-fpm.socket;
    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include         fastcgi_params;
}

完成以上配置之后,我们重启Nginx和PHP服务

$brew services restart nginx
==> Successfully restarted `nginx` (label: homebrew.mxcl.nginx)

$brew services restart php
==> Successfully restarted `php` (label: homebrew.mxcl.php)

找到 Nginx 主目录,在里面添加一个php文件,例如:test.php

<?php phpinfo();

打开浏览器,输入http://localhost/test.php,如果一切配置正常,将打开如下页面

至此,Mac中的Nginx+PHP环境算是搭建完成了。

最后一步,Redis扩展的安装。

我们通过php官方的 pecl 安装 redis扩展

// 先查询是否有 redis 扩展
$pecl search redis

// 安装 igbinary 依赖
$sudo pecl install igbinary

// 安装redis扩展
$sudo pecl install redis

pecl 方式经常安装失败,可能需要多试几次……