Mac 下用 brew 搭建 PHP (LNMP/LAMP)开发环境

1,491 阅读3分钟

概述:

Mac 下搭建 lamp 开发环境很容易,有 xamppmamp 现成的集成环境。但是集成环境对于经常需要自定义一些配置的开发者来说会非常麻烦,而且 Mac 本身自带 apachephp,在brew 的帮助下非常容易手动搭建,可控性很高

brew 安装

官网

安装命令:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew常用命令:

安装软件:brew install 软件名,例:brew install wget

搜索软件:brew search 软件名,例:brew search wget

卸载软件:brew uninstall 软件名,例:brew uninstall wget

更新所有软件:brew update

更新具体软件:brew upgrade 软件名 ,例:brew upgrade git

显示已安装软件:brew list

查看软件信息:brew info/home 软件名 ,例:brew info git / brew home git PS:brew home 指令是用浏览器打开官方网页查看软件信息

查看哪些已安装的程序需要更新: brew outdated

显示包依赖:brew reps

显示帮助:brew help

Apache 或 Nginx 二者安装一个即可, 本人安装的是 Nginx

Apache安装

  1. Apache 控制命令:
$ sudo apachectl start
$ sudo apachectl restart
$ sudo apachectl stop

唯一要改的是主目录,mac 默认在 home 下有个 Sites(站点)目录,访问路径是 http://localhost/~user_name

这样不太容易访问,修改/etc/apache2/httpd.conf 内容

DocumentRoot /Users/username/Sites
<Directory /Users/username/Sites>
  Options Indexes MultiViews
  # apache 2.2
  # AllowOverride All
  # Order allow,deny
  # Allow from 127.0.0.1

  # apache 2.4
  Require local
</Directory>

这样 Sites 目录就是网站根目录了,通过 http://localhost 就可以访问了。

  1. 设置 vhost

设置 vhost 可以很方便的进行站点调试,尤其是对于需要在根目录运行的站点。推荐 VirtualHostX 然后输入:

<Directory "/pash/to/site">
  Allow From All
  AllowOverride All
  Options +Indexes
  </Directory>
  <VirtualHost *:80>
  ServerName "site.test"
  DocumentRoot "/path/to/site"
</VirtualHost>

这么设置会有个问题,默认的 http://localhost 会被转到这儿来,所以专门再设置一下localhosthost 就好了。

<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /path/to/root
</VirtualHost>

然后把 host 文件改一下,把刚刚设置的 ServerName 改到本地就好了。

$ sudo vi /etc/hosts

写入:

127.0.0.1 site.test

Nginx 安装

nginx 使用

安装 nginx

$ brew install nginx

打开 nginx (如果想要监听 80 端口,必须以管理员身份运行)

$ sudo nginx

nginx 配置重新加载|重启|停止|退出

$ nginx -s reload|reopen|stop|quit

nginx 重新加载可能会遇到下面报错

nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)

解决方法

找到你的 nginx.conf 的文件夹目录, 运行下面命令

nginx -c /usr/local/etc/nginx/nginx.conf

再运行重新加载命令就可以了

nginx -s reload

测试配置是否有语法错误

$ nginx -t

配置修改 Nginx 配置文件

打开 nginx.config 文件

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

找到 serverlocation 配置,给 index 加一个 index.php

location / {
  root  html;
  index  index.html index.htm index.php;
}

打开 server 下被注释的 location ~.php$(即删除代码前面的 ‘#’)

location ~ \.php$ {
  root          html;
  fastcgi_pass  127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  include        fastcgi_params;
}

修改 fastcgi_param 参数

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
修改为:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

创建 index.php

/usr/local/var/www 目录下,删除 index.html,创建 index.php 这个时候还不能访问 php 站点,因为还没有开启 php-fpm

php-fpm 安装

Mac OSX 10.9 的系统自带了 PHP、php-fpm,省去了安装 php-fpm 的麻烦

修改 php-fpm 的配置,否则运行 php-fpm 会报错

$ sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
$ vim /private/etc/php-fpm.conf 

修改 php-fpm.conf 文件中的 error_log 项【32行】,默认该项被注释掉,这里需要去注释并且修改为 error_log = /usr/local/var/log/php-fpm.log。如果不修改该值,运行 php-fpm 的时候会提示 log 文件输出路径不存在的错误

error_log = /usr/local/var/log/php-fpm.log

测试 nginx 服务, 在之前 nginx 配置文件 default.conf 中设置的 root 项对应的文件夹下创建测试文件

<!-- index.php 文件 -->
<!-- lang: php -->
<!-- ~/nginx_sites/index.php -->
<?php phpinfo(); ?>

查看 nginx 服务是否启动:【启动成功、有master这个进程】

$ ps -ef|grep nginx
  1. 启动nginx服务:
$ sudo nginx
  1. 修改 Nginx 配置文件: 在上面已经配置好了
  2. 检查配置:【提示 successfull 表示成功】
$ sudo nginx -t

过程中出现, 检查配置时会报下面警告, 该警告可以忽略

$ nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored

4、重启 nginx 服务:

$ sudo nginx -s reload 

5、启动php服务:

$ sudo php-fpm

6、在浏览器地址栏中输入 localhost:8080,如果配置正确地话,应该能看到 PHP 相关信息的页面

Mac下安装 MySQL (Mac 10.12)

注意电脑系统与mysql 版本匹配: 系统:mac 10.12 MySQL版本:5.7.15

建议安装 5.7.x 版本 Mysql

官方下载dmg安装包

  1. 官网下载 dmg 安装包:【下载十分缓慢】 官网地址 MySQL 版本包网盘

注:dmg安装方式,新版本的安装包内,只有一个pkg包

  1. 点击 pkg 包安装,一直默认步骤就可以【正常情况下就安装成功了】

重要提示: 生成的密码只是临时密码,会导致部分 mysql 工具提示临时密码拒绝登录。

  1. 测试并验证是否安装成功,进入/usr/local/mysql/bin/,用ls命令查看是否有mysql
$ /usr/local/mysql/bin/
$ ls 

如下图:

  1. 处理步骤

先关闭 MySQL 服务:系统偏好-MySQL-关闭【下面第6步后话中有界面图】 启动 mysq l的服务,输入以下命令:

$ sudo /usr/local/mysql/support-files/mysql.server start

注意,start为启动,那么 stop 就是停止,全命令如下:

$ sudo /usr/local/mysql/support-files/mysql.server stop

修改 mysql初始化密码 避免服务已经启动,所以第一步先关闭 mysql 的服务

$ sudo /usr/local/mysql/support-files/mysql.server stop

开启安全模式启动 mysql,这种方式可以不用输入默认密码

$ sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables

出现如下画面是启动成功

此时,关闭这个终端窗口,再重新启动一个 进入 /usr/local/mysql/bin/,以root身份启动 mysql

$ ./mysql -u root

输入以下命令修改密码,其中PASSWORD里面就是要设置的密码

# UPDATE mysql.user SET authentication_string=PASSWORD('root') WHERE User='root';
# FLUSH PRIVILEGES;

退出 mysql,输入

$ quit;

停止 mysql 服务

$ sudo /usr/local/mysql/support-files/mysql.server stop

再启动mysql服务

$ sudo /usr/local/mysql/support-files/mysql.server start

使用以下命令进入mysql

./mysql -u root -p

此时,要求输入密码,就是前面设置的 root 密码

测试是否正常

$ show databases;

此时,如果出现 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement 的错误提示时,需要再设置一次密码

$ SET PASSWORD = PASSWORD('root');

再测试是否正常

$ show databases;

一切正常。

  1. 优化使用【关闭前面的 mysql,使用下面命令进行 mysql 监听】 通过上面的操作,每次都要进入到 mysql 的目录上进行启动,那么有两种方式 aliasln 进行设置,ln 其实不推荐,路径时很大的问题。推荐使用alias
$ alias mysql=/usr/local/mysql/bin/mysql

【拓展】: mysql数据库操作的一些常用命令:

// 展示连接所有数据库信息
$ show databases;
// 使用某个数据库
$ use dataName;
// 查看当前数据库的表的信息
$ show tables;
// 查看某个特定表的详细信息
$ describe tableName;

数据库的CRUD操作参考链接

  1. 后话 其实对比发现,用 dmg 安转包安装的有很多好处,比如开机自动启动这些,全部都有gui工具使用 在系统的偏好设置上如下:

所以,非常推荐使用此方法安装在开发环境。 而对于linux下,命令行操作时首选。

使用brew命令安装mysql

安装

brew install mysql@版本号

常用命令

 mysql.server start #启动mysql服务
 mysql.server stop #关闭mysql服务

配置 在终端运行mysql_secure_installation脚本,该脚本会一步步提示你设置一系列安全性相关的参数,包括:设置root密码,关闭匿名访问,不允许root用户远程访问,移除test数据库。当然运行该脚本前记得先启动mysql服务。

部署在nginx服务器上的php文件连接mysql数据库 按照上面步骤配置好环境后:在www目录下创建php文件输入下面连接代码

<?php
  $servername = "localhost";
  $username = "root";
  $password = "root";

  try {
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    echo "连接成功"; 
  }
  catch(PDOException $e)
  {
    echo $e->getMessage();
  }
?>

写完代码检可能会出现下面错误:【如果浏览器中显示连接成功,则就表示成功了】 mac上连接mysql数据库时报错:SQLSTATE[HY000] [2002] No such file or directory

解决方法

php.ini 文件中找到 extension=php_mysqli.dll 一行不需要取消注释,否则启动 php-fpm 会报错 Unable to load dynamic library 查看是否有php.ini文件

$ cd /etc
$ ls

没有php.ini文件执行下面命令

cp sudo cp php.ini.default php.ini

编辑php.ini文件:

$ vim php.ini

php.ini文件中,找到以下三项,并做修改后如下:

1013行    pdo_mysql.default_socket= /tmp/mysql.sock

1162行    mysql.default_socket = /tmp/mysql.sock 

1221行    mysqli.default_socket =/tmp/mysql.sock

重启nginxphp-fpm,在浏览器中输入localhost:8080文件名即可进行检验

参考资料 abing_hu 博文 简书文章 博文 Ryan_zheng博文