Mac 上配置 MNMP 环境

今天打算实践一下 WordPress 主题开发,但由于电脑上没有 PHP 和 MySQL 的环境,于是折腾了一下,结果发现安装配置过程一堆的坑,虽然最终选择了 Docker 环境开发,但毕竟已经踩坑了,就记录一下。

前言

今天打算实践一下 WordPress 主题开发,但由于电脑上没有 PHP 和 MySQL 的环境,于是折腾了一下,结果发现安装配置过程一堆的坑,虽然最终选择了 Docker 环境开发,但毕竟已经踩坑了,就记录一下。

本文讲述如何在 Mac OS 上配置 Ngnix + PHP + MySQL,以及最后如何成功安装 WordPress。

过程

Nginx

1. 安装

brew install nginx

2. 开启

# 启动
brew services start nginx
# 停止
brew services stop nginx
# 重启
brew services restart nginx
# 开机启动
sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
# 关闭开机启动
sudo launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

3. 访问

nginx 默认监听 8080 端口,可以这样看一下是否能够访问:

curl localhost:8080
## 看到这个返回表示 ok
<html><body><h1>It works!</h1></body></html>

4. 配置主机

为了方便管理,我们在 nginx 配置目录下的 servers
新增一个配置文件:

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

并填充以下内容:

server {
listen       80;
# 如果需要域名访问的话,注意需要修改 /etc/hosts 文件
# server_name  4ark.dev;
# 项目根目录
root /Users/4ark/www;
location / {
index index.php index.html;
autoindex on;
}
}

注意:最好每个项目都单独一个配置文件。

从上面的配置可以看到我们将项目放在用户下的 www
下,在这个目录新建一个 html 文件:

mkdir ~/www
vim ~/www/index.html

这时候重启一下 nginx 服务,访问刚刚配置的主机,就可以访问到上面这个 html 文件

brew services restart nginx
curl localhost

PHP

1. 安装

Mac 已经自带有 PHP,你可以通过以下命令查看本机是否存在 PHP:

brew list | grep php

如果没有,或者你想安装其他版本的话,那就先安装

# 可以先搜索以下是否有你想要的版本
brew search php
# 安装 php 7.3
brew search php@7.3

2. 配置

配置 php-fpm 权限

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

修改如下:

- user = _www
+ user = 4ark # 你的用户名
group = _www

如果正在运行 php-fpm,那就先关闭

sudo killall php-fpm

然后启动:

sudo php-fpm -D

这时候如果遇到以下报错:

ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/private/etc/php-fpm.conf'
ERROR: FPM initialization failed

错误信息显示,不能打开配置文件, cd /private/etc
,发现没有 php-fpm.conf
文件,但是有 php-fpm.conf.default
文件。这个文件是默认配置,我们可以复制一份,改名为 php-fpm.conf
,然后再根据需要改动配置。

sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
sudo cp /private/etc/php-fpm.d/www.conf.default /private/etc/php-fpm.d/www.conf

执行 php-fpm
,再次报错:

ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
ERROR: failed to post process the configuration
ERROR: FPM initialization failed

错误信息显示,不能打开错误日志文件。 cd /usr/var/log
发现根本没有这个目录,甚至连 var
目录都没有,加上为了避免权限问题,干脆配置到 /usr/local/var/log
目录。

vim /private/etc/php-fpm.conf
# 将 error_log 改为 /usr/local/var/log/php-fpm.log
error_log = /usr/local/var/log/php-fpm.log

执行 sudo php-fpm
,再次报错:

ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
ERROR: FPM initialization failed

说是 9000 端口被占用了,但 lsof -i:9000
又看不见,于是只能换个端口:

vim /private/etc/php-fpm.d/www.conf
# 修改监听端口为 9999
listen = 9999

再执行 sudo php-fpm -D
,就能够正常启动了。

3. 配置 nginx

这时候我们修改 nginx 的主机配置,使它支持 PHP

server {
listen       80;
server_name  4ark.dev;
root /Users/4ark/www;
location / {
index index.php index.html;
autoindex on;
}
+    location ~ \.php$ {
+        fastcgi_pass   127.0.0.1:9999;
+        fastcgi_index  index.php;
+        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+        include        fastcgi_params;
+    }
}

然后重启 nginx 服务

brew services restart nginx

这时候在项目根目录新增一个 php 文件

vim ~/www/index.php
# 内容
<?php
echo 'hello world!';

测试一下

curl localhost
# 返回结果
hello world!

MySQL

通常来说 Mac OS 也是自带有 MySQL,你可以通过以下命令查看本机是否存在 MySQL

brew list --formula | grep mysql

如果没有安装的话,那就先安装

brew install mysql

安装完成以后,会发现并没有让我们设置密码,运行以下进入密码设置

mysql_secure_installation

设置完密码之后,就可以登录了

mysql -uroot -p
# 输入密码

WordPress

环境终于配置好了,终于可以安装 WordPress 啦,然而事情并没有这么简单,当我满心欢喜把 wordpress 下载到项目根目录下,就好像这样:

cp -r ~/download/wordpress ~/www/wordpress

然后我们创建一个数据库:

[root@host]# mysql -u root -p
Enter password:******  # 登录后进入终端
mysql> create DATABASE `wordpress-test`;

然后我们通过浏览器访问 localhost/wordpress
,就可以看到一个 WordPress 的安装界面,输入数据库相关的信息后,本以为可以像往常一样成功进入下一步,结果我看到了这个错误: WordPress建立数据库连接时出错

结果再尝试了几次,确保所有表单都已经填写正确,依然无法正常建立数据库连接,意识到事情可能并没有这么简单, 于是我在网上找到了一个解决方案,大概就是说无法使用 root 进行登录,需要新增一个用户:

grant all on wordpress-test.* to 'wp-test'@'localhost' identified by 'password'

然后使用这个用户进行登录,然后在我这里却行不通,依然显示同样的错误,于是我开启一下 debug
,看一下导致是什么问题

cp wp-config-sample.php wp-config.php
vim wp-config.php

做以下改动:

// 填写以下数据库信息
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define( 'DB_NAME', 'database_name_here' );
/** MySQL数据库用户名 */
define( 'DB_USER', 'username_here' );
/** MySQL数据库密码 */
define( 'DB_PASSWORD', 'password_here' );
/** MySQL主机 */
define( 'DB_HOST', 'localhost' );
// 开启 DEBUG
- define('WP_DEBUG', false);
+ define('WP_DEBUG', true);

再访问一下,可以看到以下错误:

No such file or directory 建立数据库连接时出错

其实原因是 PHP 配置中的 mysql.sock
与本机的 MySQL 中的路径不一致,可以通过这样查看:

vim ~/www/phpinfo.php
# 内容
<?php
phpinfo();

然后打开 localhost/phpinfo
,搜索 default_socket

然后再查看 MySQL 的 socket
路径:

[root@host]# mysql -u root -p
Enter password:******  # 登录后进入终端
mysql> status;
# 输出
mysql  Ver 8.0.22 for osx10.16 on x86_64 (Homebrew)
Connection id:        114
Current database:
Current user:        root@localhost
SSL:            Not in use
Current pager:        less
Using outfile:        ''
Using delimiter:    ;
Server version:        8.0.22 Homebrew
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /tmp/mysql.sock
Binary data as:        Hexadecimal
Uptime:            14 hours 59 min 44 sec

如果与 PHP 中的 mysql.sock
路径不一致,则需要修改:

sudo cp /private/etc/php.ini.default /private/etc/php.ini
vim /private/etc/php.ini
## 修改为以下
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

然后重启一下 php-fpm

sudo killall php-fpm
sudo php-fpm -D

再看看 phpinfo
,应该就生效了。

然后再尝试登录一下 WordPress,又发现了以下错误:

error: The server requested authentication method unknown to the client [duplicate]

解决方案如下:

[root@host]# mysql -u root -p
Enter password:******  # 登录后进入终端
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'your_root_password';

应该就可以了。

参考链接

4Ark
我还没有学会写个人说明!

你也可能喜欢

评论已经被关闭。

插入图片