mac os源码编译NGINX和PHP环境

一、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>

:wq 保存。

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>

:wq 保存。

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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值