环境: RedHat  Enterprise linux 5.8 、httpd-2.4.4 、mysql-5.5.28 、php-5.4.13 、已经安装Development Tools和Development Libraries

YUM:由于编译安装的时候会依赖其他的一些包,为了解决相关的依赖关系,我们把我们系统光盘挂载上来,做成yum服务,利用yum来安装。配置yum如下:

 

  1. mount /dev/cdrom /media 
  2.  
  3. /etc/yum.repos.d/ 下新建个yum配置文件:server.repo ,配置内容如下 
  4.  
  5. # Main rhel5 server  
  6. [base]  
  7. name=Instructor Server Repository  
  8. baseurl=file:///media/Server  
  9. gpgcheck=0 
  10.  
  11. # This one is needed for xen packages  
  12. [VT]  
  13. name=Instructor VT Repository  
  14. baseurl=file:///media/VT  
  15. gpgcheck=0 
  16.  
  17. # This one is needed for clustering packages  
  18. [Cluster]  
  19. name=Instructor Cluster Repository  
  20. baseurl=file:///media/Cluster  
  21. gpgcheck=0 
  22.  
  23. # This one is needed for cluster storage (GFS, iSCSI target, etc...) packages  
  24. [ClusterStorage]  
  25. name=Instructor ClusterStorage Repository  
  26. baseurl=file:///media/ClusterStorage  
  27. gpgcheck=0 

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

安装Development Tools和Development Libraries:

#yum groupinstall ”Development Tools“

#yum groupinstall ”Development Libraries“

本博文内容:

①、LAMP简介

②、Apache的httpd-2.4.4的源码编译安装

③、mysql-5.5.28的源码编译安装

④、php-5.4.13的源码安装

⑤、安装php加速器xcache

⑥、利用LAMP环境搭建Discuz论坛网站实例

1、何为LAMP ?

      

  1. LAMP既是linux上的一种环境,就是基于linux系统运用服务搭建起来的组合环境,来为现实公司中提供开发、服务等
  2. 程序运行的环境。 
  3.  
  4.       L,即linux操作系统;A,即Apache服务器;M,即MySQL数据库;P,即PHP/Perl/Python等脚本语言。
  5. Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的
  6. 程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源
  7. 潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件
  8. 方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP
  9. 是最强大的网站解决方案。 

2、编译安装Apache

      由于httpd-2.4.4需要依赖较新版本的apr和apr-util,因此需要先对系统上的apr进行升级,升级,升级有两种方式,一种是利用源码包编译安装,一种是直接升级rpm包,此处利用源码编译的方式进行安装。

源码包:apr-1.4.6.tar.bz2和apr-utils-1.5.2.tar.bz2h

①、编译安装apr

 

  1. # tar xf apr-1.4.6.tar.bz2  
  2. # cd apr-1.4.6  
  3. # ./configure --prefix=/usr/local/apr     #//--prrfix 指定源码编译的软件包安装目录 
  4.  
  5. # make && make install                       #//编译、安装 
  6.  
  7. 注意,这里我们之所以将我们的软件包安装在/usr/local/apr目录下,是因为我们的linux上自带有apr软件包,
  8. 可使用rpm -q apr命令查看下,只是版本比较老而已。可能有些人会问,为什么不先卸载了在安装或者干脆升级呢,
  9. 这样不会冲突么?其实我们是不能卸载自带的apr的,因为可能有些其他软件需要依赖老版本的apr,如果我们卸载了,
  10. 可能导致这些依赖老版本apr的软件无法使用。这里我们采用的是多版本共存的方式编译安装的,只要将我们编译安装
  11. 的新版本安装在不同目录下即可。因此,这里我们选择安装在/usr/local目录下。 

②、编译安装apr-util

 

  1. # tar xf apr-util-1.5.2.tar.bz2  
  2. # cd apr-util-1.5.2  
  3. # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  //—with-apr 指定依赖的
  4. apr软件包的位置  
  5. # make && make install 

③、编译安装apache 的httpd-2.4.4

      由于httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装,此处利用我们做好的yum服务安装即可。

      yum install pcre-devel

下面编译安装httpd-2.4.4

 

  1. # tar xf httpd-2.4.4.tar.bz2  
  2. # cd httpd-2.4.4 
  3.  
  4. #./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --with-apr=/usr/local/apr \
  5. --with-apr-util=/usr/local/apr-util --enable-so --enable-rewrite --enable-ssl --enable-cgi \
  6. --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all 
  7.   ##/其中的‘/’代表换行
  8. # make && make install 

介绍下部分选项的含义: 
 

  1. --prefix                                 //指定安装目录  
  2. --sysconfdir                             //指定配置文件安装目录  
  3. --enable-so                              //支持动态共享对象  
  4. --enable-ssl                             //支持ssl认证  
  5. --enable-cgi                             //支持cgi模块  
  6. --enable-rewrite                         //支持URL重写  
  7. --with-zlib                              //使用特殊的zlib压缩库  
  8. --with-pcre                              //使用pcre编译  
  9. --enable-mpms-shared=all          //构建MPM为动态模块,指定所有模块为共享模块  
  10. [--with-mpm=event                     //编译的时候也可以指定event,这里我们主要介绍event模型] 

{=======================================================

MPM介绍

 

  1. MPM: Multi Path Modules,多道处理模块(至关重要),包含以下几个模块:   
  2.     prefork:一个请求用一个进程响应;  
  3.     worker:一个请求用一个线程响应。系统启动多个进程,每个进程生成多个线程。该模型下,每个web服务器会
  4. 生成多个进程,而每个进程还可以生成多个线程,用每个线程来响应用户请求,默认web服务器启动两个进程。因linux
  5. 对线程支持不好,测试发现在linux上worker没有prefork性能好,因此默认在linux上启用prefork。  
  6.     event:一个进程处理多个请求,该模型是基于事件驱动模型实现,在所有模型中该模型最强大。 

 

  1. 补充: 
  2.  
  3. (1)构建MPM为静态模块  
  4. 在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。
  5. 为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成
  6. 后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。 
  7.  
  8. (2)构建 MPM 为动态模块 
  9.  
  10. 在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过
  11. 修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,
  12. 使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。
  13. 还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,
  14. 然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。 

========================================================}

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

编辑/etc/httpd/httpd.conf,添加如下行即可: 
PidFile  "/var/run/httpd.pid"           //添加这行是为了为下面服务脚本提供判定的。

实现源码编译LAMP平台的搭建_lamp 

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

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

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

 

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

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

chmod +x /etc/init.d/httpd

增加到服务列表

# chkconfig --add httpd

设置为开机启动

# chkconfig  httpd on

查看服务启动状态

# chkconfig –list httpd

启动服务

# service httpd start

实现源码编译LAMP平台的搭建_lamp_02

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

测试httpd服务主页,结果如下

实现源码编译LAMP平台的搭建_lamp_03

 

3、编译安装mysql-5.5.28

①、由于数据库会随着时间慢慢的增长,所以我们这里新建一个逻辑卷来保存数据库的数据文件。我们这里假设其逻辑卷的挂载目录为/mydata,而后创建数据库数据的存放目录为/mydata/data。

创建lvm的具体过程如下

 

  1. fdisk创建个新的分区,并设置分区类型为8e的LVM类型 
  2.  
  3. partprobe /dev/sda   //通知内核重读分区 
  4.  
  5. pvcreate /dev/sda5   //创建物理卷 
  6.  
  7. vgcreate myvg /dev/sda5  //创建卷组 
  8.  
  9. lvcreate -L 2G -n mvlv myvg //创建逻辑卷 
  10.  
  11. mke2fs -j /dev/myvg/mvlv //格式化逻辑卷 
  12.  
  13. mkdir /mydata           //建立挂载点 
  14.  
  15. mount /dev/myvg/mvlv /mydata    //挂载到系统上 

实现源码编译LAMP平台的搭建_lamp_04

实现源码编译LAMP平台的搭建_lamp_05

②、建立运行mysql的用户

[root@localhost ~]# groupadd -r mysql   //增加mysql组 
[root@localhost ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql  //增加mysql用户,并制定组和数据目录 
[root@localhost ~]# chown -R mysql.mysql /mydata/data  //修改data目录的属主和属组

③、安装mysql-5.5.28,并对其进行初始化

首先下载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

实现源码编译LAMP平台的搭建_lamp_06

④、为mysql提供配置文件

# 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提供服务脚本

# cd /usr/local/mysql 
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 
# chmod +x /etc/rc.d/init.d/mysqld

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

实现源码编译LAMP平台的搭建_lamp_07

启动mysql服务并可以进行测试

[root@localhost support-files]# mysqld 
-bash: mysqld: command not found  ---现在直接我们利用这种办法直接启动是起不来的~那是因为我们理解的通用二进制的方法,环境变量内还找不到关于mysql的命令,要是想启动mysql服务,可以直接利用决定路径执行mysql命令

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

下面增加mysql的环境变量

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

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

然后重新登录就可以使用mysql的相关命令了

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

 

  1. 为了标准使用规范,我们下面也把mysql的man和头文件、库文件加到系统内 
  2.  
  3. 输出mysql的man手册至man命令的查找路径: 
  4.  
  5. 编辑/etc/man.config,添加如下行即可:MANPATH  /usr/local/mysql/man 
  6. ---------------------------------------------------------- 
  7.  
  8. 输出mysql的头文件至系统头文件路径/usr/include: 
  9.  
  10. 这可以通过简单的创建链接实现:  
  11. # ln -sv /usr/local/mysql/include  /usr/include/mysql 
  12. ---------------------------------------------------------- 
  13.  
  14. 输出mysql的库文件给系统库查找路径:# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 
  15.  
  16. 而后让系统重新载入系统库:# ldconfig 
  17. ---------------------------------------------------------- 
  18.  
  19. 支持我们的mysql运行的基本环境已经设置完毕。下面运行测试 
  20.  
  21. service mysqld start 

mysql连接进入数据库

实现源码编译LAMP平台的搭建_lamp_08

 

 

 

 

4、编译安装php-5.4.13

①、解决依赖关系

# yum -y groupinstall "X Software Development"

     如果想让想让编译的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库文件

②、编译安装php-5.4.13

 

  1. # tar xf php-5.4.13.tar.bz2  
  2. # cd php-5.4.13  
  3. # ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl \
  4. --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir \
  5. --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  \
  6. --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  \
  7. --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  \
  8. --enable-maintainer-zts 
  9.  
  10.   
  11.  
  12. #make && make install 

{---------------------------------------------------------

部分选择解释:

 

  1. --prefix=/usr/local/php                //指定安装文件目录  
  2. --with-mysql=/usr/local/mysql     //指定所使用的mysql数据库的所在位置 
  3. --with-openssl                          //开启支持openssl  
  4. --with-mysqli=/usr/local/mysql/bin/mysql_config    //开启支持mysqli  
  5. --enable-mbstring              //启用多字节字符串支持  
  6. --with-freetype-dir             //设定到FreeType 2  
  7. --with-jpeg-dir                  //设定到libjpeg  
  8. --with-png-dir                   //设定到libpng  
  9. --with-zlib                      //支持zlib  
  10. --with-libxml-dir=/usr       //指定libxml2安装目录  
  11. --enable-xml                    //开启支持xml扩展  
  12. --enable-sockets              //启用套接字支持  
  13. --with-apxs2=/usr/local/apache/bin/apxs    //指定apache使用基于线程的功能 
  14.  
  15. --with-mcrypt                //支持mcrypt扩展  
  16. --with-config-file-path=/etc               //指定配置文件目录  
  17. --with-config-file-scan-dir=/etc/php.d     //设定在哪个路径下扫描配置文件  
  18. --with-bz2                     //开启支持BZip2 

-----------------------------------------------------------}

下面为php添加相关的配置文件

# cp php.ini-production /etc/php.ini   //php的主配置文件

编辑apache配置文件httpd.conf,以apache支持php

# vim /etc/httpd/httpd.conf

添加如下二行 
   AddType application/x-httpd-php  .php 
   AddType application/x-httpd-php-source  .phps

实现源码编译LAMP平台的搭建_lamp_09

定位至DirectoryIndex index.html 
   修改为: 
    DirectoryIndex  index.php  index.html

实现源码编译LAMP平台的搭建_lamp_10

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

主页内容如下

<html><body><h1>It works!</h1></body></html> 
this is chris web server test page! 
<?php 
phpinfo();   //php的内置函数,显示php的相关信息 
?>

实现源码编译LAMP平台的搭建_lamp_11

测试

实现源码编译LAMP平台的搭建_lamp_12

ok,到此我们的LAMP环境搭建成功~下面进行测试

5、利用phpMyAdmin-3.5.1管理数据库的实例

phpMyAdmin-3.5.1-all-languages.tar.bz2

 

  1. #mv phpMyAdmin-3.5.1-all-languages.tar.bz2 Discuz_X2.5_SC_GBK.zip /usr/local/apache/htdocs/ 
  2.  
  3. #tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2 
  4.  
  5. #mv phpMyAdmin-3.5.1-all-languages phpmysql 

访问测试:

http://172.16.7.6/phpmysql/

实现源码编译LAMP平台的搭建_lamp_13

添加数据库访问的用户名和密码

#mysqladmin -uroot -hlocalhost -p password 'chris'  //建立用户root,通过主机localhost访问,密码是chris

#mysql –uroot –p

Enter password:           //输入密码chris

mysql>GRANT ALL  PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'chris';     //授权访问权限

mysql> FLUSH PRIVILEGES;   //刷新,使配置生效。

实现源码编译LAMP平台的搭建_lamp_14

再次测试,以用户root密码chris进入

实现源码编译LAMP平台的搭建_lamp_15

然后就可以在网页内操作数据库的相关操作了~~~~~

6、构建Discuz论坛

Discuz_X2.5_SC_GBK.zip

#unzip Discuz_X2.5_SC_GBK.zip  //解压Discuz

Discuz的网页文件都在upload内。所有访问的时候直接指定主页目录为upload即可

实现源码编译LAMP平台的搭建_lamp_16

实现源码编译LAMP平台的搭建_lamp_17

修改完相关权限即可安装

实现源码编译LAMP平台的搭建_lamp_18

 

安装配置数据库连接选项和管理Discuz的用户名和密码

实现源码编译LAMP平台的搭建_lamp_19

实现源码编译LAMP平台的搭建_lamp_20

实现源码编译LAMP平台的搭建_lamp_21

 

实现源码编译LAMP平台的搭建_lamp_22