Mac OS X 系统自带的 php-fpm 配置和 nginx、mysql 的安装

2019-12-01 08:21:47

参考地址 Mac OS X 系统自带的 php-fpm 配置和 nginx、mysql 的安装

Mac OS X 系统自带有 php-fpm 等 php 运行环境,但还需要配置起来才能正常使用。本文简要介绍配置和运行系统自带 php-fpm 的方法与步骤,以及 nginx 的安装与配置。

0 安装 brew

brew 是 mac os x 上最流行的包管理工具,使用它安装软件非常的方便。如果你没有安装,那么安装它:

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

brew cask k 是 brew 的一个子集,也就是一个扩展,主要用于有GUI的软件。安装 brew cask

1brew install caskroom/cask/brew-cask

brew 常用命令:

01brew update                        #更新brew可安装包,建议每次执行一下
02brew search php55                  #搜索php5.5
03brew tap josegonzalez/php          #安装扩展<gihhub_user/repo>  
04brew tap                           #查看安装的扩展列表
05brew install php55                 #安装php5.5
06brew remove  php55                 #卸载php5.5
07brew upgrade php55                 #升级php5.5
08brew options php55                 #查看php5.5安装选项
09brew info    php55                 #查看php5.5相关信息
10brew home    php55                 #访问php5.5官方网站

1 配置启用 php 环境

1.1 创建 php.ini 配置文件

首先查看默认的 php 的编译参数,有些值是编译进执行程序的,无法更改,所以需要按照默认设置来配置。

1$ php -i|grep config

在输出结果中找到配置文件(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

1sudo 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,会报错找不到配置文件。

1$ php-fpm

可以在 /private/etc/ 目录下生成配置文件:

1sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
2sudo chmod 777 /private/etc/php-fpm.conf

另外,也可以在普通用户有权限的目录里放置配置文件,通过 --fpm-config 参数指定配置文件的位置:

1cp /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,但该路径并不存在,可以改到其他地方。参考:

1pid = /usr/local/var/run/php-fpm.pid
2error_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 开机启动:

1ln -sfv /usr/local/opt/php55/*.plist ~/Library/LaunchAgents
2launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

1.4 编译安装 PHP 扩展的方法参考

创建 config-file-scan-dir 指定的目录:

1mkdir -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 目录,进入该目录并编译:

1$ ./configure
2make

扩展编译后,默认会存储在 /Users/lzwme/php_discuz/modules/discuz.so。将扩展配置到 php 自动加载配置的目录中:

1echo "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 为例:

1# 查看 php 版本
2$ php -v
3PHP 5.5.36 (cli) (built: May 29 2016 01:07:06)
4
5# 根据 php 版本安装对应版本的扩展
6$ brew install homebrew/php/php55-redis --build-from-source

2 安装和配置 nginx

2.1 安装 nginx

使用 brewhome 安装 nginx:

1brew install nginx --with-http_geoip_module --with-http2

2.2 新建 server

配置普通 server

在 /usr/local/etc/nginx/servers/ 目录中新建的配置文件,都会被 nginx.conf 加载。

1cd /usr/local/etc/nginx/servers
2vi localhost-80.conf

在其中输入 server 配置。参考:

01server {
02    listen  80;
03    root    /Users/lzwme/test;
04    server_name localhost;
05    index   index.html index.htm index.php;
06
07    # 方便本地测试,开启目录浏览遍历
08    location / {
09        autoindex on; # 开启目录浏览功能 
10        autoindex_exact_size off; # 关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b
11        autoindex_localtime on; # 开启以服务器本地时区显示文件修改日期
12    }
13
14    location ~ \.php$ {
15        #fastcgi_pass unix:/tmp/php-cgi.sock;
16        fastcgi_pass  127.0.0.1:9000;
17        fastcgi_index index.php;
18        include       fastcgi.conf;
19    }
20}

配置 https

生成私有证书

1sudo mkdir /usr/local/etc/nginx/ssl/
2cd /usr/local/etc/nginx/ssl/
3sudo openssl genrsa -des3 -out localhost.key 1024
4sudo openssl req -new -key localhost.key -out localhost.csr
5sudo openssl rsa -in localhost.key -out localhost_nopwd.key
6sudo openssl x509 -req -days 365 -in localhost.csr -signkey localhost_nopwd.key -out localhost.crt

在 /usr/local/etc/nginx/servers/ 目录下新建 localhost-443.conf,内容为:

01server {
02    listen 443 ssl http2 default_server;
03    root    /Users/lzwme/test;
04    server_name localhost;
05    index   index.html index.htm index.php;
06
07    ssl_certificate ssl/localhost.crt;
08    ssl_certificate_key ssl/localhost_nopwd.key;
09    # 方便本地测试,开启目录浏览遍历
10    location / {
11        autoindex on; # 开启目录浏览功能 
12        autoindex_exact_size off; # 关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b
13        autoindex_localtime on; # 开启以服务器本地时区显示文件修改日期
14    }
15
16    location ~ \.php$ {
17        fastcgi_pass  127.0.0.1:9000;
18        fastcgi_index index.php;
19        include       fastcgi.conf;
20    }
21}

关于 https 和 http2 的具体配置,可参考这里:https://lzw.me/a/http2-nginx.html

启动并测试 nginx

Nginx 相关命令:

1# 测试配置是否有语法错误
2nginx -t
3
4# 启动 nginx
5sudo nginx
6
7# 重新加载配置|重启|停止|退出 nginx
8sudo nginx -s reload|reopen|stop|quit

启动 nginx,并在 root 指定目录 /Users/lzwme/test 下新建文件 phpinfo.php:

1<?php
2    phpinfo();
3?>

浏览器打开地址 http://localhost:81/phpinfo.php,查看是否正常。

2.3 配置 nginx 开机自动启动

Nginx 监听 1000 以下的端口需要 root 权限执行,所以应当使用 sudo 执行相关操作。配置 Nginx 开机启动:

1sudo ln -sfv /usr/local/opt/nginx/*.plist /Library/LaunchAgents
2sudo chown root:wheel /Library/LaunchAgents/homebrew.mxcl.nginx.plist

开启开机自动启动服务:

1launchctl load -w /Library/LaunchAgents/homebrew.mxcl.nginx.plist

取消开机自动启动服务:

1sudo launchctl unload /Library/LaunchAgents/homebrew.mxcl.nginx.plist

3 安装与配置 Mysql

安装 mysql

1brew install mysql

启动 mysql

1mysql.server start
2
3// mysql 启动|停止|重启|查看状态
4mysql.server start|stop|restart|status
5// 修改 mysql 密码
6mysqladmin -S /tmp/mysql.sock -u root -p password 123456

测试 mysql

1mysql -uroot

进入 mysql 执行环境后,修改 mysql 的 root 账号密码

1update mysql.user set authentication_string="new password" where User='root';
2flush privileges;
3quit

配置 mysql 开机自动启动

1ln -sfv /usr/local/opt/mysql/*.plist /Library/LaunchAgents
2launchctl load /Library/LaunchAgents/  homebrew.mxcl.mysql.plist

初始化 mysql 配置参考

01mysql_secure_installation
02Enter current password for root (enter for none)
03回车
04> Change the root password? [Y/n]
05如不愿意使用 root 密码缺省 mysql 的 password 输入n
06并键入自己想使用的password
07
08> Remove anonymous users? [Y/n]
09Yes. 匿名用户我们并不需要
10
11> Disallow root login remotely? [Y/n]
12Yes. 我们仅需要127.0.0.1
13
14> Remove test database and access to it? [Y/n]
15Yes. 无需保留冗余的测试文件
16
17> Reload privilege tables now? [Y/n]
18Yes.重新加载数据库

相关参考

http://blog.csdn.net/pang040328/article/details/41259385

[PHP] Mac下homebrew安装及php.mysql.nginx环境安装及配置


  • 2019-10-08 13:14:44

    MySQL 批量修改表名

    功能:将数据库 booksystem 中的表名前缀是 sys_ 开头的表名替换 sys_ 为 qun_

  • 2019-10-08 13:26:19

    详解Linux服务器最大tcp连接数

    1全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。 2对server端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发TCP连接数超过10万 是没问题的,国外 Urban Airship 公司在产品环境中已做到 50 万并发 。

  • 2019-10-08 14:09:57

    git创建分支并提交到远程分支

    远程分支的创建,一般都是基于本地分支的。即将本地的某个分支提交到远程,作为远程分支。命令如下:

  • 2019-10-09 13:38:20

    NPM依赖包版本号~和^和*的区别

    ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0 ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0 * 这意味着安装最新版本的依赖包

  • 2019-10-09 14:39:40

    import双反斜杠\\的意思

    ​ \表示引用根目录下面的PHPEXcel;不用\的话是引用当前目录下面的 PHPExcel

  • 2019-10-09 15:33:31

    nuxt,nuxtjs简单介绍以及使用

    在集成的服务器端框架之间进行选择: 选择您喜欢的 UI 框架: 选择您喜欢的测试框架: 选择你想要的 Nuxt 模式 (Universal or SPA) 添加 axios module 以轻松地将 HTTP 请求发送到您的应用程序中。 添加 EsLint 以在保存时代码规范和错误检查您的代码。 添加 Prettier 以在保存时格式化/美化您的代码。

  • 2019-10-10 00:21:35

    laravel 5.6以上日志理解及日志格式定义

    Laravel/Lumen的日志默认是基于Monolog进行了一层封装,如果要求不高,用起来还是十分容易的,本文基于laravel5.6/Lumen5.6版本进行解说。5.6版对日志系统做了升级,将日志的配置单独放以了config/logging.php 配置文件中,所以现在实用多了。

  • 2019-10-10 10:10:49

    @Scheduled注解各参数详解

    每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 * * ? 每月1号凌晨1点执行一次:0 0 1 1 * ? 每月最后一天23点执行一次:0 0 23 L * ? 每周星期天凌晨1点实行一次:0 0 1 ? * L 在26分、29分、33分执行一次:0 26,29,33 * * * ? 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?