在 macOS 上安装 Apache + PHP + MySQL

本文将描述 macOS 上安装 AMP 的最佳实践,这是在经历过许多次 Windows 和 Linux 上安装 AMP 组合的实践后我对 macOS 系统的补充。在国内做金融总离不开 Windows,在多年后我也未有什么动力更新我的 Mac 设备,macOS 也停留在 11 Big Sur,足以满足机顶盒需求。但由于性能和存储过剩,我也将它打造成了 Home Server,在之上安装了 FreeBSD,一路升级到 14,也非常好用,但由于启动 FreeBSD 虚拟机也有点大材小用,这次折腾将 FreeBSD 中提供的服务全部迁移到 macOS 上。本文就是此次玩耍的副产品,但足以指导今后许多年的 macOS AMP 安装。

Homebrew or MacPort,这是个问题

首先无论 Homebrew 还是 MacPorts,国内都需要配置 Mirror,这样才能较顺利适用,当然,如果你无限科学且满速网络,也可以忽略 Mirror。

Homebrew 的优势是安装快,MacPorts 则走源码编译方式。出于个人少许对 Arch 和 gentoo 的偏好,我的安装中几乎都是 MacPorts,它也是准官方维护的可编译源码。对 Linux 发行版,我没有到达 LFS 的狂热,而如今喜爱 Arch 的人,也有 EndeavourOS 或 Manjaro 等更入门的选择,但如今 2025 年选择 Linux 发行版,基本应该无脑 Ubuntu,并不是因为它流行,而是折腾 Linux 发行版之间的差异,已经无法让你变得更酷。当然,你有时间,就是爱好这些,就可以忽略上述我说的,而且选择 FreeBSD 依然还是一个酷选项,适合有技术实力、思维独立且喜欢独处的人。

安装 Apache 2.4

在 macOS 上长期需要使用 Apache 的人,推荐不使用系统自带的 Apache Httpd,自带的版本属于系统内置和系统某些功能关联,且升级时会刷新配置文件,所以推荐另外安装。至于有人说 nginx 性能更好,那是不懂 performance 的人的说法,非大公司,完全没必要在意 nginx 和 Apache httpd 之间的差别,个人和小型商业场景用它属于多此一举。

其次,在 macOS 上用浏览器打开 http://localhost ,会显示 It works! 则是系统自带 apache httpd 的提示。在使用 MacPorts 安装前,可以先禁用系统内置版本的自动运行。

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

如果还是想开启,则使用

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

启动 apache,则使用

sudo apachectl start

重启 apache,则使用

sudo apachectl restart

停止 apache,则使用

sudo apachectl stop

至于 MacPorts 安装 Apache,当然推荐官方文档

我不清楚正运行的 Aapche httpd 是系统自带还是 MacPorts 安装的

httpd 启动后会占用 80 端口,可以查询占用 80 端口的进程

sudo lsof -i:80

Aapche httpd 的配置

不在本文探讨范围内。

安装 PHP 8

截止本文发布时,PHP 8.3 的部分包依然存在兼容性问题,这里在 macOS Big Sur 上,就以 PHP 8.2 为例。也许未来会有所改善,而 PHP 8.4,至少 XDebug 还没有出现成熟稳定的包。如果是个人使用时,对老技术不必进入追新的误区。

sudo apachectl stop
sudo port install php82
sudo port select --list php
sudo port select --set php php82

安装常用 PHP 包

sudo port install php82-openssl 
sudo port install php82-calendar 
sudo port install php82-curl 
sudo port install php82-dba 
sudo port install php82-enchant 
sudo port install php82-ftp 
sudo port install php82-gettext 
sudo port install php82-gmp 
sudo port install php82-iconv 
sudo port install php82-imap 
sudo port install php82-mcrypt 
sudo port install php82-memcached 
sudo port install php82-mongodb 
sudo port install php82-odbc 
sudo port install php82-opcache 
sudo port install php82-openssl 
sudo port install php82-pcntl 
sudo port install php82-redis 
sudo port install php82-snmp 
sudo port install php82-soap 
sudo port install php82-sockets 
sudo port install php82-sqlite 
sudo port install php82-tidy 
sudo port install php82-zip

php-excel 已没有高版本,可用其它替代。

php-fpm

个人使用,没必要安装,徒增麻烦。

安装和配置 xdebug

sudo port install php82-xdebug

xdebug 配置文件路径

/opt/local/var/db/php82/xdebug.ini

xdebug.so 库文件

/opt/local/lib/php82/extensions/no-debug-non-zts-20xxxxxx/xdebug.so

上述不用修改,安装时会自动修改。

如何查看已安装的 PHP 包

php -m

如何用 port 命令查找已安装的 php82 包

port search --name --line --regex '^php82'

安装 apache2handler

这玩意是用来连接 apache2 和 php 的。

sudo port install php82-apache2handler

MySQL 8

可以安装 8,不要像国内某些公司一样食古不化 5.7。当然,MySQL 8 会遇到 Oracle 埋下的 caching_sha2_password 坑,这个使用最新的 mysql 客户端即可解决,对于 PHP 来说就是 mysqli 的新版本。

当然,使用 MariaDB 替代也是一个选项。

MAMP 集成

如果在相互集成时,遇到问题,可参考官方文档

其它

比较重要的配置就是

  • httpd.conf
  • extra/httpd_vhosts.conf

在 Apache2 配置中要把下面的两行放进去

Include etc/apache2/extra/mod_php82.conf
PHPIniDir "/opt/local/etc/php82/php.ini"
  • php.ini

确保一些参数的配置,具体想到再加。

总结

至此,AMP 环境就搭建好了,可预见的 10 年中,本文提到的东西依然不会太过时。在此开源环境下,依然有 6666 个开源工具等待着你探索。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *