一、系统环境

1、更新系统

# yum update -y

2、查看系统版本

# lsb_release -a
LSB Version:    :base-4.0-ia32:base-4.0-noarch:core-4.0-ia32:core-4.0-noarch
Distributor ID:    CentOS
Description:    CentOS release 6.8 (Final)
Release:    6.8
Codename:    Final

二、安装前置依赖组件

1、准备编译环境

# yum install -y gcc gcc-c++ autoconf automake openssl openssl-devel pcre pcre-devel bzip2 lsof
# groupadd www-data
# useradd -s /sbin/nologin -g www-data www-data

升级GCC到4.8.5

# cd /usr/local/src
# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.gz
# tar zvxf gcc-4.8.5.tar.gz && rm -f gcc-4.8.5.tar.gz
# cd gcc-4.8.5
# ./contrib/download_prerequisites
# mkdir gcc-build-4.8.5 && cd gcc-build-4.8.5
# ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# make && make install
# reboot
附加信息:
--enable-languages表示你要让你的gcc支持那些语言,--disable-multilib不生成编译为其他平台可执行代码的交叉编译器。--disable-checking生成的编译器在编译过程中不做额外检查,也可以使用--enable-checking=xxx来增加一些检查。重启后执行gcc -v检查版本

2、PCRE准备

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx rewrite依赖于PCRE库,所以在安装Tengine前一定要先安装PCRE,最新版本的PCRE可在官网(http://www.pcre.org/)获取。具体安装流程为:

# cd /usr/local/src
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
# tar -zxvf pcre-8.40.tar.gz && rm -f pcre-8.40.tar.gz
# cd pcre-8.40
# ./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties --enable-jit
# make && make install
附加信息:
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。其中–prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱。
如果配置–prefix,如:./configure –prefix=/usr/local/test,可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。
用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。

3、Zlib准备

Zlib是提供资料压缩之用的函式库,当Tengine想启用GZIP压缩的时候就需要使用到Zlib(http://www.zlib.net/)。

# cd /usr/local/src
# wget http://zlib.net/zlib-1.2.11.tar.gz
# tar -zxvf zlib-1.2.11.tar.gz && rm -f zlib-1.2.11.tar.gz
# cd zlib-1.2.11
# ./configure
# make && make install

4、OpenSSL准备

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。,安装OpenSSL(http://www.openssl.org/source/)主要是为了让tengine支持Https的访问请求。具体是否安装看需求。

# cd /usr/local/src
# wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
# tar -zxvf openssl-1.0.2j.tar.gz && rm -f openssl-1.0.2j.tar.gz
# cd openssl-1.0.2j
# ./config zlib-dynamic enable-camellia
# make && make install
# make clean
# ./config shared zlib-dynamic enable-camellia
# make && make install
# rm -rf /usr/bin/openssl
# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

5、Jemalloc准备

jemalloc(http://www.canonware.com/jemalloc/)是一个更好的内存管理工具,使用jemalloc可以更好的优化Tengine的内存管理。

# cd /usr/local/src
# wget https://github.com/jemalloc/jemalloc/releases/download/4.4.0/jemalloc-4.4.0.tar.bz2
# tar -jxvf jemalloc-4.4.0.tar.bz2 && rm -f jemalloc-4.4.0.tar.bz2
# cd jemalloc-4.4.0
# ./configure
# make && make install
# echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
# rm -f /usr/local/lib/libstdc++.so.6.0.19-gdb.py
# ldconfig

三、安装Tengine

1、下载Tengine源码包

官网 http://tengine.taobao.org/
# cd /usr/local/src
# wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
# tar -zxvf tengine-2.2.0.tar.gz
# cd tengine-2.2.0

4、编译配置

# ./configure \
--prefix=/usr/local/nginx \
--user=www-data \
--group=www-data \
--with-pcre=/usr/local/src/pcre-8.40 \
--with-openssl=/usr/local/src/openssl-1.0.2j \
--with-zlib=/usr/local/src/zlib-1.2.11  \
--with-jemalloc \
--with-http_v2_module
# make && make install

如果想知道更多详细的编译参数的话可以执行./configure --help,会打印出所有的编译选项,可以按需添加或者禁用一些tengine模块,也可以在以后的使用中按需添加编译属性然后重新编译安装即可。

6、配置Tengine

make install之后会安装在/usr/local/nginx目录下,其中conf为tengine的配置文件目录,我们修改一下/usr/local/nginx/conf/nginx.conf这个配置文件:
如果有像Apache的vhost需求的话,可以在conf目录下新建一个文件夹vhost,然后所有虚拟主机的配置文件都放到vhost这里面:

# cd /usr/local/nginx/conf
# mkdir vhost
# vi nginx.conf

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

#Tengine的进程以www-data用户启动
user www-data;
#自动以CPU核心数启动相应数量的进程
worker_processes auto;
#开启gzip支持
gzip on
#pid打开
pid        logs/nginx.pid;
events {
    use epoll;
    worker_connections  1024;
}
server {
        #设置默认访问的server(default是指通过ip或者servername未定义的域名进行访问时就走到这个server)
        listen       80 default;
        #默认访问的路径
        root root;
        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;
        }
    }
# 开启HTTP2
# HTTPS server
        listen       443 ssl http2;
#引用其他的vhost配置文件
include vhost/*.conf;

8、启动,设置服务

https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/下载脚本
将以上脚本保存到/etc/init.d/nginx文件,并修改两个地方:

  • nginx="/usr/sbin/nginx" 修改成nginx执行程序的路径。本例中为/usr/local/nginx/sbin/nginx
  • NGINX_CONF_FILE="/etc/nginx/nginx.conf" 修改成配置文件的路径。本例中为/usr/local/nginx/conf/nginx.conf

保存后,添加权限和自启:

# chmod +x /etc/init.d/nginx
# chkconfig --add nginx
# chkconfig nginx on
# service nginx start

8、查看Jemalloc是否生效

# lsof -n | grep jemalloc
nginx     18650     root  mem       REG      252,1  7164263    1583484 /usr/local/lib/libjemalloc.so.2
nginx     18651 www-data  mem       REG      252,1  7164263    1583484 /usr/local/lib/libjemalloc.so.2
nginx     18652 www-data  mem       REG      252,1  7164263    1583484 /usr/local/lib/libjemalloc.so.2

若没有返回则表示没有生效,需要检查

四、安装PHP7

官网 http://php.net/
中文社区 http://www.php7.site/

1、安装依赖

# yum install -y gcc gcc-c++ make cmake bison autoconf wget lrzsz libtool libtool-ltdl-devel freetype-devel libjpeg libjpeg-devel libpng-devel gd-devel python-devel patch openssl* openssl openssl-devel ncurses-devel bzip* bzip2* unzip zlib-devel libevent2* libxml* libxml2-devel libcurl* curl-devel readline-devel libmcrypt* mhash* mcrypt

2、下载编译

# cd /usr/local/src
# wget http://jp2.php.net/distributions/php-7.0.15.tar.bz2
# tar jxvf php-7.0.15.tar.bz2 && rm -f php-7.0.15.tar.bz2
# cd php-7.0.15
# ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/extends \
--enable-inline-optimization \
--enable-opcache \
--enable-session \
--enable-fpm \
--enable-force-cgi-redirect \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pdo-sqlite \
--with-sqlite3 \
--with-gettext \
--enable-mbregex \
--enable-mbstring \
--enable-xml \
--with-iconv \
--with-mcrypt \
--with-mhash \
--with-openssl=/usr/local/ssl \
--enable-bcmath \
--enable-soap \
--with-xmlrpc \
--with-libxml-dir \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-sockets \
--with-curl \
--with-zlib-dir=/usr/local/src/zlib-1.2.11 \
--with-pcre-regex=/usr/local/pcre \
--enable-zip \
--with-bz2 \
--with-gd \
--enable-gd-native-ttf \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-readline \
--with-fpm-user=www-data \
--with-fpm-group=www-data
# make && make install

3、建立配置文件

# cp php.ini* /usr/local/php/etc/
# cd /usr/local/php/etc/
# cp php.ini-production php.ini
# cp php-fpm.conf.default php-fpm.conf
# cp php-fpm.d/www.conf.default php-fpm.d/www.conf

4、配置php.ini

# 文件上传大小 
upload_max_filesize = 10M
# 开启opcache,默认是0
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1

5、配置php-fpm.conf

; 去掉里分号,方便以后重启。建议修改
; Default Value: none
; 下面的值最终目录是/usr/local/php/var/run/php-fpm.pid
; 开启后可以平滑重启php-fpm
pid = run/php-fpm.pid

6、配置www.conf(在php-fpm.d目录下)

; 设置PHP监听
; 根据nginx.conf中的配置fastcgi_pass unix:/var/run/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

保存配置文件后,检验配置是否正确的方法为:

# /usr/local/php/sbin/php-fpm -t

如果出现诸如 test is successful 字样,说明配置没有问题。另外该命令也可以让我们知道php-fpm的配置文件在哪。
将php编译生成的bin目录添加到当前Linux系统的环境变量中:

# echo -e '\nexport PATH=/usr/local/php/bin:$PATH\n' >> /etc/profile && source /etc/profile

7、建立php-fpm的启动脚本

php源码包中已自带php-fpm的启动脚本,我们将它复制到/etc/init.d/,并添加权限

# cd /usr/local/src/php-7.0.15
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on

启动php-fpm:

# service php-fpm start

五、安装MariaDB5.5

官网:https://mariadb.org/

1、前期准备

# groupadd -r mysql
# useradd -g mysql -r -M -s /sbin/nologin mysql
# mkdir /mariadb
# chown -R mysql:mysql /mariadb

2、安装依赖组件

# yum -y install gcc gcc-c++ make cmake ncurses* libxml2 libxml2-devel openssl-devel bison bison-devel

3、编译安装

# cd /usr/local/src
# wget https://downloads.mariadb.org/interstitial/mariadb-5.5.54/source/mariadb-5.5.54.tar.gz
# tar -zxvf mariadb-5.5.54.tar.gz && rm -f mariadb-5.5.54.tar.gz
# cd mariadb-5.5.54
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mariadb -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATEDX_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mariadb.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
# make && make install

4、配置

# cd /usr/local/mysql
# chown -R mysql:mysql *
# scripts/mysql_install_db --datadir=/mariadb --user=mysql
# chown -R root *
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# cp support-files/my-huge.cnf /etc/my.cnf
# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ln -sv /usr/local/include /usr/include/mysql
# echo 'MANPATH /usr/local/mysql' >> /etc/man.config
# service mysqld start