LAMP是在Linux操作系统上面,搭配开源软件Apache+Mysql+PHP[Perl/Python]的一个系统平台,它们通常组合在一起用来搭建动态网站或者服务器。而它们本身都是各自独立运行的软件,却因常常被放在一起使用,拥有了越来越高的兼容度,才共同组成了一个强大的Web应用程序平台。并且,随着开源潮流的快速发展,以及投资成本较低的原因,LAMP已经是最好的网站解决方案之一。既然它这么的强大,对我们来说就必须知道如何来搭建LAMP了,下面我们来实现源码编译的方式实现LAMP。

    下面说下我所使用的环境和软件,根据不同的环境,你可能需要作出相应的改动
  1. System:Red Hat Enterprise Linux Server 5.4 
  2.  
  3. Apache:httpd-2.4.1.tar.bz2               #源码包到http://www.apache.org下载
  4.  
  5. Mysql:mysql-5.5.20-linux2.6-i686.tar.gz  #源码包到http://www.mysql.com下载 
  6.  
  7. PHP:php-5.3.10.tar.bz2                   #源码包到http://www.php.net下载 
    注:我们实现的是源码编译安装LAMP,那么我们首先得确保已经配置好开发环境,并且还需要注意的是比较新的源码包通常都会依赖比较新的开发工具,。请确保在编译安装之前已经配置好开发环境。配置开发环境需要安装这几个软件包组:"Development Tools"、"Development Libraries"、"X Software Development"。其中在编译安装php的时候,它依赖"X Software Development"包组中的一些软件,为了方便我们将这个软件包组给安装了。

    在配置好yum源之后,我们可以使用下面命令安装:
  1. #yum groupinstall "Development Tools" "Development Libraries" "X Software Development" 
    用到的软件包:
  1. 这些rpm包在附件中提供!
  2. apr-1.4.6-1.i386.rpm 
  3. apr-devel-1.4.6-1.i386.rpm 
  4. apr-util-1.4.1-1.i386.rpm 
  5. apr-util-devel-1.4.1-1.i386.rpm 
  1. libevent-1.4.14b-stable.tar.gz 
  2. libiconv-1.13.1.tar.gz 
  3. libmcrypt-2.5.8.tar.gz 
  4. mhash-0.9.9.9.tar.bz2 

    下面就开始让我们来编译安装LAMP吧!

一、编译安装Apache

   1、解决依赖关系

    我使用的Apache版本是最新的,它对开发环境的要求不是很严格,但是对一些它所依赖的开发组件apr和apr-util的要求是比较高的,悲催的是RedHat5.4提供的这些组件版本都比较低。所以我们需要事先升级一下他所依赖的开发组件。另外在编译安装Apache时,它还依赖apr和apr-util各自的开发包apr-devel、apr-util-devel。升级方式有两种,一种是通过源代码编译安装,另一种是rpm升级的方式。这里我们使用rpm包直接升级的方式。下载需要的软件包:
  1. apr-1.4.6-1.i386.rpm 
  2. apr-devel-1.4.6-1.i386.rpm 
  3. apr-util-1.4.1-1.i386.rpm 
  4. apr-util-devel-1.4.1-1.i386.rpm 
    使用rpm命令进行升级:
  1. #rpm –Uvh apr-1.4.6-1.i386.rpm apr-devel-1.4.6-1.i386.rpm
  2. #rpm -Uvh apr-util-1.4.1-1.i386.rpm apr-util-devel-1.4.1-1.i386.rpm
   安装pcre-devel软件包
  1. #yum install pcre-devel 

   2、编译安装http-2.4.1

    首先是下载好http-2.4.1的源码包,然后执行下面命令:
  1. #tar xf httpd-2.4.1.tar.bz2
  2. #cd http-2.4.1
  3. #./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so \
  4. --enable-ssl --enable-cgi --enable-rewrite --with-zlib
  5. #make
  6. #make install 

   3、配置Apache

   修改httpd的主配置文件,设置其Pid文件的路径命令如下:
  1. #vim /etc/httpd/httpd.conf        #编辑httpd的主配置文件,添加如下内容 
  2.  PidFile    “/var/run/httpd.pid” 

    为Apache提供SysV服务脚本/etc/rc.d/init.d/httpd,这样可以使我们可以使用service命令进行对其进行操作,在编译安装Apache时,默认是不提供这个服务脚本的。我们需要手动添加:

     #vim /etc/rc.d/init.d/httpd        #添加SysV脚本,添加如下内容
  1. #!/bin/bash 
  2. # httpd        Startup script for the Apache HTTP Server 
  3. # chkconfig: - 85 15 
  4. # description: Apache is a World Wide Web server.  It is used to serve \ 
  5. #           HTML files and CGI. 
  6. # processname: httpd 
  7. # config: /etc/httpd/conf/httpd.conf 
  8. # config: /etc/sysconfig/httpd 
  9. # pidfile: /var/run/httpd.pid 
  10.  
  11. # Source function library. 
  12. . /etc/rc.d/init.d/functions 
  13.  
  14. if [ -f /etc/sysconfig/httpd ]; then 
  15.         . /etc/sysconfig/httpd 
  16. fi 
  17.  
  18. # Start httpd in the C locale by default. 
  19. HTTPD_LANG=${HTTPD_LANG-"C"} 
  20.  
  21. # This will prevent initlog from swallowing up a pass-phrase prompt if 
  22. # mod_ssl needs a pass-phrase from the user. 
  23. INITLOG_ARGS="" 
  24.  
  25. # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server 
  26. # with the thread-based "worker" MPM; BE WARNED that some modules may not 
  27. # work correctly with a thread-based MPM; notably PHP will refuse to start. 
  28.  
  29. # Path to the apachectl script, server binary, and short-form for messages. 
  30. apachectl=/usr/local/apache/bin/apachectl 
  31. httpd=${HTTPD-/usr/local/apache/bin/httpd} 
  32. prog=httpd 
  33. pidfile=${PIDFILE-/var/run/httpd.pid} 
  34. lockfile=${LOCKFILE-/var/lock/subsys/httpd} 
  35. RETVAL=0 
  36.  
  37. start() {                                        
  38.         echo -n $"Starting $prog: " 
  39.         LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS 
  40.         RETVAL=$? 
  41.         echo 
  42.         [ $RETVAL = 0 ] && touch ${lockfile} 
  43.         return $RETVAL 
  44.  
  45. stop() {                                        
  46.     echo -n $"Stopping $prog: " 
  47.     killproc -p ${pidfile} -d 10 $httpd 
  48.     RETVAL=$? 
  49.     echo 
  50.     [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} 
  51. reload() {                                        
  52.     echo -n $"Reloading $prog: " 
  53.     if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then 
  54.         RETVAL=$? 
  55.         echo $"not reloading due to configuration syntax error" 
  56.         failure $"not reloading $httpd due to configuration syntax error" 
  57.     else 
  58.         killproc -p ${pidfile} $httpd -HUP 
  59.         RETVAL=$? 
  60.     fi 
  61.     echo 
  62.  
  63. # See how we were called. 
  64. case "$1" in 
  65.   start) 
  66.     start 
  67.     ;; 
  68.   stop) 
  69.     stop 
  70.     ;; 
  71.   status) 
  72.         status -p ${pidfile} $httpd 
  73.     RETVAL=$? 
  74.     ;; 
  75.   restart) 
  76.     stop 
  77.     start 
  78.     ;; 
  79.   condrestart) 
  80.     if [ -f ${pidfile} ] ; then 
  81.         stop 
  82.         start 
  83.     fi 
  84.     ;; 
  85.   reload) 
  86.         reload 
  87.     ;; 
  88.   graceful|help|configtest|fullstatus) 
  89.     $apachectl $@ 
  90.     RETVAL=$? 
  91.     ;; 
  92.   *) 
  93.     echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" 
  94.     exit 1 
  95. esac 
  96.  
  97. exit $RETVAL 
    编辑完成后,保存退出,执行下列命令:
  1. #chmod +x /etc/rc.d/init.d/httpd     #为此服务脚本赋予执行权限 
  2.  
  3. #chkconfig –add httpd                #将其假如到服务列表 
  4.  
  5. #chkconfig httpd on                 #设置为开机启动 
  6.  
  7. #service httpd configtest            #对httpd的配置文件进行检查 
  8.  
  9. #service httpd start                 #启动httpd服务 

    注:每编译安装好一个软件包后最好对其进行测试,保证其正常,避免等到了编译安装好LAMP后出现错误。

     为了使Apache的安装符合系统的使用规范,我们还需要进行如下步骤:
  1. #vim /etc/man.conf                 #导出帮助文档 
  2.  MANPATH    /usr/local/apache/man 
  3.  
  4. #ln –sv /usr/local/apache/include /usr/include/httpd  #导出头文件 
  5.  
  6. #ldconfig 
  7.  
  8. #vim /etc/profile     
  9.            #导出命令 
  10. PATH=$PATH:/usr/local/apache/bin 

二、安装Mysql

   1、为数据库创建文件系统

    我们都知道数据文件是很重要的,为其单独创建一个文件系统是很有必要的,据说XFS文件系统对Mysql数据库的支持最好,不过这里我们使用ext3文件系统。为了便于扩展我们最好为其新建一个逻辑卷,过程如下:
  1. #fdisk /dev/sda       #创建磁盘分区,文件系统类型为8e,分区过程不再给出
  2.  
  3. #pvcreate /dev/sda5           #创建物理卷 
  4. #vgcreate mysql /dev/sda5       #创建mysql卷组 
  5. #lvcreate –L 5G –n mydata mysql #创建逻辑卷 
  6. #mke2fs –j /dev/mysql/mydata 
  7.  
  8. #mkdir /mysql                 #创建挂载点 
  9.  
  10. #vim /etc/fstab             #编辑fstab文件,使其开机自动挂载 
  11.  /dev/mysql/mydata    /mysql    ext3    defaults    0 0 
  12.  
  13. #mount /dev/mysql/mydata /mysql 
  14.  
  15. #mkdir /mysql/data             #创建mysql数据的存放目录 

    2、为mysql数据库新建用户

     为mysql数据库新建用户,可以使其以安全方式运行。
  1. #groupadd –r mysql 
  2.  
  3. #groupadd –g mysql –r –s /sbin/nologin –M mysql 
  4.  
  5. #chown –R mysql:mysql /mysql/data 

    3、安装mysql-5.5.20

     安装mysql有三种方式:rpm包安装、源代码包安装、类似绿色软件的安装。这里我们使用第三种方式安装mysql,直接解压并初始化就可以运行了。另外安装的mysql版本需要与系统平台对应,我所使用的是32位平台,因此选择的软件包是:mysql-5.5.20-linux2.6-i686.tar.gz。有了软件包后,执行下列命令:
  1. #tar xf mysql-5.5.20-linux2.6-i686.tar.gz –C /usr/local 
  2.  
  3. #cd /usr/local/ 
  4.  
  5. #ln –sv mysql-5.5.20-linux2.6-i686 mysql 
  6.  
  7. #cd mysql 
  8.  
  9. #chown –R mysql:mysql . #初始化mysql数据库的时候需要将所有文件改为mysql组mysql用户
  10.  
  11. #scripts/mysql_install_db –user=mysql –datadir=/mysql/data #初始化mysql数据库
  12.  
  13. #chown –R root .      #将文件的属主再改为root 

    4、配置Mysql

     为mysql提供主配置文件:
  1. #cd /usr/local/myql 
  2.  
  3. #cp support-files/my-large.cnf /etc/my.cnf 
     修改/etc/my.cnf配置文件,将thread_concurrency的值改为我们主机CPU个数的2倍,这样既可以有效的利用CPU,又不至于是CPU的负荷过大,编辑配置文件,如下:
  1. #vim /etc/my.cnf 
  2.  
  3.  thread_concurrency = 2 
  4.  datadir = /mysql/data         #指定mysql数据文件的存放位置
    SysV服务脚本,执行下列命令:
  1. #cd /usr/local/mysql 
  2. #cp support-files/mysql.server /etc/rc.d/init.d/mysqld 
  3. #chkocnfig –add mysqld 
  4. #chkconfig mysqld on 
  5. #service mysqld on 
    为了使mysql的安装符合系统的使用规范,我们还需要进行如下步骤:
  1. #vim /etc/man.config                                 #导出帮助文档 
  2.  MANPATH    /usr/local/mysql/man 
  3.  
  4. #ln –sv /usr/local/mysql/include /usr/include/mysql 
  5.        #导出头文件 
  6. #echo ‘/usr/local/mysql/lib’ > /etc/ld.so.conf.d/mysql.conf #导出库文件
  7.  
  8. #ldconfig 
  9.  
  10. #vim /etc/profile                                     #导出命令 
  11. PATH=$PATH:/usr/local/mysql/bin 
    注:在使用mysql数据库前,我们需要为数据库中的root设置密码:
  1. #mysqladmin -uroot -hlocalhost -p password '123456' 

三、编译安装php

    1、解决依赖关系

     在开始的时候,我们说过编译安装php的时候依赖于"X Software Development"软件包组中的软件包,所以请再确定下是否安装了该软件包组。如果安装过了,就继续下面的步骤吧!

    2、编译安装php-5.3.10

     首先下载源码包,我们可以在其中加一些扩展在后边,给出了如何用源码包给php添加扩展的方法),这里只给出最基本的应用。然后执行下列命令
  1. #tar xf php-5.3.10.tar.bz2 
  2.  
  3. #cd php-5.3.10 
  4.  
  5. #./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
  6. --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config \
  7. --enable-mbstring –with-gd --with-freetype-dir --with-jpeg-dir \
  8. --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml \
  9. --with-apxs2=/usr/local/apache/bin/apxs 
  10.  
  11. #make 
  12.  
  13. #make test                    #可以省略这一步,检查的时间比较久 
  14.  
  15. #make install 
    3、配置php
  1. 为php提供配置文件
  2. #cp php.ini-procuction /usr/local/php/lib/php.ini 
  3.  
  4. 编辑Apache配置文件httpd.conf,使Apache支持php 
  5. #vim /etc/httpd/httpd.conf 
  6.  AddType application/x-httpd-php    .php 
  7.  AddType application/x-httpd-php-source .phps 
  8. 找到DirectoryIndes index.html修改为 
  9.  DirectoryIndex index.php index.html 

     重新启动httpd服务,或重新载入配置文件即可。

    4、测试php是否正常工作

     将/usr/local/apache/htdocs目录中的主页面文件更名,并写入如下内容:
  1. #mv index.html index.php 
  2.  
  3. #vim index.php 
  4.  
  5. <?php 
  6. Phpinfo(); 
  7. ?> 
    然后通过浏览器访问该页面,如果正常,会将php的信息给列出来,如下图所示

    然后修改index.php来测试数据库的连通性:   
  1. #vim index.php<?php  
  2.  
  3. $link=mysql_connect('localhost','root','');  
  4. if ($link)  
  5.    echo "successful";  
  6. else  
  7.    echo "failure";  
  8. mysql_close();  
  9. ?>  

    通过浏览器访问该页面,如果成功,会显示successful,反之显示failure。

附录:

    上面我们在编译安装php的时候没有加任何的扩展,不过其有些扩展是我们需要的,所以在这里写一下,当需要的时候可以自己添加,rpm包安装的方式就不说了,这里主要讲讲源码包安装的方式Php可以支持的扩展有mcrypt、mhash、libevent和libiconv,所以我们首先需要下载到这些所需要的源码包:
  1. libmcrypt :提供了系统自带的crypt的函数,增加了更多的加密函数,提供更高级的加密算法;
  2.  
  3. mhash :做哈希计算的。做单项加密函数的;
  4.  
  5. libiconv :是实现基于一种编码实现国际化的语言的接口。
  1. libevent-1.4.14b-stable.tar.gz  
  2. libiconv-1.13.1.tar.gz  
  3. libmcrypt-2.5.8.tar.gz  
  4. mhash-0.9.9.9.tar.bz2  

    然后,我们挨个对其编译安装,下面的编译安装比较简单,只给出步骤:

    libevent:
  1. #tar zxf libevent-1.4.14b-stable.tar.gz 
  2. #cd libevent-1.4.14b-stable 
  3. #./configure 
  4. #make 
  5. #make install 
  6. #make verify 
       libiconv:
  1. #tar zxf libiconv-1.13.1.tar.gz 
  2. #cd libiconv-1.13.1 
  3. #./configure 
  4. #make 
  5. #make install 
       libmcrypt:
  1. #tar zxf libmcrypt-2.5.8.tar.gz 
  2. #cd libmcrypt-2.5.8 
  3. #./configure 
  4. #make 
  5. #make install 
  6. #ldconfig -v 
  7. #cd libltdl 
  8. #./configure --with-gmetad --enable-gexec --enable-ltdl-install 
  9. #make 
  10. #make install 
      mhash:
  1. #tar jxf mhash-0.9.9.9.tar.bz2 
  2. #cd mhash-0.9.9.9 
  3. #./configure 
  4. #make 
  5. #make install 
   将库文件导出:
  1. #ln -sv /usr/local/lib/libmcrypt* /usr/lib/ 
  2. #ln -sv /usr/local/lib/libmhash.* /usr/lib/ 
   那么相应的,php的编译肯能就要做出一些改变了,步骤如下
  1. #tar xf php-5.3.10.tar.bz2  
  2.       
  3. #cd php-5.3.10  
  4.  
  5. #./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \ 
  6. --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config \ 
  7. --enable-mbstring –with-gd --with-freetype-dir --with-jpeg-dir \ 
  8. --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml \ 
  9. --with-apxs2=/usr/local/apache/bin/apxs --with-mhash=/usr/local \ 
  10. --with-mcrypt=/usr/local 
  11. #其中--with-mhash与--with-mcryt也可以不用加安装路径,但是如果我们自己定义了目录,就需要 
  12. 指出来了。这里只是给个提示,源码安装与rpm包安装的区别就在这了,是否需要我们自己指定安装目录 
  13. 了!  
  14.       
  15. #make ZEND_EXTRA_LIBS='-liconv'  #如果没有安装装libiconv之类的库,为了避免编译时出错, 
  16.      可以加ZEND这个选项,它的作用是不为php加入iconv模块。 
  17.      可以先直接make试试,如果报错了,先make clean,然后再 
  18.      添加上ZEND_EXTRA_LIBS='-liconv' 
  19. #make test                  #这一步可以省略,太耗时间了!     
  20.       
  21. #make install  

    通过以上步骤就可以搭建出来一个LAMP架构的WEB服务器了!当然上面只是一般性的步骤,具体的实现过程也需要考虑到你的实际情况。希望你也能成功!