在linux中由于存在yum这种包管理方式,使得安装部署软件变得十分简单易用,但在某些特定情况下,由于有特殊需求,需要基于编译这种方式来定制化安装所需要的软件,以能特供自己所需的功能,此处我们来基于编译实现LAMP环境,来揭开编译安装这种听起来高大上的安装方式。


首先来交代一下实验环境

系统:CentOS 7.2

IP地址::172.16.38.100

httpd版本:httpd-2.4.10

php版本:php-5.4.40

mysql版本:mysql-5.5.33


一、编译安装httpd:


1、首先准备编译安装所需要的开发包组:

yum -y groupinstall "Development Tools"
yum install pcre-devel

httpd2.4依赖于apr和apr-util,apr全称为apache portable runtime(apache可移植运行库),这是一个可以使apache跨平台运行的底层库文件。


2、安装apr-1.5.0.tar.bz2

tar xf apr-1.5.0.tar.bz2

LAMP之编译安装_LAMP


执行configure脚本开始编译:

./configure --prefix=/usr/local/apr


结束后,如没有error之类的错误提示,则执行

make && make install


3、安装apr-util-1.5.3:

tar xf apr-util-1.5.3.tar.bz2

LAMP之编译安装_httpd_02


执行configure脚本开始编译:

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr


结束后,如没有error之类的错误提示,则执行

make && make install


准备工作就绪,下面开始正式编译httpd2.4


4、解压httpd源码包:

tar xf httpd-2.4.10.tar.bz2

LAMP之编译安装_httpd_03

执行configure脚本开始编译:

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event


此处做一些简单说明:

--prefix=/usr/local/apache 安装路径
--sysconfdir=/etc/httpd24 配置文件路径
--enable-so 允许运行时加载DSO模块
--enable-ssl 如果不加载将无法使用使用https
--enable-cgi 允许使用cgi脚本
--enable-rewrite 支持URL重写机制
--with-zlib 支持网络通用压缩库
--with-pcre 支持pcre
--with-apr=/usr/local/apr 指定apr的安装路径
--with-apr-util=/usr/local/apr-util/ 指定apr-util的安装路径
--enable-modules=most 启用大多数常用的模块
--enable-mpms-shared=all 启用MPM所有支持的模式
--with-mpm=event 默认使用enevt模式


结束后,如没有error之类的错误提示,则执行

make && make install


因为编译过程中,没有明确的成功提示,可在每一步操作完成之后使用命令:

echo $?


来查看此前一步命令的执行结果返回值,返回1即为成功;


5、安装后所需配置:


a)导出头文件:

ln -sv /usr/local/apache24/include/ /usr/include/httpd
"/usr/include/httpd" -> "/usr/local/apache24/include/"


b)更新环境变量:

# vim /etc/profile.d/httpd24.sh

LAMP之编译安装_httpd_04

而后执行:

. /etc/profile.d/httpd24.sh

使环境变量生效


c)导出man手册文件

vim /etc/man_db.conf

LAMP之编译安装_httpd_05


d)启动httpd服务:

LAMP之编译安装_mysql_06

至此,httpd安装完成。


二、基于通用二进制格式安装mariadb-5.5.46:


1、下载通用二进制格式的mariadb包,解压到/usr/local/目录,并将解压目录软连接至mysql目录,便于管理

LAMP之编译安装_mysql_07


2、查看解压出来的目录中,关于安装的说明文件:

less INSTALL-BINARY

LAMP之编译安装_httpd_08


3、添加系统用户:mysql,作为mariadb运行时的用户,修改mysql目录的属组属主为mysql,是的mariadb对该目录具有相应的权限:

LAMP之编译安装_LAMP_09

LAMP之编译安装_httpd_10


4、指定数据库存放目录,且目录的属主属组为mysql:

LAMP之编译安装_httpd_11


5、修改mariadb配置文件,修改其中的数据目录为上述目录:

LAMP之编译安装_LAMP_12

vim /etc/my.cnf

LAMP之编译安装_mysql_13


6、执行数据库初始化脚本:

scripts/mysql_install_db --user=mysql --datadir=/mydata/data --skip_name_resolve

LAMP之编译安装_LAMP_14


7、导出PATH环境变量、库文件、头文件:

PATH环境变量:

vim /etc/profile.d/mysql.sh

LAMP之编译安装_LAMP_15


读取文件使之生效:

. /etc/profile.d/mysql.sh


库文件:

vim /etc/ld.so.conf.d/mysql.conf

LAMP之编译安装_mysql_16


头文件:

ln -sv /usr/local/mysql/include/mysql/ /usr/include/mysql

LAMP之编译安装_mysql_17


8、提供服务脚本,使得可以使用systemctl来管理数据库服务:

cp mysql.server /etc/rc.d/init.d/mysqld

LAMP之编译安装_httpd_18


9、执行数据库安全初始化命令,以增加其安全性:

mysql_secure_installation

LAMP之编译安装_LAMP_19


10、启动mysql:

mysql

LAMP之编译安装_LAMP_20

此时可见,mysql启动成功,二进制安装mariadb到此结束;


三、编译安装php-5.4.40:

php与httpd结合的方式有两种:基于module方式和基于fastcgi方式,具体哪种方式需要在编译安装php时启用对应的选项即可,此处以fastcgi(php-fpm)的方式为主。


1、安装php编译中所依赖的程序包:

yum install libxml2-devel libmcrypt-devel bzip2-devel freetype-devel

LAMP之编译安装_httpd_21

简单说明:
libxml:使php支持xml格式的文件输出
libcrypt:使php支持加密功能
bzip2:使php支持以压缩方式传输数据
freetype:使php支持多字体

注:实际中,需要根据需求来安装所需的包,以使php实现不同的功能


2、解压php-5.4.40.tar.bz2:

tar xf php-5.4.40.tar.bz2

LAMP之编译安装_httpd_22



3、编译安装:

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-xml --with-gd --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc/php.ini --with-config-file-scan-dir=/etc/php.d --with-bz2
简要说明:
--prefix  指明安装路径
--with-mysql  指明依赖的mysql的路径
--with-openssl  指明依赖的openssl,用于支持ssl通信
--with-mysqli  指明依赖的mysqli,mysqli是mysql的另外一个访问接口
--with-freetype-dir  用于支持显示的字体,可能会要安装freetype-devel
--with-png-dir  用于显示支持png格式的图片
--with-jpeg-dir  用于显示支持jpeg格式的图片
--enable-mbstring  用于让mysql支持中文
--with-zlib  用于支持压缩功能
--with-libxml  用于分析xml格式
--enable-xml  表示支持xml
--enable-sockets  表示支持以sockets方式进行通信
--with-apxs2  指明apxs文件的路径,apxs文件作用是第三方模块可以借助该文件与httpd建立关联关系
相当于一个衔接器的作用
--with-mcrypt  表示支持加密库
--with-config-file-path=/etc  表示配置文件的存放路径
--with-config-file-scan-dir=/etc/php.d  表示还要扫描哪个目录下的.ini结尾的文件作为配置文件的组成部分
--with-bz2 表示支持bz2压缩
 
如果httpd使用的MPM为worker或event,则需要启用该选项
--enable-maintainer-zts  当启用的MPM为worker或event时,需要启动该选项,因为此处我们是以prefork的MPM,所以不用此项
 
--with  之类的选项,会到对应依赖的文件的默认安装路径下去寻找,如果程序不是安装在默认路径下,则需要用=等号指定位置,如果没有安装对应程序,则需要手动安装,一般编译时用到的程序是程序的devel包
 
如果httpd与php结合的方式为php-fpm,则需要将--with-apxs2=/usr/local/apache24/bin/apxs去掉,然后启用--enable-fpm选项


编译过程中可能会出现错误:如下

LAMP之编译安装_LAMP_23

安装对应包即可:

yum -y install libjpeg-devel

又是错误:

LAMP之编译安装_LAMP_24

yum install libpng-devel


全程无错误后执行:

make && make install


4、拷贝配置文件:

pwd
/usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf


修改配置文件:

vim php-fpm.conf

LAMP之编译安装_httpd_25


5、启动php-fpm

/usr/local/php/sbin/php-fpm

LAMP之编译安装_httpd_26

至此php-fpm顺利启动


四、修改httpd配置文件,使其支持代理php请求至php-fpm


1、修改httpd配置文件,启动反向代理

vim /etc/httpd24/httpd.conf

开启下列模块:

LAMP之编译安装_LAMP_27


重启httpd服务:

apachectl start

LAMP之编译安装_LAMP_28

httpd服务启动成功


2、在httpd文件中加入如下配置,将用户请求的所有以.php结尾的资源全部反代给php-fpm处理:

vim /etc/httpd24/httpd.conf

LAMP之编译安装_httpd_29


创建测试页:

vim /usr/local/apache24/htdocs/index.html

LAMP之编译安装_httpd_30


创建php测试目录:

mkdir /test/www/ -pv

LAMP之编译安装_LAMP_31

vim /test/www/index.php

LAMP之编译安装_LAMP_32


测试效果:

LAMP之编译安装_mysql_33


LAMP之编译安装_LAMP_34

至此,顺利将前端php请求送至php-fpm处理,而后将处理结果返回至客户端。