编译安装LAMP[两种结合方式]

本文旨在实践编译安装LAMP环境,搭建Zblog系统,使用Xcache为PHP加速,分离PHP与Apache Server


LAMP基础知识

  1. Linux + Apache + MySQL[MariaDB] + PHP[Perl|Pyton] 是一套基础的web环境;

  2. Apache有2.2版本,和最新的2.4版本,2.4版本支持Event MPM可用作生产环境,在http2.2中有3种MPM,为不同的进程文件,切换需要重启Apache服务;而2.4中MPM做成了DSO,可动态加载切换;

  3. Apache、MaraiaDB、PHP安装都不困难,困难的是需要解决协同合作的关系,即不能成为独立个体

    <a> Apache要能够将用户请求的动态页面如index.php交由PHP来执行并返回结果;

    <b> PHP能将index.php中数据库操作的指令正确提交给MariaDB来处理,并返回结果;

    <c> 最终的结果能够被Apache封装成报文形式回应客户端Browser

4.  Apache和PHP结合的方式有, 参考博文《Apache+PHP3种结合方式》

    <a> CGI方式

    <b> Apache加载动态模块结合的方式,

    <c> FastCGI方式

5.  PHP和MariaDB结合方式简单,只需要安装php-mysql这种插件即可,通过php-mysql插件的函数,在php页面中使用这种函数即可连接MariaDB数据库。

6.  Apache2.4需要依赖于apr1.40,apr-tuil1.40


实践1:Apache+PHP模块集合,MariaDB独立安装

实验拓扑


步骤1.编译安装Apache2.4

1.1 准备编译环境以及需要用到的包

yum  groupinstall "Development Tools" "Server Platform Development" -y
yum -y install pcre-devel zlib-devel

Apache2.4依赖于apr1.4以上版本,预先下载好apr-1.5.2、apr-util-1.5.4、httpd-2.4.17.tar.gz到/download目录并解压

wKioL1YsVmqCYJtHAAFaOs3JOVQ810.jpg

1.2 编译安装apr-1.5.2

./configure --prefix=/usr/local/apr
make && make install

1.3 编译安装apr-util-1.5.4

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make && make install

1.4 创建apache用户和组,让web服务进程运行在apache身份避免越权!

 groupadd -r apache
 useradd -r -g apache -s /sbin/nologin -M apache

1.5 编译安装httpd2.4

./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=prefork
make && make install

1.6 编译参数的相关说明

--prefix 指定httpd2.4的安装路径
--sysconfdir 指定配置文件路径
--enable-so 启动shared object共享对象
--enable-ssl 启用ssl,借助于此可以实现HTTPS访问
--enable-cgi 启用CGI,可以实现CGI脚本执行
--enable-rewrite 启用Rewrite重写,能够实现诸如301重定向的功能,以来PCRE包
--with-zlib
启用zlib压缩
--with-pcre 启用PCRE
--with-apr 指定apr的路径,httpd2.4依赖apr1.4版本以上,所以要指明
--with-apr-util 指定apr-util的路径,同上
--enable-modules 启用模块加载
--enable-mpms-shared=all http2.4上prefork、worker、event是模块化的,可以动态加载
--with-mpm=prefork 指明默认的httpd2.4 MPM,即运行在prefork模型下


1.7 注意点:

在http2.2上,MPM有prefork、worker、event[测试版],切换不同的MPM模型需要重启httpd进程,其实本质上不同的MPM对应的进程是不同的底层文件,而http2.4上把3种MPM做成了模块的形式,可以动态加载实现。

1.8 编辑配置文件/etc/http24/httpd.conf

wKiom1YsXISzH4z4AAG0xF_cSF8840.jpg

到此,我们的apache2.4已经全部安装成功。

1.9 启用并测试

/usr/local/apache/bin/apachectl start 
由于目前还没有写入执行脚本,所以这里我们直接使用绝对路径来启动

wKioL1YsXWWgqR6MAAGFypctKlc006.jpg

wKiom1YsXduiOEE2AAD6VT5m_yE146.jpg

1.10 注意点:

这里出现的问题:我这台虚拟机默认安装了http2.2,所以当我编译安装好http2.4后,我使用service httpd start成功后,发现竟然显示的是2.2的默认页面,经过排查后才解决!

1、为了方便httpd2.4的启动,我将http24的执行目录添加到了环境变量

echo "export PATH=/usr/local/mysql/bin:$PATH">>/etc/profile
source /etc/profile
apachectl start

2、启动时候由于没有指定ServerName,所以默认使用主机名,解决方法

vi /usr/local/apache/conf
ServerName localhost:80
apachectl restart

步骤2.通用二进制安装MariaDB

    之前已经部署过,这里不再赘述,只需要在192.168.1.123上同样部署即可

    参考《MariaDB二进制安装及基本管理》

    需要说明的是,在我们架构中一共2台服务器,前端是Apache+PHP Server[192.168.1.122],后端是MariaDB Server[192.168.1.123],这需要前端的PHP通过php-mysql插件中的mysql_connect函数连接到后端的MariaDB Server上的数据库,而默认MariaDB不允许远程连接的,此处我们先进行授权吧!

mysql -h localhost -u root -pzxczxc 
MariaDB > GRANT ALL ON *.* to 'root'@'%' identified by 'zxczxc' WITH GRANT OPTION;
MariaDB > FLUSH PRIVILEGES;
MariaDB > SELECT user,host,password FROM mysql.user;

wKiom1YscS_xWDxhAALGiYOVfPA437.jpg

在122这台机器上,我们安装了MariaDB-client后,进行TCP/IP方式的数据库连接呢!

mysql -h 192.168.1.123 -u root -pzxczxc

wKioL1YscciTaIQYAAIpkr3Rogw325.jpg


至此基本架构已经完成,只需要编译安装PHP即可!


步骤3.编译安装PHP[还是在192.168.1.122这台服务器上]

值得一提的是:PHP在这套环境中作用是“承上启下”,

能负责接受和处理Apache提交过来的php请求,这需要apache-php以模块的方式加载运行;

对于某些php请求需要操作数据库的,PHP要负责和后端MariaDB Server通信,这需要php-mysql插件;

3.1 准备环境

yum -y groupinstall "Desktop Platform Development" 
yum -y install bzip2-devel libmcrypt-devel
yum -y install xml2

3.2 编译安装

wget 
tar -zxvf php-5.5.30.tar.gz
cd php-5.5.30
./configure --prefix=/usr/local/php --with-openssl  --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-bz2 --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d   --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
make && make install

请注意编译这里可能会报错,因为一些组件支持的开启需要依赖相关包,需要解决依赖关系。如:

wKioL1YsefzztVnRAAEU88R_eDk467.jpg

yum -y install libxml2 libxml2-devel

有时候依赖的包可能需要用到 -devel附包,指定好EPEL源安装即可!

这里我总结一下我遇到的几个问题,附注:我是用的YUM源、EPEL源均为Aliyun的

Error1

configure: error: xml2-config not found. Please check your libxml2 installation.

解决办法:

yum -y install libxml2 libxml2-devel

Error2

configure: error: Please reinstall the BZip2 distribution

解决办法:

yum -y install bzip2 bzip2-devel

Error3

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

解决办法:

yum -y install libmcrypt libmcrypt libmcrypt-devel

3.4 编译参数的相关说明

--prefix 指定php安装路径
--with-openssl 启用OpenSSL
--enable-mbstring
支持大字节字符串
--with-freetype-dir 支持freetype,freetype是一个可移植的字体引擎
--with-jpeg-dir 支持JPEG
--with-png-dir 支持PNG
--with-zlib 支持zlib压缩,依赖于zlib包,有可能需要zlib-devel包
--with-bz2 支持bz2压缩,依赖bz包
--with-libxml-dir=/usr 支持libxml,能简单方便的提供对XML文件的各种操作
--enable-xml 启用xml
--enable-sockets 启用sockets套接字
--with-apxs2= apxs是一个专门用来加载第三方应用模块的实用程序
--with-mcrypt 支持加密
--with-config-file-path 设置PHP主配置文件路径
--with-config-file-scan-dir 设置PHP分段式配置文件php.d的位置
--enable-maintainer-zts 启用线程安全,对于prefork而言是不需要的,但是之前编译httpd2.4装了3种MPM,为了支持worker、event的安全,所以启用

请注意:

如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

3.5 提供PHP配置文件

cp php.ini-production /etc/php.ini

3.6 编辑Apache配置文件以支持php,并重启Apache服务

vim /etc/httpd/httpd.conf
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps --->增添对php页面的支持
<IfModule dir_module>
    DirectoryIndex Index.php index.html       --->修改默认主页index.php       
</IfModule>

3.7 编辑php测试页面,验证Apache+PHP Server和后端MariaDB Server能够协同工作

<?php
  $link = mysql_connect('192.168.1.123','root','zxczxc');
  if ($link)
      echo "Success...";
  else
      echo "Failure...";

      mysql_close();
?>

成功可以访问!

wKioL1YsiurgL5m4AAEyDye_BcE046.jpg

注意点:

在这里我遇到一个错误,一开始打开192.168.1.122/mysql.php页面总是提示网络连接错误,最后排查出来是由于httpd.conf中加载的php_mod使用的绝对路径modules/libphp5.so,而父目录/usr/local/apache并不在环境变量中,使用

export PATH=/usr/local/apache:$PATH

即解决问题了。

实践2:在LAMP环境下搭建一个ZBLOG博客系统

1.1 下载zblog文件解压缩至网站目录

cd /usr/local/apache/
tar -xvf zblog.tar

1.2 访问页面进行安装

wKiom1YskEPjqNzDAAKewCiofvE907.jpg

竟然需要用到php-curl,这咋办?我编译的时候没有启用curl,好在PHP的phpize可以动态的加载插件,省得重新编译!前提你有源码包,操作如下:

cd /download/php-5.5.30/ext/curl/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config

wKioL1YskXPxbwY2AAD6EF7BO2Q202.jpg

把该目录下的curl.so拷贝到你php.ini中的extension_dir指向的目录中,修改php.ini,在最后添加一句extension=curl.so 重启apache即可咯


1.3 选择数据库,此处需要连接远程数据库

wKiom1YslFLCnLyEAAIzavc8Mpg349.jpg

1.4 数据库信息写入,完成ZBLOG系统安装

wKioL1YslJCxGIRZAAEmR-V3YG0864.jpg1.5 访问测试,一切正常,至此LAMP环境下ZBLOG搭建完毕!

wKioL1Ysltmya5r2AAFPEwsEx8M784.jpg


实践3:使用Xcache,为PHP加速

默认情况下,Aapche将动态请求php的交由php引擎来执行,每一次请求都会去重新执行一遍,效率极其低下。而PHP加速器能够缓存这些执行过程,将执行结果缓存到内存中,起到加速php的效果。


加速前,使用ab命令对当前的zblog进行压力测试

wKiom1YsnJiw7EGiAALnQp3kRYE351.jpg

1.1 编译安装

PHP一个很好的机制在于使用phpize能够对编译时未加载的插件进行动态编译,然后进行简单的配置即可加载该php插件,而省去了重新编译php的时间!非常方便。

tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php/bin/phpize         ---->phpize是执行命令,
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install

1.2 安装结束后,给出了编译后的php插件目录

wKioL1YsmpqwPKp-AAEG0vfT_xk187.jpg


1.3 编辑php.ini,整合PHP和Xcache

mkdir /etc/php.d
cp /download/xcache-3.2.0/xcache.ini /etc/php.d
vi /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so

1.4 重启apache,再次进行压力测试,可以明显看出来响应提高很多!

wKioL1YsnLLCBV1oAALbjm1acTs524.jpg

你可能感兴趣的:(apache,mysql,PHP,mariaDB)