您的位置:首页 > 其它

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

2013-05-03 22:24 561 查看
环境: 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如下:

mount /dev/cdrom /media

/etc/yum.repos.d/ 下新建个yum配置文件:server.repo ,配置内容如下

# Main rhel5 server
[base]
name=Instructor Server Repository
baseurl=file:///media/Server
gpgcheck=0

# This one is needed for xen packages
[VT]
name=Instructor VT Repository
baseurl=file:///media/VT
gpgcheck=0

# This one is needed for clustering packages
[Cluster]
name=Instructor Cluster Repository
baseurl=file:///media/Cluster
gpgcheck=0

# This one is needed for cluster storage (GFS, iSCSI target, etc...) packages
[ClusterStorage]
name=Instructor ClusterStorage Repository
baseurl=file:///media/ClusterStorage
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 ?

LAMP既是linux上的一种环境,就是基于linux系统运用服务搭建起来的组合环境,来为现实公司中提供开发、服务等
程序运行的环境。

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

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

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

# 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

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

# 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

介绍下部分选项的含义:

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

{=======================================================
MPM介绍

MPM: Multi Path Modules,多道处理模块(至关重要),包含以下几个模块:
prefork:一个请求用一个进程响应;
worker:一个请求用一个线程响应。系统启动多个进程,每个进程生成多个线程。该模型下,每个web服务器会
生成多个进程,而每个进程还可以生成多个线程,用每个线程来响应用户请求,默认web服务器启动两个进程。因linux
对线程支持不好,测试发现在linux上worker没有prefork性能好,因此默认在linux上启用prefork。
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的主要配置文件,设置pid文件的路径
编辑/etc/httpd/httpd.conf,添加如下行即可:

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



-------------------------------------------------------------------------------------
添加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
# description: Apache is a World Wide Web server.  It is used to serve \
#           HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# 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}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10 $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac

exit $RETVAL

然后给此脚本增加执行权限
chmod +x /etc/init.d/httpd
增加到服务列表
# chkconfig --add httpd
设置为开机启动
# chkconfig httpd on
查看服务启动状态
# chkconfig –list httpd
启动服务
# service httpd start



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




3、编译安装mysql-5.5.28
①、由于数据库会随着时间慢慢的增长,所以我们这里新建一个逻辑卷来保存数据库的数据文件。我们这里假设其逻辑卷的挂载目录为/mydata,而后创建数据库数据的存放目录为/mydata/data。
创建lvm的具体过程如下

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    //挂载到系统上







②、建立运行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



④、为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



启动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的相关命令了
----------------------------------------------------------

为了标准使用规范,我们下面也把mysql的man和头文件、库文件加到系统内

输出mysql的man手册至man命令的查找路径:

编辑/etc/man.config,添加如下行即可:MANPATH  /usr/local/mysql/man
----------------------------------------------------------

输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include  /usr/include/mysql
----------------------------------------------------------

输出mysql的库文件给系统库查找路径:# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:# ldconfig
----------------------------------------------------------

支持我们的mysql运行的基本环境已经设置完毕。下面运行测试

service mysqld start

mysql连接进入数据库




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

# tar xf 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

{---------------------------------------------------------
部分选择解释:

--prefix=/usr/local/php                //指定安装文件目录
--with-mysql=/usr/local/mysql     //指定所使用的mysql数据库的所在位置
--with-openssl                          //开启支持openssl
--with-mysqli=/usr/local/mysql/bin/mysql_config    //开启支持mysqli
--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的主配置文件
编辑apache配置文件httpd.conf,以apache支持php
# vim /etc/httpd/httpd.conf
添加如下二行

AddType application/x-httpd-php .php

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



定位至DirectoryIndex index.html

修改为:

DirectoryIndex index.php index.html



下面重启httpd服务,并修改主页内容,测试php
主页内容如下
<html><body><h1>It works!</h1></body></html>

this is chris web server test page!

<?php

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

?>



测试



ok,到此我们的LAMP环境搭建成功~下面进行测试
5、利用phpMyAdmin-3.5.1管理数据库的实例
phpMyAdmin-3.5.1-all-languages.tar.bz2

#mv phpMyAdmin-3.5.1-all-languages.tar.bz2 Discuz_X2.5_SC_GBK.zip /usr/local/apache/htdocs/

#tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2

#mv phpMyAdmin-3.5.1-all-languages phpmysql

访问测试:
http://172.16.7.6/phpmysql/



添加数据库访问的用户名和密码
#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; //刷新,使配置生效。



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



然后就可以在网页内操作数据库的相关操作了~~~~~
6、构建Discuz论坛
Discuz_X2.5_SC_GBK.zip
#unzip Discuz_X2.5_SC_GBK.zip //解压Discuz
Discuz的网页文件都在upload内。所有访问的时候直接指定主页目录为upload即可






修改完相关权限即可安装




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












内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: