Tengine2.1.0 PHP5.6.8 Nodejs 的编译安装和配置

淘宝Tengine的编译安装

Tengine的官网:http://tengine.taobao.org/php

下载源码包

wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz`

tar -zxvf tengine-2.1.0.tar.gz

cd tengine-2.1.0

须要注意的是,我但愿用Jemalloc来分配和释放tengine内存(比默认的内存管理好多了),因此编译选项设置了--with-jemalloc的源码路径,源码包的得到具体经过如下方式:html

Jemalloc方面

官网 http://www.canonware.com/jemalloc/node

解压至指定目录

wget https://github.com/jemalloc/jemalloc/releases/download/3.6.0/jemalloc-3.6.0.tar.bz2

tar -jxvf jemalloc-3.6.0.tar.bz2 -C /usr/local/src

编译配置

./configure \
--prefix=/usr/local/nginx \
--with-jemalloc=/usr/local/src/jemalloc-3.6.0/ \
–-user=www-data \
–-group=www-data

若是想知道更多详细的编译参数的话能够执行./configure --help,会打印出全部的编译选项,能够按需添加或者禁用一些tengine模块,也能够在之后的使用中按需添加编译属性而后从新编译安装便可。
执行configure时,可能会报各类依赖包不存在的提示,好比openssl,若是是开发环境或者对这些依赖程序的版本没有要求的话,能够直接经过apt-get install libxxx的方式安装这些依赖包。mysql

编译安装

make
make test
make install

配置Tengine

make install以后会安装在/usr/local/nginx目录下,其中conftengine的配置文件目录,咱们修改一下/usr/local/nginx/conf/nginx.conf这个配置文件:
若是有像Apachevhost需求的话,能够在conf目录下新建一个文件夹vhost,而后全部虚拟主机的配置文件都放到vhost这里面:nginx

cd /usr/local/nginx/conf
mkdir vhost
vim nginx.conf

打开nginx.conf配置文件后,最基础的须要作如下几个地方的修改(所提到的地方都要去除前面的#号注释,只修改提到的地方,其它地方保留默认便可):git

#Tengine的进程以www-data用户启动
user www-data;
#自动以CPU核心数启动相应数量的进程
worker_processes auto;
#开启gzip支持
gzip on
#全局的错误日志地址,方便调试
error_log /home/jason/BigDisk/nginx/error.log;
server {
        #设置默认访问的server(default是指经过ip或者servername未定义的域名进行访问时就走到这个server)
        listen       80 default;
        #默认访问的路径
        root /home/jason/Work/nginx-default;
        location / {
            index index.php  index.html index.htm;
        }
        #默认错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        #抓发到php-fpm
        location ~ \.php$ {
            fastcgi_pass   unix:/var/run/php-fpm.socket;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    #引用其余的vhost配置文件
    include vhost/*.conf;

启动脚本

安装好Tengine后须要启动它,github上有人已经作了一份比较完美的nginx启动脚本,咱们直接拿下来用:
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginxgithub

赋予可执行的权限:
chmod +x /etc/init.d/nginxweb

启动Tengine:
/etc/init.d/nginx startsql

这样基本上就配置好了Tenginenpm

PHP的编译安装

PHP的官网:http://php.net/
安装的php版本为5.6.8

下载源码包

wget http://cn2.php.net/distributions/php-5.6.8.tar.bz2

tar jxvf php-5.6.8.tar.bz2

cd php-5.6.8

编译

./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/extends \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-mysql=shared,mysqlnd \
--enable-sockets \
--with-mcrypt \
--with-curl \
--with-openssl \
--with-mysql \
--enable-mbstring

编译参数带上了--enable-fpm,这样编译时就会自动为咱们编译php-fpm
--with-config-file-path 指定php的配置文件目录
--with-config-file-scan-dir 指定php的其它配置文件放到哪一个目录下
一样,执行configure的时候会出现各类依赖库未找到的错误,仍是能够经过apt-get install libxxx的方式添加这些库,或者本身下载源码编译安装这些库。

make
make test
make install

配置PHP

把php的一些二进制执行文件软连接到系统执行目录中
ln -s /usr/local/php/bin/php /usr/local/bin/php
ln -s /usr/local/php/bin/phpize /usr/local/bin/phpize

进入php的配置文件
cd /usr/local/php/etc

从源码包中复制php.ini-development或者php.ini-production文件到此目录下,并修更名字为php.ini
其中
php.ini-development 适合开发环境下的php配置文件
php.ini-production 适合生产环境下的php配置文件

打开php-fpm的配置文件,作以下修改:
vim php-fpm.conf

//php-fpm程序运行的pid记录文件
pid = /var/run/php-fpm.pid

//在[www]区域的配置
user = www-data
group = www-data
//这样设置的目的是让tengine与php-fpm经过这个socket地址进行通讯
listen = /var/run/php-fpm.socket
//建立socket地址时的用户、组、权限,
//最好以tengine运行的用户一致,这样tengine才有权限与php-fpm进行通讯
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

编译php扩展及配置

进入php源码包中的ext目录
cd php-5.6.8/ext

举个例子吧,假如说咱们要编译一个mcrypt扩展
进入mcrypt模块的源码目录
cd mcrypt

执行phpize来动态添加php扩展
phpize

编译安装
./configure
make
make install

安装好后,咱们以前编译php时设置的--with-config-file-scan-dir就派上用场了,
进入设置的/usr/local/php/etc/extends目录,若是没有extends目录能够mkdir一个。
新建一个mcrypt.conf文件
vim mcrypt.conf
写入

extension=mcrypt.so

这样的话,若是之后咱们不须要mcrypt扩展时,能够直接删除/usr/local/php/etc/extends/mcrypt.conf配置文件便可。

php-fpm的启动脚本

php源码包中已自带php-fpm的启动脚本,咱们将它复制到/etc/init.d/
cp php-5.6.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

修改php-fpm文件
vim /etc/init.d/php-fpm

prefix=/usr/local/php
//这里的pid文件路径就是上面(php-fpm.conf)配置文件中所设置的pid
php_fpm_PID=/var/run/php-fpm.pid

赋予可执行的权限:
chmod +x /etc/init.d/php-fpm

启动php-fpm:
/etc/init.d/php-fpm start

这样phpphp-fpm的配置基本就完成了,关于如何配合Tengine使用在最下面会说。

NODE.JS的安装

官网 https://nodejs.org

下载源码

wget http://nodejs.org/dist/v0.12.2/node-v0.12.2.tar.gz

tar zxvf node-v0.12.2.tar.gz

cd node-v0.12.2

编译安装

nodejs的编译安装不须要太多配置

./configure
make
make install

这样npmnode 就一并安装好了

Tengine代理PHP-FPM

进入先前设置好的Tengine的vhost配置目录:
cd /usr/local/nginx/conf/vhost

假设咱们的web目录是在/opt/www,域名为test.com
新建一个test.com.conf配置文件

server {
    #访问端口
    listen       80;
    #所绑定的域名
    server_name test.com;
    #access_log  logs/host.access.log  main;

    location / {
        root /opt/www;
        index index.php index.html;
    }
    #设置php文件的代理转发
    location ~ \.php$ {
        root /opt/www;
        #转发至php-fpm配置文件中设置的socket通讯地址
        fastcgi_pass   unix:/var/run/php-fpm.socket;
        fastcgi_index  index.php;
        #所访问的php文件路径地址
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

配置文件建立成功后执行
/etc/init.d/nginx reload
便可

Tengine代理NODE.JS

假设咱们运行了一个端口号3000的node.js的web应用
咱们的域名为testnode.com
新建一个testnode.com.conf配置文件

#设置转发池
upstream testnode {
    #咱们的nodejs应用地址,可添加多个
    #这块的意义是,咱们能够启动多个相同的nodejs应用,并设置不一样的端口号,或者有多台同服务的nodejs服务器,负载均衡
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    ....
    keepalive 64;
}

server {
    listen       80;
    server_name testnode.com;

    location / {
        #这块设置的意义是当全部请求转发至nodejs应用时,除了客户端发来的请求头以外再携带如下这些头信息
        proxy_set_header X-Real-IP remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Connection "";
        #http1.1比http1.0的效率要高的多
        proxy_http_version 1.1;
        #填上面定义的转发池名称
        proxy_pass http://testnode;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

配置文件建立成功后执行
/etc/init.d/nginx reload 便可

相关文章
相关标签/搜索