macOS High Sierra 下搭建PHP7+Aapche2 Web开发环境

升级到 High Sierra 后,惊奇的发现macOS自带的PHP版本已经升级到了 7.1.7,瞬间惊喜,毕竟使用 vagrant 或者 docker 来构建web开发环境总是需要这样或那样的额外资源消耗,虽然他们都很棒,但既然系统自身已经很好的提供了基础组建,我们何乐而不为呢?

# 检查PHP版本
➜  php -v
PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

第一步:Apache2 的基本配置

macOS 同样自带了 apache2 组件,免的我们下载了

# 检查版本,发现是 2.4.27 已经很新很够用了
➜  apachectl -v
Server version: Apache/2.4.27 (Unix)
Server built:   Jul 15 2017 15:41:46

接下来我们需要让 apache2 支持PHP7运行

vim /etc/apache2/httpd.conf

# 去掉以下注释
LoadModule php7_module libexec/apache2/libphp7.so

# 如果你需要修改站点根目录,请查找并替换以下内容,一共有两处,记得都要替换,其实我并不会修改它,因为反正我也不会用的,我在下文中会讲到
/Library/WebServer/Documents 

# 接下来我们需要激活 rewrite 模块,去掉下面这一行的注释
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

到这里,我们的macOS 就已经可以运行PHP7应用了,现在我们需要检查配置并启动 apache

# 检查配置,这一点很关键,如果你的配置文件有语法错误或者其他问题,你可以通过这一步找到相关的错误信息

➜  apachectl configtest
AH00112: Warning: DocumentRoot [/usr/docs/dummy-host.example.com] does not exist
AH00112: Warning: DocumentRoot [/usr/docs/dummy-host2.example.com] does not exist
AH00557: httpd: apr_sockaddr_info_get() failed for bogon
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

你可能看到一些警告信息,但这并不影响你的 apache2 正常运行,因为最后的结论是 Syntax ok. 当然了,如果你有强迫症的话,处理一下造成警告的问题还是有必要的。我的警告信息大致意思是我所设置的一个vhost中包含了一个不存在的目录,这其实是 vhost 自带的一个Demo,我们在下文中会讲到 vhosts 的配置。

apachectl  start/stop/restart # 启动、停止、重启,你们懂的

第二步:apache2 虚拟主机配置

我们在日常开发中,一定会同时处理多个WEB项目,否则你一定是一个假的WEB开发人员,所以让一个 apache2 去运行位于多个不同目录的WEB项目,是必须的。

macOS 在这一点上的实现还是比较简单的,我们来看看如何配置。

首先,我们需要让 apache2 支持 vhosts

# 编辑apache配置文件
vim /etc/apache2/httpd.conf

# 去掉以下行的注释
Include /private/etc/apache2/extra/httpd-vhosts.conf

然后,我们macOS 上的apache 就支持多个虚拟主机了,接下来我们看如何配置具体的虚拟主机,方式有很多种,我只写一种最简单的。

# 编辑虚拟主机配置文件
vim /etc/apache2/extra/httpd-vhosts.conf

# 添加你的虚拟主机

<VirtualHost *:80>
        ServerName yourVhost.com
        ServerAlias www.yourVhost.com
        ServerAdmin webmaster@localhost
        DocumentRoot ~/path/to/your/project/root/
        RewriteEngine on
        <Directory ~/path/to/your/project>
                Options -Indexes +FollowSymLinks +MultiViews
                AllowOverride All
                Require all granted
        </Directory>
        ErrorLog "/private/var/log/apache2/apple.com-error_log"
        CustomLog "/private/var/log/apache2/apple.com-access_log" common
        #ErrorLog ${APACHE_LOG_DIR}/error.log
        #CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

是的,我们为新建的本地虚拟主机配置了一个访问域名:yourVhost.com 还有一个访问别名: yourVhost.com, 然后我们将代码目录指定为 ~/path/to/your/project/root/,并限制了上级目录的访问权限。

接下来,我们需要编辑本地的 host 文件,实现项目的本地域名解析访问

vim /etc/hosts

# 添加一下内容
127.0.0.1    yourVhost.com  www.yourVhost.com

重启 apache2

apachectl restart

在浏览器里输入 yourVhost.com 访问你的项目吧。


本文如有错误欢迎指正。

编辑于 2017-10-17