Mac OS X 系统自带有 php-fpm 等 php 运行环境,但还需要配置起来才能正常使用。本文简要介绍配置和运行系统自带 php-fpm 的方法与步骤,以及 nginx 的安装与配置。
0 安装 brew
brew 是 mac os x 上最流行的包管理工具,使用它安装软件非常的方便。如果你没有安装,那么安装它:
brew cask k 是 brew 的一个子集,也就是一个扩展,主要用于有GUI的软件。安装 brew cask:
1 | brew install caskroom/cask/brew-cask |
brew 常用命令:
03 | brew tap josegonzalez/php |
1 配置启用 php 环境
1.1 创建 php.ini 配置文件
首先查看默认的 php 的编译参数,有些值是编译进执行程序的,无法更改,所以需要按照默认设置来配置。
在输出结果中找到配置文件(php.ini)的位置,可以看到下面两项的值指定:
1 | '--with-config-file-path=/etc' |
2 | '--with-config-file-scan-dir=/Library/Server/Web/Config/php' |
根据这个指定,需要在 /etc 目录下创建 php.ini。Mac 在 /private/etc 和 /etc 下均提供了样例文件 php.ini.default,两个文件完全相同。选择一个复制为 /etc/php.ini:
1 | sudo cp /etc/php.ini.default /etc/php.ini |
变更 owner:
# chown <你的用户名> /etc/php.ini
# chmod u+w /etc/php.ini
1.2 创建配置文件 php-fpm.conf
直接运行 php-fpm,会报错找不到配置文件。
可以在 /private/etc/ 目录下生成配置文件:
1 | sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf |
2 | sudo chmod 777 /private/etc/php-fpm.conf |
另外,也可以在普通用户有权限的目录里放置配置文件,通过 --fpm-config 参数指定配置文件的位置:
1 | cp /private/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf |
然后可以通过如下命令执行:
1 | $ php-fpm --fpm-config /usr/local/etc/php-fpm.conf |
1.3 修改默认的日志和 pid 配置
1 | $ vim /usr/local/etc/php-fpm.conf |
修改 error_log 项,默认前缀是 /usr/var,但该路径并不存在,可以改到其他地方。参考:
1 | pid = /usr/local/var/run/php-fpm.pid |
2 | error_log = /usr/local/var/log/php-fpm.log |
当然,也可以不修改配置文件中配置项的路径,在php-fpm的运行参数中(-p)指定放置运行时文件的相对路径前缀。示例:
1 | $ php-fpm --fpm-config /usr/local/etc/php-fpm.conf --prefix /usr/local/var |
到此,php-fpm 守护进程已经基本可以正确的启动了。默认监听 9000 端口。
相关命令参考:
1 | 启动: php-fpm --fpm-config /usr/local/etc/php-fpm.conf --prefix /usr/local/var |
2 | 停止: sudo killall php-fpm |
php-fpm 开机启动:
1 | ln -sfv /usr/local/opt/php55/*.plist ~/Library/LaunchAgents |
2 | launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php55.plist |
1.4 编译安装 PHP 扩展的方法参考
创建 config-file-scan-dir 指定的目录:
1 | mkdir -p /Library/Server/Web/Config/php |
源码编译安装 php 扩展
这里以 php_discuz 扩展 (https://github.com/potterhe/php_discuz)[https://github.com/potterhe/php_discuz] 为例,介绍编译安装扩展的步骤。
假如扩展源码在 /Users/lzwme/php_discuz 目录,进入该目录并编译:
扩展编译后,默认会存储在 /Users/lzwme/php_discuz/modules/discuz.so。将扩展配置到 php 自动加载配置的目录中:
1 | $ echo "extension=/Users/lzwme/php_discuz/modules/discuz.so" > /Library/Server/Web/Config/php/discuz.ini |
测试验证是否成功
$ php -i|grep discuz
discuz support => enabled
执行测试用例
$ php -f /Users/lzwme/php_discuz/discuz.php
使用 brew 安装 php 扩展
以安装 phpredis 为例:
3 | PHP 5.5.36 (cli) (built: May 29 2016 01:07:06) |
6 | $ brew install homebrew/php/php55-redis --build-from-source |
2 安装和配置 nginx
2.1 安装 nginx
使用 brewhome 安装 nginx:
1 | brew install nginx --with-http_geoip_module --with-http2 |
2.2 新建 server
配置普通 server
在 /usr/local/etc/nginx/servers/ 目录中新建的配置文件,都会被 nginx.conf 加载。
1 | cd /usr/local/etc/nginx/servers |
在其中输入 server 配置。参考:
03 | root /Users/lzwme/test; |
04 | server_name localhost; |
05 | index index.html index.htm index.php; |
10 | autoindex_exact_size off; |
11 | autoindex_localtime on; |
16 | fastcgi_pass 127.0.0.1:9000; |
17 | fastcgi_index index.php; |
配置 https
生成私有证书
1 | sudo mkdir /usr/local/etc/nginx/ssl/ |
2 | cd /usr/local/etc/nginx/ssl/ |
3 | sudo openssl genrsa -des3 -out localhost.key 1024 |
4 | sudo openssl req -new -key localhost.key -out localhost.csr |
5 | sudo openssl rsa -in localhost.key -out localhost_nopwd.key |
6 | sudo openssl x509 -req -days 365 -in localhost.csr -signkey localhost_nopwd.key -out localhost.crt |
在 /usr/local/etc/nginx/servers/ 目录下新建 localhost-443.conf,内容为:
02 | listen 443 ssl http2 default_server; |
03 | root /Users/lzwme/test; |
04 | server_name localhost; |
05 | index index.html index.htm index.php; |
07 | ssl_certificate ssl/localhost.crt; |
08 | ssl_certificate_key ssl/localhost_nopwd.key; |
12 | autoindex_exact_size off; |
13 | autoindex_localtime on; |
17 | fastcgi_pass 127.0.0.1:9000; |
18 | fastcgi_index index.php; |
关于 https 和 http2 的具体配置,可参考这里:https://lzw.me/a/http2-nginx.html
启动并测试 nginx
Nginx 相关命令:
8 | sudo nginx -s reload|reopen|stop|quit |
启动 nginx,并在 root 指定目录 /Users/lzwme/test 下新建文件 phpinfo.php:
浏览器打开地址 http://localhost:81/phpinfo.php,查看是否正常。
2.3 配置 nginx 开机自动启动
Nginx 监听 1000 以下的端口需要 root 权限执行,所以应当使用 sudo 执行相关操作。配置 Nginx 开机启动:
1 | sudo ln -sfv /usr/local/opt/nginx/*.plist /Library/LaunchAgents |
2 | sudo chown root:wheel /Library/LaunchAgents/homebrew.mxcl.nginx.plist |
开启开机自动启动服务:
1 | launchctl load -w /Library/LaunchAgents/homebrew.mxcl.nginx.plist |
取消开机自动启动服务:
1 | sudo launchctl unload /Library/LaunchAgents/homebrew.mxcl.nginx.plist |
3 安装与配置 Mysql
安装 mysql
启动 mysql
4 | mysql.server start|stop|restart|status |
6 | mysqladmin -S /tmp/mysql.sock -u root -p password 123456 |
测试 mysql
进入 mysql 执行环境后,修改 mysql 的 root 账号密码
1 | update mysql.user set authentication_string="new password" where User='root'; |
配置 mysql 开机自动启动
1 | ln -sfv /usr/local/opt/mysql/*.plist /Library/LaunchAgents |
2 | launchctl load /Library/LaunchAgents/ homebrew.mxcl.mysql.plist |
初始化 mysql 配置参考
01 | mysql_secure_installation |
02 | Enter current password for root (enter for none) |
04 | > Change the root password? [Y/n] |
05 | 如不愿意使用 root 密码缺省 mysql 的 password 输入n |
08 | > Remove anonymous users? [Y/n] |
11 | > Disallow root login remotely? [Y/n] |
14 | > Remove test database and access to it? [Y/n] |
17 | > Reload privilege tables now? [Y/n] |
相关参考
http://blog.csdn.net/pang040328/article/details/41259385
[PHP] Mac下homebrew安装及php.mysql.nginx环境安装及配置