CentOS 6.6编译安装Tengine 2.1.0、PHP 5.5.22、MariaDB 5.5.41

前言

本文主要大致介绍CentOS 6.6 下编译安装Tengine、PHP、MariaDB。面向有Linux基础且爱好钻研的朋友。技艺不精,疏漏再所难免,还望指正。

测试环境简介:

系统: CentOS 6.6 X86_64,最小化安装
IP: 192.168.1.10
Tengine: 2.1.0(基于Nginx1.6.2)
MariaDB: 5.5.41
PHP: 5.5.22

1、准备工作

1.1、系统硬件准备

尽管Linux能最大化发挥硬件资源,但RHEL/CentOS随着版本增加对最低硬件的配置也越来越高[1]。RHEL7/CentOS最低要求内存最小 1GB,建议每个逻辑 CPU 1 GB。但如果系统为CentOS7,硬件内存小于1G,比如512M,而且没有配置交换分区,建议先配置SWAP,以防内存不足导致数据库启动失败或进程异常退出。配置添加SWAP方法参考《Linux下添加swap分区》。

1.2、系统软件准备

如果是最小化安装,比如VPS、云主机一般就是最小化安装。需要配置系统至方便易用。

安装EPEL第三方软件库并更新系统至最新:

安装必要实用基础软件:

安装开发工具:

安装依赖软件:

1.3、所需软件及各软件简介

安装需要用到的软件有nginx、mysql、php、pcre、openssl、zlib、cmake、mcrypt、yasm、t1lib、libgd、libvpx、tiff、libpng、libjpeg、freetype。这些软件的简介如下:

(1)Tengine

官方介绍:“Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。”

Nginx

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。
官方下载地址:http://nginx.org/en/download.html

(2)PHP

PHP,这里略去十万字…
官方下载网址:http://cn2.php.net/downloads.php
最新版下载地址:http://cn2.php.net/distributions/php-5.5.22.tar.bz2

(3)MariaDB
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。现在MariaDB官方主推最新版MariaDB 10,其对应MySQL 5.6,但它在文件结构、一些功能上已经和MySQL 5.6大为不同,查看官方博文《MariaDB vs. MySQL》、《MariaDB 10.0 and MySQL 5.6》。如果用于生产环境,建议使用稳定版5.5。
官方下载地址:https://downloads.mariadb.org/;MariaDB 5.5;下载页面:https://mariadb.com/kb/en/mariadb/what-is-mariadb-55/

(4)PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。PCRE被广泛使用在许多开源软件之中,最著名的莫过于Apache HTTP服务器和PHP脚本语言。
官方网址:http://www.pcre.org/

(5)OpenSSL
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。该程序出现安全漏洞时比较危险,建议从官方网站下载最新版。
官方下载网址:http://www.openssl.org/source/

(6)zlib
zlib是提供数据压缩用的函式库,使用DEFLATE算法.zlib是一种事实上的业界标准,以至于在标准文档中,zlib和DEFLATE常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库,包括: Linux核心:使用zlib以实作网络协定的压缩、档案系统的压缩以及开机时解压缩自身的核心;libpng,用于PNG图形格式的一个实现,对bitmap数据规定了DEFLATE作为流压缩方法。Apache:使用zlib实作http 1.1;OpenSSH、OpenSSL:以zlib达到最佳化加密网络传输。
官方下载网址:http://zlib.net/

(7)CMake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。这里用来编译MySQL或MariaDB
官方网址:http://www.cmake.org/

(8)mcrypt
mcrypt 是 php 里面重要的加密支持扩展库,Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示。
下载地址:http://mcrypt.sourceforge.net/

(9)yasm
In computing, Yasm is an assembler and disassembler for the Intel x86 architecture. It can be used to write 16-bit, 32-bit (IA-32) and 64-bit (x86-64) programs. Yasm is a full rewrite of Netwide Assembler (NASM). Yasm can generally be used interchangeably with NASM and supports the x86 and x86-64 architectures. It is licensed under a revision of the BSD licenses. As of 2011 it was developed by Peter Johnson and Michael Urman.
下载地址:http://yasm.tortall.net/Download.html
(10)libgd
GD 是一个开源的图像处理库,支持 PNG/JPEG/GIF以及其他格式的图像。GD一般被用来创建图表、图形、缩略图以及其他图像相关的处理操作。
下载地址:http://libgd.bitbucket.org/

(11)libpng
libpng 软件包包含 libpng 库.这些库被其他程式用于读写png文件. PNG 库是用来创立和操作PNG 格式的图像文件.PNG 格式是设计来替代GIF,他对于更小范围的TIFF(标记图象文件格式)来说, 有了非常多的进步和拓展并且减少了关于专利权的麻烦.
下载地址:http://www.libpng.org/pub/png/libpng.html

(12)libvpx
libvpx 是一个开源的VP8编码解码器。VP8:高质量的视频编码。

(13)FreeType
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。FreeType 2被设计为一种占用空间小的、高效的、高度可定制的、并且可以产生可移植的高品质输出(符号图像)。可以被用在诸如图像库、展出服务器、字体转换工具、图像文字产生工具等多种其它产品上。
官方网址:http://www.freetype.org/
下载页面网址:http://www.freetype.org/download.html

(14)LibJPEG
LibJPEG 是一个广泛使用的 JPEG 图像压缩库,采用 C 语言开发。
官方网址:http://www.ijg.org/

1.4、下载所需软件

下载前设置指定DNS,防止下载某些软件中提示域名无法解析而导致下载失败:

各软件一键下载:

注意:使用-c断点续传,-t参数表示重试次数。

1.5、配置防火墙

运行80、443、3306端口通过:

可以使用文字图形界面配置:

或者修改/etc/sysconfig/iptables,如下:

QQ20150207-1

修改后记得重启服务:

2、安装MariaDB

安装CMake:

添加mysql运行组及用户、创建数据库数据文件文件夹并授予合适权限:

Trip:/bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务。如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。为了系统安全,这里建议使用/bin/false。

编译、安装MariaDB:

由于系统自带了MySQL配置文件,备份或删除它都可以:

初始化数据库,配置启动脚本:

配置MariaDB启动脚本:

把MariaDB加入系统环境变量:

把MariaDB的库文件链接到系统默认的位置,在编译PHP等软件时可以不用指定其库文件地址:

交互式设置数据库:

3、安装Tengine

创建Tengine(nginx)的用户和用户组:

安装PCRE:

安装OpenSSL:

安装zlib:

安装第三方模块ngx_http_accesskey_module以实现Nginx防盗链

修改config文件,替换其中 的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”.

我们可以在官方文档查看更多信息(http://nginx.org/en/docs/)。下面安装Tengine:

补充:–with-http_sub_module用于替换,非常有用(见Wiki)。–with-http_stub_status_module开启Nginx状态信息,非核心模块,可不加入。ngx-fancyindex是一个能做出类似apache漂亮索引的模块,可以修改起源代码下的template.h模板文件做出更漂亮的索引页面。–with-http_sysguard_module是一个过载保护模块;开启syslog日志功能需要在编译是添加参数–with-syslog,否则syslog不会生效。

到此,软件编译并安装完毕。

Tengine官方文档:http://tengine.taobao.org/documentation_cn.html

更多官方文档:nginx documentation

配置控制脚本或者从这里下载,其实这个服务脚本跟Nginx是一样的:

写入如下内容:

设置启动脚本、启动Nginx:

把Nginx加入系统变量:

测试,输出如下内容说明安装Tengine已经成功:

附注:Tengine命令行参数

  • ‘-m’ 选项
显示所有编译的模块,Tengine支持动态模块,static表示静态编译,shared表示动态编译(后面接的是动态模块的版本)。
  • ‘-d’ 选项
输出配置文件的内容,包括’include’的内容。
  • ‘-l’ 选项
显示所有支持的指令。

4、安装PHP

4.1、编译相关软件安装PHP

安装yasm:

安装mcrypt:

安装libvpx:

安装tiff:

安装libpng:

安装freetype:

安装jpeg:

安装libgd:

安装t1lib(FUUUU):

安装php:

注意:如果系统是64位,安装前请执行以下两条命令:

编译并安装PHP:

编译配置说明:

–enable-opcache:PHP5.5内置了Zend Opcache,即Optimizer+,是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件。现在,Zend 科技公司将 Optimizer+ 在 PHP License 下开源成为 Zend Opcache。Zend OPcache 通过 opcode 缓存和优化提供更快的 PHP 执行过程。它将预编译的脚本文件存储在共享内存中供以后使用,从而避免了从磁盘读取代码并进行编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。

更多编译信息请查看

编译、安装完成后结尾输出如下一段比较重要的信息:

安装结束。

4.2、配置PHP运行环境

复制php配置文件到安装目录:

备份系统自带配置文件:

添加软链接到 /etc目录:

拷贝模板文件为php-fpm配置文件:

添加软连接到 /etc目录:

以上几步写法合并如下:

修改PHP配置文件:

4.3、配置php-fpm

拷贝php-fpm脚本到启动目录,给予执行权限, 设置开机启动:

把php加入系统变量:

 

4.4、配置Tengine支持php

修改/etc/tengine.conf 配置文件,需做如下修改

5、测试

上述配置修改完毕,重启tengine,并启动php-fpm:

创建phpinfo文件,设置适当的目录权限。

浏览器查看,如果PHP文档配置没有错误,将输出如下内容:

QQ20150207-2

配置汇总

根目录: /opt/webserver/tengine/html/
Nginx配置文件: /opt/etc/tengine/conf/nginx.conf
PHP配置文件: /opt/etc/php/php.ini
PHP默认拓展文件夹:/usr/lib64/php/modules/
PHP拓展可放置于:/opt/php/lib/php/extensions/no-debug-non-zts-20121212
MySQL配置文件: /etc/my.cnf
MySQL程序安装路径: basedir=/opt/mysql
MySQl数据库存放目录: datadir=/data/mysql

 

问题汇总

(1)NOTICE: PHP message: PHP Warning:  Module ‘exif’ already loaded in Unknown on line 0

重复加载模块了,可以使用以下命令查询(参考):

(2)[22-Oct-2014 09:07:25] NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/imagick.so’ – /usr/lib64/php/modules/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0

很明显,没有正确加载拓展模块文件,请确认好php.ini的extensions_dir。

(3)PHP Warning:  PHP Startup: mhash: Unable to initialize module

PHP版本升级后模块没有重新编译,需要重新编译。

(4)版本升级时注意哪些问题?

建议把php-fpm服务关掉,否则容易出现使用旧模块,一些新模块无法替换。建议备份后删除旧模块重新编译。

参考资料及拓展阅读


【1】nginx documentation
【2】Red Hat Enterprise Linux 7.0 发行注记
【3】系统运维
【3】Opcache配置参考

发表评论