Skip to content

Mac 上配置 MNMP 环境

Published:

前言

今天打算实践一下 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

地址 : https://4ark.me/post/41f45ee.html/

来源 : https://4ark.me

著作权归作者所有,转载请联系作者获得授权。