一、LAMP简介

    LAMP是linux apache mysql php组合起来的缩写,起源于英国,指通过一组软件来搭建起来运行动态网站或服务器的平台!随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的i_f48.gif,LAMP现在已经是最强大的网站解决方案.

    LAMP这个名词最早出现在1998年,用来指代Linux操作系统、Apache网络服务、MySQL数据库、和PHP(注意:此处的PHP也可以缓存Perl或Python)脚本语言的组合。LAMP由这四种服务的开头字母组合而成。

     LAMP架构类型有两种:

   ⑴、所有的服务集中到同一台服务器上,既Linux主机上安装apache、mysql、php

来搭建LAMP,此时的架构如下图:图像 247

⑵、为了减小服务器的压力把不同的服务架设在不同的服务器上,来保证服务器的运行速率其架构如下:fastcgi模式架构:(Linux、httpd、mysql)+PHP

    FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

    FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等。

    其架构图如下:

图像 248

由于编译安装的过程比较繁琐、一篇博文不能写完,本篇则主要介绍在同一台服务器上面构建LAMP

平台的操作步骤和详细介绍,好了,那么我们下面开始我们的LAMP架构之旅吧t_0003.gif

二:环境搭建

搭建环境:RedHat  Enterprise linux 5.8、、httpd-2.4.4、mysql-5.5.28、php-5.4.13

安装相关依赖包采用YUM安装,这样可以很好的解决其依赖关系

1、安装yum服务并配置yum池  

  mount /dev/cdrom /media         #挂载DVD系统盘到media

  cd /media/Server                 #进入Server目录,其目录下都是红帽官方的rpm安装包

  rpm -ivh yum-3.2.22-39.el5.noarch.rpm  #安装yum包

  配置yum池配置文件

  cd /etc/yum.repos.d              #yum配置文件的存放目录

  vim server.repo                  #新建yum池配置文件,注意:yum配置文件必须以.repo结尾。

  然后添加如下内容:

# repos on instructor forcla***oom use
# Main rhel5 server
[base]
name=Instructor Server Repository
baseurl=file:///media/Server
gpgcheck=0
# This one isneeded forxen packages
[VT]
name=Instructor VT Repository
baseurl=file:///media/VT
gpgcheck=0
# This one isneeded forclustering packages
[Cluster]
name=Instructor Cluster Repository
baseurl=file:///media/Cluster
gpgcheck=0
# This one isneeded forcluster storage (GFS, iSCSI target, etc...) packages
[ClusterStorage]
name=Instructor ClusterStorage Repository
baseurl=file:///media/ClusterStorage
gpgcheck=0

图像 214

yum的配置文件内baseurl支持三种类型:本地文件、ftp、http

其定义格式如下:

本地文件:baseurl=file:///somefile
ftp方式:baseurl=ftp://172.16.7.1/file
http方式:baseurl=http://172.16.7.1/file

2、利用yum安装开发环境:开发工具Development tools和开发库Development Libraries

141720682.png

  我的系统内已经安装过了,这里不在重复安装,如果你的系统内还未安装,可以通过下面的命令

来安装

yum -y groupinstall "Development Tools"

   yum -y groupinstall "Development Libraries" #注意:如果组名中间有空格,必须使用

                                                     双引号引起来

三、编译安装所需源码包


到此我们基本的环境已经搭建完毕,下面进行编译安装吧~但是注意安装LAMP的顺序,因为编译安装

的时候包之间的依赖关系,我们需要以下面的顺序进行安装:httpd-2.4.4-->mysql-5.5.28-->php-5.4.13

 1、编译安装Apache的httpd-2.4.4


   由于新版的httpd-2.4.4需要依赖较新版本的apr和apr-util,因此需要先对系统上的apr进行升级,升级

有两种方式, 一种是利用源码包编译安装,一种是直接升级rpm包,此处利用源码编译的方式进行安装。

所需源码包

apr-1.4.6.tar.bz2 apr-util-1.5.2.tar.bz2



⑴、编译安装apr

#tar xf apr-1.4.6.tar.bz2                    #解压源码包

#cd apr-1.4.6

#./configure --prefix=/usr/local/apr         #--prefix=  指定源码编译的软件包安装目录

#make && make install                        #编译、安装


注意:这里我们之所以将我们的软件包安装在/usr/local/apr目录下,是因为我们的linux上

自带有apr软件包,可使用rpm -q apr命令查看下,只是版本比较老而已。可能有些人会问,

为什么不先卸载了在安装或者干脆升级呢,这样不会冲突么?其实我们是不能卸载自带的apr的,

因为可能有些其他软件需要依赖老版本的apr,如果我们卸载了, 可能导致这些依赖老版本apr

的软件无法使用。这里我们采用的是多版本共存的方式编译安装的,只要将我们编译安装的新版

本安装在不同目录下即可。因此,这里我们选择安装在/usr/local目录下


⑵、编译安装apr-util

#tar xf apr-util-1.5.2.tar.bz2

#cd apr-util-1.5.2

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

##—with-apr 指定依赖的apr软件包的位置

#make && make install

   至此,apr环境已经安装完成,下面进行httpd的编译、安装

⑶、httpd-2.4.4的编译、安装

  由于httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装,此处利用

我们做好的yum服务安装即可。

yum installpcre-devel

下面进行httpd的编译安装

#tar xf httpd-2.4.4.tar.bz2

#cd httpd-2.4.4

#./configure --prefix=/usr/local/apache

--sysconfdir=/etc/httpd--with-apr=/usr/local/apr\

--with-apr-util=/usr/local/apr-util--enable-so \

--enable-rewrite --enable-ssl --enable-cgi \

--enable-cgid --enable-modules=most \

--enable-mods-shared=most \

--enable-mpms-shared=all

###其中的\代表换行符

#make && make install

图像 216

上面各个选项的详细介绍

--prefix                                 #指定安装目录

--sysconfdir                             #指定配置文件安装目录

--enable-so                              #支持动态共享对象

--enable-ssl                             #支持ssl认证

--enable-cgi                             #支持cgi模块

--enable-rewrite                         #支持URL重写

--with-zlib                              #使用特殊的zlib库

--with-pcre                              #支持扩展pcre库

--enable-mods-shared=most             #构建MPM为动态模块,指定所有模块为共享模块

--enable-mpms-shared=all                #共享MPMS模块


==========================================================================================

下面插入一下关于MPM的介绍:

MPM: Multi Path Modules,多道处理模块(至关重要),包含以下几个类型:

   prefork:一个请求用一个进程响应;

   worker:一个请求用一个线程响应

   event:一个进程处理多个请求,该模型是基于事件驱动模型实现,在所有模型中该模型

   最强大。

---------------------------------------------------------------------------------------

在此补充一下配置选项:

(1)构建MPM为静态模块

   在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果

要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数

--with-mpm=NAME。NAME是指定的MPM名称编译完成后,可以使用 ./httpd -l 来确定选择的MPM。

此命令会列出编译到服务器程序中的所有模块,包括MPM。

(2)构建 MPM 为动态模块

   在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。

构建 MPM 为动态模块允许通过 修改LoadModule指令内容来改变MPM,而不用重新构建服务器

程序。在执行configure脚本时, 使用--enable-mpms-shared选项即可启用此特性。当给出的

参数为all时,所有此平台支持的MPM模块都会被安装。 还可以在参数中给出模块列表。默认

MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定, 然后出现在生成

的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。

==========================================================================================

至此,我们的httpd软件包的基本编译、安装已经完成,当然,如果想要启动httpd服务也是可以的,

只是需要利用命令的绝对路径,但是要想在linux系统内利用规范的命令还需要进一步配置.

ok!那开始下面httpd的相关配置文件吧!



⑷、httpd的配置

 1、修改httpd的主要配置文件,设置pid文件的路径

    编辑/etc/httpd/httpd.conf,添加如下行即可:  

    PidFile  "/var/run/httpd.pid"           //添加这行是为了为下面服务脚本提供判定的

164650858.png

2、添加httpd的服务脚本,来实现我们通过service httpd start|stop|restart|reload|status控

制服务

vim /etc/init.d/httpd或者vim /etc/rc.d/init.d/httpd(其实这两个是同一个文件) ,添加如下内容

#!/bin/bash          

#

# httpd        Startup script for the Apache HTTP Server

#

# chkconfig: - 85 15                  #SysV风格脚本必须有该行信息,指定在2345级别

                                          启动该服务

# description: Apache is a World Wide Web server.  It is used to serve    

#SysV风格脚本必须有该行信息

#          HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf      

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid     # 这个就是前面在配置文件内增加的PidFile,此脚本通

                                  过此文件是否存在来确认服务的运行情况

# Source function library.

. /etc/rc.d/init.d/functions#调用系统自带函数

if[ -f /etc/sysconfig/httpd]; then#如果存在该文件,读取该文件

. /etc/sysconfig/httpd

fi

# Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if

# mod_ssl needs a pass-phrase from the user.

INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server

# with the thread-based "worker" MPM; BE WARNED that some modules may not

# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}      

............

............

............

  由于脚本内容比较多,所以此处只是列出大致内容,详细信息见附件:httpd.sh

然后给此脚本增加执行权限

chmod+x /etc/init.d/httpd

增加到服务列表

# chkconfig --add httpd

设置为开机启动

# chkconfig  httpd on

查看服务启动状态

# chkconfig –list httpd

启动服务

# service httpd start  #注意:启动服务之前确保selinux是关闭的,如果开启会给服务带来麻烦的

   查看selinux的状态:

   getenforce  enforcing运行,permissive关闭


   临时关闭selinux:  setenforce=0

   永久性关闭selinux: 编辑/etc/selinux/config配置文件

   设置:SELINUX=permissive即可永久性的关闭

图像 219

下面看下服务是否启动正常了,访问一下网站吧~

   编译安装的httpd的默认页面的路径为:/usr/local/apache/htdocs/index.html

图像 221

171539466.png

3、设置httpd的环境变量

   上面我们的httpd服务已经可以运行,但由于是利用源码编译安装的软件,所有环境变量会会自动增加到系统内的,此时

我们需要手动增加环境变量。

 vim /etc/profile.d/httpd.sh  编辑该文件,添加如下一行信息

 export PATH=$PATH:/usr/local/apache/bin    #添加环境变量,让系统可直接使用httpd命令

172822199.png

httpd命令的用法:      

     httpd -l       #能列出当前服务器上编译时所支持的核心模块      

     httpd -t       #测试修改过httpd.conf文件后有没有语法错误      

     httpd -M       #表示显示所有额外装载的模块

173250772.png

   在此补充一句,我们编译的时候选择的基于模块的动态设置的编译,所有如果我们想要

更换httpd的MPM模块只需在httpd.conf配置文件内关闭和开启相应的模块,然后重启httpd

服务即可实现,是不是很方便!!

174641866.png

 现在我们的httpd服务已经配置完毕,可以实现其功能,下面我开始编译、安装LAMP的第二个软件包:MySQL吧

######################++++++++++++++++++++===========================================

2、编译安装mysql-5.5.28

⑴、编译前的准备

   为了尽可能的接近生产环境,我们把数据库的data目录放在一个逻辑卷上,因为数据

文件是时时增长的,所有通过逻辑卷来方便扩展,从而保证数据的安全!

创建逻辑卷,并挂载到系统的/mydata上,数据库的存放目录为/mydata/data

①、创建逻辑卷

fdisk#创建个新的分区,并设置分区类型为8e的LVM类型

partprobe /dev/sda#通知内核重读分区

pvcreate /dev/sda5#创建物理卷

vgcreate myvg /dev/sda5#创建卷组

lvcreate -L 2G -n mvlv myvg  #创建逻辑卷

mke2fs -j /dev/myvg/mvlv#格式化逻辑卷

mkdir/mydata#建立挂载点

mount/dev/myvg/mvlv/mydata#挂载到系统上  

181033619.png

②、建立运行mysql的用户和数据文件

mkdir /mydata/data  #建立数据存放目录

groupadd -r mysql   #增加mysql组

useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql  

                                  #增加mysql用户,并制定组和数据目录

chown -R mysql.mysql /mydata/data  @#修改data目录的属主和属组


③、安装数据库文件

   数据库的安装有三种:rpm、源码和通用二进制,这里采用的是通用二进制的方式来进行

安装测试的。

   首先下载mysql的通用二进制包mysql-5.5.28-linux2.6-i686.tar.gz,然后安装,

初始化:

tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local ##-C 指定

    解压后文件的安装目录,此目录必须为/usr/local内,这是mysql配置文件内规定好的。

cd /usr/local/

ln -sv mysql-5.5.28-linux2.6-i686  mysql  ##创建一个连接文件,不修改原文件名

是为了方便查看使用的版本等信息

cd mysql

chown -R mysql:mysql  .      ##修改当前文件的属主和属组

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

//初始化mysql,并指定mysql的用户和数据目录存放文件

chown -R root  .           //为了安全,把文件的属主改回root

182005613.png

182238701.png

④、为mysql提供服务脚本

 # cd /usr/local/mysql

 # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld

 # chmod +x /etc/rc.d/init.d/mysqld

  把mysql添加至服务列表:

 # chkconfig --add mysqld    #把mysql服务脚本添加进服务列表

 # chkconfig mysqld on       #设置为开机启动


 ⑤、提供配置文件并配置

# cd /usr/local/mysql

# cp support-files/my-large.cnf  /etc/my.cnf

修改my.cnf

修改CPU个数,查看本机cpu信息:cat/proc/cpuinfo,并添加数据文件目录:/mydata/data

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 8

datadir = /mydata/data

⑥、添加环境变量


下面增加mysql的环境变量

vim /etc/profile.d/mysqld.sh            #在环境变量内增加mysql的搜索路径,

增加如下内容:

exportPATH=$PATH:/usr/local/mysql/bin#mysql修改命令的路径。

. /etc/profile.d/mysqld.sh              # 执行脚本,是环境变量立即生效

此时使用mysql的相关命令就可以正常使用了

183849898.png

⑦、设置mysql的头文件、库文件、man文件,让其符合系统内的标准,其操作如下:

头文件输出到系统内的头文件路径/ust/include,使用如下命令:

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

库文件增加到系统内规定的路径内,命令如下:

   # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:

   # ldconfig -v

man手册增加至系统的变量内:编辑/etc/man.config,添加如下行即可:

   MANPATH  /usr/local/mysql/man

202033936.png

 
  
 
  
 
  

202046958.pngj_0019.gif到此我们mysql的安装和相关配置等就已经完成了,下面来安装PHP吧~~~~~~~

3、编译、安装PHP-5.4.13

①、安装依赖的环境

# yum -y groupinstall "X Software Development"

202624873.png

   如果想让想让编译的php支持mcrypt(额外的加密库)扩展,还需要先安装libmcrypt-2.5.7-5.el5.i386.rpm和libmcrypt-devel-2.5.7-5.el5.i386.rpm包

   # rpm -ivh libmcrypt-2.5.7-5.el5.i386.rpm libmcrypt-devel-2.5.7-5.el5.i386.rpm                                                               //安装所需的mcrpt库文件

202845873.png

②、编译安装php-5.4.13

tarxf php-5.4.13.tar.bz2

# cd php-5.4.13

# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl \

--with-mysqli=/usr/local/mysql/bin/mysql_config--enable-mbstring --with-freetype-dir\

--with-jpeg-dir--with-png-dir--with-zlib --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 --with-bz2  \

--enable-maintainer-zts

##其中的选项下面会详细介绍

#make && make install


203243961.png

上面编译./configure选项详解

--prefix=/usr/local/php#指定安装文件目录

--with-mysql=/usr/local/mysql#指定mysql数据库的所在位置

--with-openssl                         #开启支持openssl

--with-mysqli=/usr/local/mysql/bin/mysql_config#指定mysqlli的位置

--enable-mbstring                      #启用多字节字符串支持

--with-freetype-dir#设定到FreeType 2

--with-jpeg-dir#设定到libjpeg

--with-png-dir##设定到libpng

--with-zlib                            #支持zlib

--with-libxml-dir=/usr#指定libxml2安装目录

--enable-xml                           #开启支持xml扩展

--enable-sockets                       #启用套接字支持

--with-apxs2=/usr/local/apache/bin/apxs#指定apache使用基于线程的功能

--with-mcrypt                          #支持mcrypt扩展

--with-config-file-path=/etc#指定配置文件安装目录

--with-config-file-scan-dir=/etc/php.d #设定在哪个路径下扫描配置文件

--with-bz2                             #开启支持BZip2


添加php的配置文件,

# cp php.ini-production /etc/php.ini   //php的主配置文件,php.ini-production在php源码包内,编辑apache配置文件httpd.conf,以apache支持php

# vim /etc/httpd/httpd.conf

添加如下二行,使其支持php格式的文件

AddType application/x-httpd-php.php

AddType application/x-httpd-php-source.phps

204333594.png

204354622.png

④、测试php

   下面重启httpd服务,并修改主页内容,测试php

主页内容如下

<html><body><h1>It works!</h1></body></html>

this is chris web server testpage!

<?php

phpinfo();   //php的内置函数,显示php的相关信息

?>

204954305.png

⑤、测试mysql数据库与php的连接情况

在主页index.php内增加数据库函数

<?php

$conn=mysql_connect('localhost','root','');

#这是个mysql的内置函数,测试能否成功连接到mysql

if ($conn)

echo "Success...";

else

echo "Failure...";

?>

205940619.png

为了突出测试效果,我们下面把mysql数据库stop掉在测试试试

210033998.png

   由于这三个软件的编译、安装介绍比较详细,篇幅比较长,在此不在实例说明,实例放到下篇博文“黄金组合LAMP--基于fastcgi的架构”中进行,其中会介绍fast-cgi架构的详细介绍和利用phpMyAdmin-3.5.1管理数据库、Discuz论坛的搭建测试等实例来进一步了解LAMP。到时候欢迎各位查阅!博文中所用相脚本在附件内!欢迎下载。

   至此我们的黄金组合-LAMP已经搭建完毕并进行了简单的测试,其中先后编译安装了httpd、mysql、php,由于其中的步骤比较多,难免可能会出现错误,还望各位大神没在审视的时候给予指出~~菜鸟chris在此恭候大家拍砖、指正!

                                                    --chrisnux(chris linux)