一、brew安装
确保系统已经安装xcode,打开终端,使用下面行命令安装依赖管理工具Homebrew。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
二、安装包下载
说明:以下操作都是基于非root用户操作,为减少不必要的麻烦,可以直接切换至root用户,编译nginx和php。
mkdir -p /usr/local/soft
cd /usr/local/soft
curl -O http://exim.mirror.fr/pcre/pcre-8.34.tar.gz
curl -O http://zlib.net/zlib-1.2.8.tar.gz
curl -O http://www.openssl.org/source/openssl-1.0.2f.tar.gz
说明:openssl使用较新的版本,1.0.1相应版本无法编译成功。
curl -O http://nginx.org/download/nginx-1.8.0.tar.gz
curl -O http://cn2.php.net/distributions/php-5.4.31.tar.gz
curl -O http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
curl -O http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
curl -O http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
curl -O http://xmlsoft.org/sources/libxml2-2.9.3.tar.gz
curl -O http://www.ijg.org/files/jpegsrc.v9a.tar.gz
curl -O ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.21.tar.gz
curl -O http://download.savannah.gnu.org/releases/freetype/freetype-2.6.2.tar.gz
说明:此处注意下载的freetype-2.6.2.tar.gz文件大小,可能有问题,正常应该是2.2M,如有问题,使用浏览器下载,再复制过来。
curl -O http://curl.haxx.se/download/curl-7.46.0.tar.gz
相关PHP扩展下载:
curl -O http://pecl.php.net/get/mongo-1.6.11.tgz
mac os环境memcache扩展新版本无法使用,这里安装2.2.7稳定版。
curl -O http://pecl.php.net/get/memcache-2.2.7.tgz
curl -O https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
说明:此处类似上面的freetype,正常大小119K,使用浏览器下载再复制过来。
curl -O http://www.imagemagick.org/download/ImageMagick.tar.gz
curl -O http://pecl.php.net/get/imagick-3.1.0RC1.tgz
三、安装包解压
将上面下载的安装包全部解压。
创建一个shell脚本处理,如下:
vim /usr/local/tar_soft.sh
#!/bin/bash
cd /usr/local/soft
tarfiles=`ls -1p | grep -v '/'`
for tarfile in ${tarfiles}
do
tar -zxvf ${tarfile}
done
:wq保存。
chmod 755 /usr/local/tar_soft.sh
/usr/local/tar_soft.sh
四、Nginx编译
1.编译pcre
cd pcre-8.34
./configure --prefix=/usr/local/pcre
make &&make install
2.编译zlib
cd ../zlib-1.2.8
./configure --prefix=/usr/local/zlib
make &&make install
3.编译openssl
cd ../openssl-1.0.2f
此时需要考虑当前系统是32位还是64位的,如是64位系统,如下操作:
vim config
查找darwin-i386-cc修改为darwin64-x86_64-cc,保存。
./config --prefix=/usr/local/openssl
make &&make install
4.编译nginx
mkdir -p /usr/local/webserver
cd ../nginx-1.8.0
./configure --prefix=/usr/local/webserver/nginx --user=_www --group=_www --sbin-path=/usr/local/webserver/nginx/nginx --conf-path=/usr/local/webserver/nginx/nginx.conf --pid-path=/usr/local/webserver/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/soft/pcre-8.34 --with-zlib=/usr/local/soft/zlib-1.2.8 --with-openssl=/usr/local/soft/openssl-1.0.2f
make && make install
5.启动nginx
vim /usr/local/webserver/nginx/nginx.conf
user _www _www;
说明:这里使用系统自带胡_www用户和用户组,不新建nginx用户用户组。
worker_processes 8;
worker_rlimit_nofile 102400;
监听端口:
listen 80;
:wq 保存。
其他参数根据需要详细设定。
测试下nginx是否正常:
sudo /usr/local/webserver/nginx/nginx -t
说明:启动和关闭nginx,需要在root用户才可以,否则会出现权限不足的问题。
6.开机启动nginx
mkdir -p /Users/$username/shell
说明:$username 代表当前使用用户,非root账户。
创建运行脚本:
vim /Users/$username/shell/start_nginx
#!/bin/bash
/usr/local/webserver/nginx/nginx -c /usr/local/webserver/nginx/nginx.conf
:wq 保存。
chmod 755 /Users/$username/shell/start_nginx
创建开机启动执行plist文件
sudo vim /Library/LaunchDaemons/com.nginx.service.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.nginx.service</string>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/Users/$username/shell/start_nginx</string>
</array>
</dict>
</plist>
sudo chmod 755 /Library/LaunchDaemons/com.nginx.service.plist
启动服务并载入plist文件:
sudo launchctl load /Library/LaunchDaemons/com.nginx.service.plist
此时,可以查看nginx是否正常启动。
接下来,可以reboot一下系统,再查看nginx是否正常开机启动。
7.命令汇总:
启动:sudo /usr/local/webserver/nginx/nginx -c /usr/local/webserver/nginx/nginx.conf
重启:sudo /usr/local/webserver/nginx/nginx -s reload
关闭:sudo /usr/local/webserver/nginx/nginx -s stop五、PHP编译
1.编译bzip2
cd ../bzip2-1.0.6
make && make install
2.编译libiconv
cd ../libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make install
3.编译libmcrypt
cd ../libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt
make && make install
说明:libxml2可能在创建的管理员用户编译不成功,如遇到错误,请切换到root用户再编译,
编译完成把相关生成的目录所有者改成创建的管理员。
(cd /use/local/;
chown -R $username libxml2/)
4.编译libxml2
cd ../libxml2-2.9.3
./configure --prefix=/usr/local/libxml2/
make&&make install
5.编译jpeg
cd ../jpeg-9a
./configure --prefix=/usr/local/jpeg
make&&make install
6.编译png
cd ../libpng-1.6.21
./configure --prefix=/usr/local/png
make&&make install
7.编译freetype
cd ../freetype-2.6.2
./configure --prefix=/usr/local/freetype
make&&make install
8.编译curl
cd ../curl-7.46.0
./configure --prefix=/usr/local/curl
make&&make install
9.编译php
cd ../php-5.4.31
./configure --prefix=/usr/local/webserver/php --with-libxml-dir=/usr/local/libxml2 --with-config-file-path=/usr/local/webserver/php/etc --enable-fpm --with-fpm-user=_www --with-fpm-group=_www --with-pear --with-curl=/usr/local/curl/ --with-gd --with-jpeg-dir=/usr/local/jpeg/ --with-png-dir=/usr/local/png/ --with-freetype-dir=/usr/local/freetype/ --with-iconv=/usr/local/libiconv/ --with-mcrypt=/usr/local/libmcrypt/ --with-zlib --with-zlib-dir=/usr/local/zlib --with-bz2 --with-xmlrpc --with-openssl=/usr/local/openssl/ --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql --disable-debug --enable-zip --enable-sockets --enable-soap --enable-mbstring --enable-xml --enable-ftp --enable-exif --enable-wddx --enable-bcmath --enable-shmop --enable-dba --enable-sysvsem --enable-sysvshm --enable-sysvmsg
make && make install
cp php.ini-development /usr/local/webserver/php/etc/php.ini
cd /usr/local/webserver/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
放开这句:
pid = run/php-fpm.pid
:wq保存。
10.启动php-fpm
sudo /usr/local/webserver/php/sbin/php-fpm
检查下php-fpm是否正常启动。
11.修改nginx配置支持php
vim /usr/local/webserver/nginx/nginx.conf
location / {
root html;
index index.html index.htm index.php;
}#此处添加index.php
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}#添加此段配置。
重启nginx:
sudo /usr/local/webserver/nginx/nginx -s reload
12.测试php页面是否正常。
vim /usr/local/webserver/nginx/html/test.php
<?php
phpinfo();
?>
:wq 保存
13.命令总结
启动:sudo /usr/local/webserver/php/sbin/php-fpm
重启:sudo kill -USR2 `cat /usr/local/webserver/php/var/run/php-fpm.pid`
关闭: sudo kill -INT `cat /usr/local/webserver/php/var/run/php-fpm.pid`
14.php-fpm开机启动
创建开机启动执行plist文件
sudo vim /Library/LaunchDaemons/com.php.fpm.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.php.fpm</string>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/webserver/php/sbin/php-fpm</string>
</array>
</dict>
</plist>
sudo chmod 755 /Library/LaunchDaemons/com.php.fpm.plist
启动服务并载入plist文件:
如果php-fpm已经启动,先关闭:
sudo kill -INT `cat /usr/local/webserver/php/var/run/php-fpm.pid`
sudo launchctl load /Library/LaunchDaemons/com.php.fpm.plist
此时,查看php-fpm是否正常启动。
接下来,可以reboot一下系统,再查看php-fpm是否正常开机启动。
五、PHP扩展编译
1.mongo扩展编译
cd ../mongo-1.6.11
/usr/local/webserver/php/bin/phpize
如报错如下:
cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
需要安装autoconf。
brew install autoconf
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make&&make install
如报错
in file included from /usr/local/soft/mongo-1.6.11/io_stream.c:34:
./contrib/php-ssl.h:33:10: fatal error:'openssl/evp.h' file not found
#include <openssl/evp.h>
跟openssl有关,os x10.11开始,苹果sdk中不再提供openssl,在/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include路径下是找不到原有的openssl目录的,做一个软连接处理(苹果笔记本如下处理可正常编译):
ln -s /usr/local/openssl/include/openssl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/openssl
mac mini如不能解决问题,再做如下处理:
ln -s /usr/local/openssl/include/openssl /usr/local/include/openssl
make&&make install
2.memcache扩展
cd ../memcache-2.2.7
/usr/local/webserver/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/webserver/php/bin/php-config --with-zlib-dir=/usr/local/zlib/
make && make install
3.phpredis
cd ../phpredis-2.2.4
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
4.imagick编译
安装此扩展需依赖ImageMagick库,先编译ImageMagick。
cd ../ImageMagick-6.9.3-5
./configure --enable-shared --without-perl --prefix=/usr/local/ImageMagick
make && make install
编译imagick
cd ../imagick-3.1.0RC1
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-imagick=/usr/local/ImageMagick
如报错如下
checking if ImageMagick version is at least 6.2.4... found version 6.9.3 Q16
checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h
因为新版本的ImageMagick编译出来的目录为ImageMagick-6,必须为ImageMagick才行,否则会出现错误,如下处理:
ln -s /usr/local/ImageMagick/include/ImageMagick-6/ /usr/local/ImageMagick/include/ImageMagick
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-imagick=/usr/local/ImageMagick
make &&make install
如又报错:
./php_imagick.h:49:12: fatal error: 'wand/MagickWand.h' file not found
# include <wand/MagickWand.h>
没有安装pkg-config 工具导致,安装pkg-config。
brew install pkg-config
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-imagick=/usr/local/ImageMagick
make &&make install
至此,所有扩展安装完毕,查看/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/下是否生成相应的so文件。
5. php添加扩展so
vim /usr/local/webserver/php/etc/php.ini
在文件最后添加如下内容:
[memcache]
extension=memcache.so
[redis]
extension=redis.so
[imagick]
extension=imagick.so
[mongo]
extension=mongo.so
:wq保存php.ini。
重启php-fpm。
通过查看test.php相应的扩展是否enable。