Mac安装apache24和PHP多版本切换MongoDB和MYSQL

参考博客

中文翻译
英文原创

安装历程

安装Homebrew

  1. 打开终端输入($去掉):$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 查看brew的版本:brew -v
  3. 看brew是否配置成功:brew doctor
  4. 添加第三方仓库:brew tap homebrew/php brew tap homebrew/apache
  5. 更新brew:brew update

安装Apache

Mac 10.12 有本机预装的Apache2.4,但是删除了很多脚本,要拓展插件还要自己编译,所以特别麻烦,所以抛弃本机自带的,我们自己安装一个。

如果之前已经运行过本机的Apache,那么要执行下面的命令来停止它还有阻止它自启动.
$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
$ brew install httpd24 --with-privileged-ports --with-http2

执行成功出现 ,记住这个路径。
🍺 /usr/local/Cellar/httpd24/2.4.23_2: 212 files, 4.4M, built in 1 minute 45 seconds

设置自启动

$ sudo cp -v /usr/local/Cellar/httpd24/2.4.23_2/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons
$ sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
$ sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

你也可以不设置自启动,以后需要时这样启动

启动Apache:brew services start homebrew/apache/httpd24
重启Apache:brew services restart homebrew/apache/httpd24
关闭Apache:brew services stop homebrew/apache/httpd24

已经成功安装apache,在chrome运行localhost出现it works

注意,如果不能连接服务器,
$ ps -aef | grep httpd来查看apache是否运行,
$ sudo apachectl -k restart重启apache,
$ tail -f /usr/local/var/log/apache2/error_log来查看错误日志

配置Apache

用mac的文本编辑器来打开,Apache的配置文件

$ open -e /usr/local/etc/apache2/2.4/httpd.conf

搜索 DocumentRoot,然后你会看到下面这行:

DocumentRoot "/usr/local/var/www/htdocs"

紧接着还要将上面这行代码下面的 <Directory> 也改为你的新的document root

<Directory "/Users/your_user/sites">    

<Directory>代码块里面,我们还需要将 AllowOverride 改为下面的样子:

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All   

接下来通过取消注释使用 mod_rewrite 模块:

LoadModule rewrite_module libexec/mod_rewrite.so    

现在 Apache 已经指向了我们的用户主目录下的 sites 目录,不过依旧还存在一个问题。Apche 运行的时候,其用户及用户组都是 daemon,当程序访问我们的用户主目录的时候,就会遇到权限问题。解决这个问题的方法就是,在 httpd.conf 将用户和用户组分别改为你的用户名 your_userstaff

PHP的安装

你可以使用 brew options php55 来查看所有可以安装的选项设置,比如在这个例子中,我们使用 --with-httpd24 参数来编译安装 PHP 以及使 Apache 支持 PHP 所需要的一些模块。

$ brew install php55 --with-httpd24
$ brew unlink php55
$ brew install php56 --with-httpd24
$ brew unlink php56
$ brew install php70 --with-httpd24
$ brew unlink php70
$ brew install php71 --with-httpd24

注意:我只安装了PHP56还有PHP71,一个稳定版,一个开发版,你们自己选择。如果之前已经安装过 PHP,可能需要使用 reinstall 来代替 install 进行安装。

我在安装时遇到这个错误:

==> ./configure --prefix=/usr/local/Cellar/php56/5.6.11_2 --localstatedir=/usr/local/var --sysconfdir=/usr/local/etc/php/5.6 --with-config-file-path=/usr/local/etc/php/5.6 --with
checking whether to enable the SQLite3 extension... yes
checking bundled sqlite3 library... yes
checking for ZLIB support... yes
checking if the location of ZLIB install directory is defined... no
configure: error: Cannot find libz

其原因可能是 Xcode 的 Command Line Tool 没有正确安装。解决问题的方法是运行下面的命令来重新安装

$ xcode-select --install

可能你要修改PHP配置文件

/usr/local/etc/php/5.5/php.ini
/usr/local/etc/php/5.6/php.ini
/usr/local/etc/php/7.0/php.ini
/usr/local/etc/php/7.1/php.ini

Apache 和 PHP 的配置

我们已经成功安装了多个版本的 PHP,但我们还需要告诉 Apache 怎么使用它们。再次打开 /usr/local/etc/apache2/2.4/httpd.conf,并搜索 LoadModule php5_module 所在行。

可以发现,每个版本的 PHP 都有一个 LoadModule 入口,每个 LoadModule 都指向一个特定版本的 PHP。这里默认的路径如 /usr/local/Cellar/php71/7.1.0_11/libexec/apache2/libphp7.so 是 brew 应用程序的安装路径,我们可以使用一个更通用的路径来替换它们(具体的路径可能有所不同):

LoadModule php5_module        /usr/local/Cellar/php55/5.5.38_11/libexec/apache2/libphp5.so
LoadModule php5_module        /usr/local/Cellar/php56/5.6.29_5/libexec/apache2/libphp5.so
LoadModule php7_module        /usr/local/Cellar/php70/7.0.14_7/libexec/apache2/libphp7.so
LoadModule php7_module        /usr/local/Cellar/php71/7.1.0_11/libexec/apache2/libphp7.so

将上面的路径修改为:

LoadModule php5_module        /usr/local/opt/php55/libexec/apache2/libphp5.so
LoadModule php5_module        /usr/local/opt/php56/libexec/apache2/libphp5.so
LoadModule php7_module        /usr/local/opt/php70/libexec/apache2/libphp7.so
LoadModule php7_module        /usr/local/opt/php71/libexec/apache2/libphp7.so

之所以可以这么修改,是因为 /usr/local/opt/php71 其实是由 brew 创建的 /usr/local/Cellar/php71 的一个软连接。

这么修改的好处是,升级 PHP 的小版本号的时候,比如由 7.1.0_11 时,我们就不需要再修改 LoadModule 对应的值了

我们每次开发或运行依旧只需要一般也只能使用某一个版本的 PHP。以我们要使用 7.1 这个版本开发应用为例,将其他版本的 LoadModule 都注释掉,只保留对应版本的 LoadModule

#LoadModule php5_module        /usr/local/opt/php55/libexec/apache2/libphp5.so
#LoadModule php5_module        /usr/local/opt/php56/libexec/apache2/libphp5.so
#LoadModule php7_module        /usr/local/opt/php70/libexec/apache2/libphp7.so
LoadModule php7_module        /usr/local/opt/php71/libexec/apache2/libphp7.so

接下来还需要配置 PHP 的主目录索引文件(Directory Indexes),找到下面的代码块:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

将其替换为下面的代码:

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

保存后重启 Apache,PHP 的安装就完成了:

$ sudo apachectl -k restart

验证PHP,新建一个index.php里面输入下面代码:

<?php
phpinfo();
?>

打开浏览器输入:http://localhost,可以看到

PHP版本切换脚本

我使用的是sphp软件,国人很多使用php -v,哪个好用我也不知道。

把sphp放进bin目录下:

$curl -L https://raw.githubusercontent.com/sgotre/sphp-osx/master/sphp > /usr/local/bin/sphp

给sphp权限:

$ chmod +x /usr/local/bin/sphp

Homebrew 在安装程序的时候一般会把程序的可执行文件加入到 /usr/local/bin 和 /usr/local/sbin 这两个目录里面。通过下面的命令可以快速测试可执行文件路径是否正确:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

如果没有看到类似的输出,你可能需要手动添加这些路径。添加下面的代码到 shell 的配置文件中(不同的 shell 可能需要将路径添加到不同的配置文件中,如 ~/.profile ~/.bash_profile ~/.zshrc)。如果使用的是 macOS 默认的 shell,则添加到 ~/.profile (若没有这个文件,则创建它);如果使用的是 zsh,则添加到 ~/.zshrc:

export PATH=/usr/local/bin:/usr/local/sbin:$PATH

在添加路径到配置文件的时候,最好关闭其他不相关的终端,因为某些开着的终端可能会对路径造成一些奇怪的问题。添加完成后,配置会在下次打开终端的时候生效。或者使用下面的命令,重新载入配置文件使其立即生效

# 若使用的是默认终端
$ source ~/.profile
# 或如果使用的是 zsh
$ source ~/.zshrc

MYSQL数据库的安装

旧版的安装

安装:brew install mysql
启动:brew services start mysql
重启:brew services restart mysql
停止:brew services stop mysql

新版的安装

安装(drop-in replacement):$ brew install mariadb
安装:$ mysql_install_db
启动:$ mysql.server start
停止:$ mysql.server stop
修改密码:$ /usr/local/bin/mysql_secure_installation

配置如下:

Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户,生产环境建议删除,所以直接回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止
Remove test database and access to it? [Y/n] <– 是否删除test数据库,直接回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,直接回车

MongoDb的安装

更新Homebrew的package数据库,在Mac的终端中输入:

$ brew update

开始安装MongoDb

$ brew install mongodb

我用的启动是(后台启动)

sudo mongod -f /usr/local/etc/mongod.conf

连接到MongoDb,可以用命令行工具mongo连接:

$ mongo

推荐使用可视化软件 Robomongo


注意(有用的提示)

Mac OS X取消(本机)Apache(httpd)开机启动

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist  

如果哪天你想让它开机启动了,则将unload 改为 load:

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist

目录结构

  • brew 软件的根目录
    /usr/local/Cellar
    
  • brew安装的apache配置文件在
    /usr/local/etc/apache2/2.4/httpd.conf
    
  • 本机自带的apache在
    /etc/apache2/httpd.conf
    
  • 本机PHP的配置文件在
    /etc/php.ini
    
  • brew 安装的PHP配置在
    /usr/local/etc/php/5.6/php.ini
    

发表评论

电子邮件地址不会被公开。 必填项已用*标注