macOS系统配置Nginx PHP及MySQL

作为一个PHP开发者以及一个macOS系统爱好者,在macOS系统上配置Nginx+PHP+MySQL开发环境是一件很容易也藏有暗坑的事,前几天说的,将黑苹果升级到了macOS 10.14 Mojave,于是又花了点时间重新配置了下本地的开发环境,期间踩了几个坑,这里记录一下。

首先,macOS系统是macOS 10.14 Mojave,包管理器肯定是用的homebrew,安装过需要下载相应的包及依赖,最好是挂个http_proxy及https_proxy,这样安装会快点。比如说:

export http_proxy="http://127.0.0.1:8001"; export HTTP_PROXY="http://127.0.0.1:8001"; export https_proxy="http://127.0.0.1:8001"; export HTTPS_PROXY="http://127.0.0.1:8001"

macOS安装Nginx PHP MySQL

先把最主要的安装命令放出来:

brew install nginx mysql@5.5 php@7.1

安装很简单,只需要这一行命令就行,但是我安装过程中却在里面踩了几个坑。比如说,网上很多文章都还是按照homebrew之前的组织方式安装软件包,但是不知道从那个版本开始,homebrew安装一些软件指定版本号的方式就不一样了,比如说上面的PHP,安装PHP 7.1,需要在后面添加一个@符号然后后面跟上版本号,安装MySQL 5.5就是 mysql@5.5,Python 3就是python@3,这一点通过search命令就能看出,比如说:

zocoMac:www zoco$ brew search php
==> Formulae
brew-php-switcher      php                    php-code-sniffer       php-cs-fixer           php@5.6                php@7.0                php@7.1 ✔              phplint                phpmyadmin             phpunit

==> Casks
homebrew/cask/eclipse-php                                                                                              homebrew/cask/netbeans-php

就能看出,可以安装5.6、7.0及7.1版本。

因为我们的开发框架选的是Laravel 5.5 LTS,经过我们的测试,PHP 7.1是最合适的版本,MySQL选择的是5.5,因为之前在MySQL 5.6及5.7上遇到几个坑,追求稳定,本地我装的也是MySQL 5.5,有更高版本需求的朋友,可以直接安装对应的版本。

上面说的是安装,下面说说一些需要修改的配置。

macOS配置Nginx PHP MySQL

其实相比以前,现在用homebrew安装的Nginx PHP MySQL配置起来已经很简单了,要改的地方其实并不多,熟悉Linux的,修改起来会很快。

首先要说的是,通过homebrew安装的几个包,配置文件目录都是在如下目录:

/usr/local/etc/

相应的,Nginx的配置文件目录就是/usr/local/etc/nginx,PHP的配置文件目录就是/usr/local/etc/php,至于MySQL的配置文件就更简单了,/usr/local/etc/my.cnf

macOS配置Nginx

其实Nginx配置就两三个地方需要改动,因为我的网站目录是放在当前用户的~/www下面,所以,Nginx运行用户最好改成当前用户。

修改Nginx配置文件,将开头两行修改成如下,username改成当前用户的实际用户名就行:

vim /usr/local/etc/nginx/nginx.conf

user  username staff;
worker_processes  auto;

macOS配置PHP

PHP需要修改的也很少,将PHP的运行用户改成和Nginx一样就行:

vim /usr/local/etc/php/7.1/php-fpm.d/www.conf

user = zoco
group = staff

将上述两行改成相应的值就行了。

macOS配置MySQL

上面说了,我装的是MySQL5.5,安装过程中会有一行提示,可以将哪行命令直接复制然后执行,就能将MySQL自带的那些命令添加到path,添加到path之后就能使用mysql、mysqldump等命令了,当然也可以使用图形化界面连接MySQL,比如说sequel pro,然后用如下命令设置MySQL的root密码:
MySQL 5.6及更早的版本:

mysql_secure_installation

只要这一个命令就能执行设置root密码及初始化等相关操作。

MySQL 5.7及更新的版本:

use mysql;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD("password");
flush privileges;
quit

macOS下Nginx PHP MySQL进程相关命令

Nginx相关命令

Nginx启动:

sudo nginx

Nginx重启:

sudo nginx -s reload

Nginx停止:

sudo nginx -s stop

Nginx检查配置文件:

sudo nginx -t

需要注意的是,因为我们默认是使用Nginx监听80端口,所以启停Nginx的时候需要加上sudo命令,我之前没注意到这个问题,而是用的brew services restart nginx导致一直重启不了Nginx。而安装过程提示可以用brew services start/restart/stop nginx是因为默认的Nginx配置文件监听的是8080端口,8080端口不需要root权限就可以使用,所以用这个命令有效。

因为权限问题,Nginx在macOS系统下默认无法卡机启动,如果想要开机启动Nginx,需要执行如下两行代码将Nginx添加到开机启动项:

sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

PHP相关进程命令

PHP-FPM启动:

brew services start php@7.1

PHP-FPM重启:

brew services restart php@7.1

PHP-FPM停止:

brew services stop php@7.1

MySQL相关进程命令

MySQL启动:

brew services start mysql

MySQL重启:

brew services restart mysql

MySQL停止:

brew services stop mysql

macOS系统Nginx PHP MySQL添加网站

最后放一个新增web网站的配置,因为我们用的是Laravel,这里以Laravel为例。

Nginx的servers配置文件目录是:

/usr/local/etc/nginx/servers/

所以相关命令就是:

cd /usr/local/etc/nginx/servers/
vim zocodev.conf

server {
    listen                          80;
    server_name                     laravel.zocodev.com;
    index                           index.html index.php;
    access_log                      /usr/local/var/log/nginx/test.access.log;
    error_log                       /usr/local/var/log/nginx/test.error.log;

    root                            /Users/zoco/www/zocodev/public;

    location ~ \.php$ {
        try_files                   $uri =404;
        fastcgi_index               index.php;
        fastcgi_param               SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout        300;
        fastcgi_keep_conn           on;
        include                     /usr/local/etc/nginx/fastcgi_params;
        fastcgi_pass                127.0.0.1:9000;
        index                       index.html index.php;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

到目前为止,macOS系统下Nginx、PHP、MySQL的一些简单配置就完成了,一些简单需求是没问题了,更深入的,可以根据实际需求进行更改。