作为一个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的一些简单配置就完成了,一些简单需求是没问题了,更深入的,可以根据实际需求进行更改。