您的位置:首页 > 其它

手把手教你如何手动编译配置LAMP

2013-04-19 20:06 323 查看
LAMP是什么?

LAMP是由Linux、Apache Web服务器、MySQL和PHP(Perl或Python)组成的。
apr --> apr-util --> httpd --> MySQL-->php --> xcache
我们安装软件的时候尽量按照上面的顺序安装。
要安装比较新的httpd我们就必须安装比较新的apr。红帽6上就不需要再指定安装apr了,因为它默认安装的版本比较新。但是我们这里使用的是红帽5.8的版本,它给我们安装的apr版本有点老,我们要安装新版本的apr,是不是老版本的apr就要卸载了呢?这不是的,老版本千万不能卸载,可能会有依赖;那升级呢?也是不行的,升级后老版本也是会没的。那有的朋友该问了,那两个版本在是不是该有冲突了。我们只能使用多版本并存的机制,只要把编译安装的新版本和老版本安装在不同的地方就可以了。
Rpm包安装:

/bin, /sbin, /usr/bin, /usr/sbin ####二进制所在位置

/lib, /usr/lib ####库文件所在位置

/etc ####配置文件所在位置

/usr/share/{doc,man}####帮助文档/手册

编译安装:

/usr/local/ ####定义安装第三方软件包

bin, sbin ####二进制所在位置

lib ####库文件所在位置

etc ####配置文件所在位置

share/{doc,man} ####帮助文档/手册

我们这样安装,看上去还算工整,但是我们还要想到到时候要是想要卸载某个软件怎么办?还要一个一个的找吗?那不就变麻烦了。所以我们这样调整,就是定义安装第三方软件包依旧放在/usr/local/下,并且还要创建以软件名命名的目录(为了好找),然后把它有关的文件都放在这个目录下面。但是这样安装又出现了问题,它的二进制程序不在PATH环境里面,那就不能直接执行命令了,那就修改PATH变量;还要修改库文件搜索路径;还要修改man的配置文件等。
例如: /usr/local/apr/
bin, sbin, lib, includes, etc, share/man
下面我们就开始手动配置apr及apr-util,并且如何安装httpd。(提示:这里要下载源程序包)
第一步:安装开发环境
第二步:安装apr源程序
我们这里是在我们的服务器上下载的,大家要是做的话去官方网站(apr.apache.org)上下载源程序包,我们这里将它们放到了主目录下面。如果不想放到这里的话可以放到/usr/local/src下面,这里专门放源码的。下面我们就准备安装apr【提示:如果你系统的时间比下载源码包的时间还要早的话,这样是会出错的。如果时间不对的话可以用hwclock –s,这样将软件时间同步为硬件时间。】
下面我们就要将软件进行解压后进行安装。安装完成后第一个包就装好了。




[root@localhost apr-1.4.6]# make

[root@localhost apr-1.4.6]# make install

第三步:安装apr-util
安装apr-util和我们安装apr是一样的。不过它指定路径的时候还要指定apr装在什么地方,如果不指定的话,它会自动找老版本的(05行最后面的红色就是指定的apr安装路径)。
[root@localhost ~]# tar xf apr-util-1.5.2.tar.bz2

[root@localhost ~]# cd apr-util-1.5.2

[root@localhost apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

[root@localhost apr-util-1.5.2]# make

[root@localhost apr-util-1.5.2]# make install

第四步:安装httpd
在安装httpd之前我们还要安装一个模块,这个模块是pcre。除了配置那些模块还有可能会用到--enable –deflate配置压缩模块的. --enable –expires过期首部控制。如果要以fastCGI模式工作的话必须启用—enable-proxy-fcgi。这里我们是以模块的方式工作,暂时不用启用。--enable-mpms-shared=all在版本2.2中是没有的,但是在版本2.4中就有了。Apache是支持MPM(躲到处理模块)有三种形式,prefork,worker,event。支持哪一种在编译的时候已经确定了。在2.4的时候以模块化的方式使用MPM,也就是可以同时将这三种模块一并写进来用哪个可以切换哪个。听起来非常棒,但是PHP以模块化方式给MPM结合的时候,如果使用prefork,PHP很简单。但是你使用的是worker或event我们的PHP必须编译成ZTS格式,如果你想灵活使用的话,还要编辑两次PHP。在2.2默认MPM是prefork ,在2.4默认的MPM是event。--with-mpm=MPM 指定哪一个为默认。【提示:详细内容就在图中】
[root@localhost ~]# tar xf httpd-2.4.4.tar.bz2

[root@localhost ~]# cd httpd-2.4.4

[root@localhost httpd-2.4.4]# yum -y install pcre-devel ####安装pcre模块


[root@localhost httpd-2.4.4]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-rewirte --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util





第五步:关闭selinux
之所以将这一项作为一大步来说是因为关闭selinux,不关闭的话,你的服务器启动不了。默认基本上是开启的,我们要把它给关掉。
1、暂时性的关闭




2、永久性关闭

[root@localhost httpd-2.4.4]# vim /etc/selinux/config





第六步:启动web服务器
在/usr/local/paache下面有一个脚本可以启动服务,脚本名称为bin/apachectl。




这里给大家说一下/usr/local/apache里面的内容,顺便把网页的内容添加hello apache,这时候我们查看一下。








第七步:将.pid文件放到/var/run下
我们一般都是将生成的.pid文件放到/var/run下面的,但是这里的.pid文件都放到了/usr/local/apache/logs下面,但是我们的/logs/下面都是放日志的,放这些.pid文件显然是不合适的,我们这里编辑配置文件(/etc/httpd/httpd.conf)将它的.pid文件都生成到/var/run下面。我们在配置文件中添加的内容是:PidFile "/var/run/httpd.pid"。【提示:我们还可以验证,当你没有输入这些内容的时候,关闭服务器(bin/apachectl stop)我们再用netstat –tnlp查看一下80端口,已经不再处于监听状态,我们在查看一下logs下面已经没有了.pid文件。这时候在配置文件中添加PidFile "/var/run/httpd.pid",我们发现.pid文件已经放到了/var/run/下面了,并且名字为httpd.pid。】








第八步:启动方便
我们这时候虽然能启动起来但是启动总是那么的不方便,这时候我们就要写脚本来让它方便起来了。将文件放在/etc/init.d/httpd里面,编辑完成后给它权限就行了,直接启动就行了。接下来我们让它开机后自动启动起来。
[root@localhost apache]# vim /etc/init.d/httpd

[root@localhost apache]# chmod +x /etc/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





第九步:安装mysql
从上面的顺序可看出,下面我们将要演示MySQL安装过程,这里我们先使用5.5这个版本是如何安装的,回头再讲5.6的安装过程。大家要演示的话到mysql的官方网站上去下载(www.mysql.com)。这里就从怎样安装开始讲起。这个时候我们就可以解压【官方要求:但是我们必须要将mysql放到/usr/local下面,并且目录名称还必须是mysql】,压缩过去后,我们是重命名还是使用连接?这里最好使用的是连接,这样的它的版本号还有平台这些字符创都会保留着,容易识别正在使用的是什么版本的。
[root@localhost ~]# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local  ####由于包有点大所以速度有点慢

[root@localhost local]# ln -sv mysql-5.5.28-linux2.6-i686/ mysql    ####创建连接

对我们而言,要想初始化安装mysql,我们就要使用mysql用户mysql组,并且还不能让它登录(不创建家目录)。




实际上在mysql里面有个文件是INSTALL-BINARY,这个文件里面说明了是如何安装的,这里给大家讲解一下,下面就给大家演示一下如何去安装mysql的。




这里我们就可以更改mysql的权限了,更改权限后我们先查看一下scripts下面的脚本,这个脚本是进行初始化的,里面也是有很多选项的,有个选项是—datadir=path,我们要将数据另外保存在什么地方,我们用rpm包安装默认在/var/lib/mysql。我们用编辑的方式安装mysql,它默认都放在/usr/local/mysql/data下面。我们要是把数据放在软件安装路径下面可不是好的选择,我们要给它另找路径,我们知道这个数据是不断变大的,我们最好把它放到逻辑卷中,这样等数据很大的时候我们可以用扩展逻辑卷的方式继续存放数据。这里我们先创建一个20G的逻辑分区,将其设置成逻辑卷类型。
[root@localhost mysql]# chown -R mysql.mysql /usr/local/mysql/*

[root@localhost mysql]# fdisk /dev/sda

[root@localhost mysql]# pvcreate /dev/sda5   ####创建物理卷

[root@localhost mysql]# vgcreate myvg /dev/sda5   ####创建卷组

[root@localhost mysql]# lvcreate -n mydata -L 5G myvg  ####创建5G的逻辑卷

[root@localhost mysql]# mke2fs -j /dev/myvg/mydata  ####格式化为ext3格式

[root@localhost mysql]# mkdir /mydata  ####创建文件夹

[root@localhost mysql]# vim /etc/fstab   ####开机自动挂载

/dev/myvg/mydata        /mydata       ext3    defaults        0 0

[root@localhost mysql]# mount –a

如果把mydata作为数据目录的话,将来所有文件将直接放到这个分区上了,为了便于管理我们在建立一个子目录data。它的属主属组应该是mysql,但现在是root,所以我们还要更改属主属组。并且其他用户也是不能随意查看的。
[root@localhost mysql]# mkdir /mydata/data

[root@localhost mysql]# chown -R mysql.mysql /mydata/data   ####更改属主、属组

[root@localhost mysql]# chmod o-rx /mydata/data    ####更改其他用户的权限

这个时候我们就可以执行脚本了,进行初始化。为了安全起见,初始化完成后我们要将mysql下面的属主改为root。【提示:如果你使用的是默认的data,那你还要将data的属主改为mysql,而我们是又创建的文件存放数据,所以这里就不用改了】
[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

[root@localhost mysql]# chown -R root /usr/local/mysql/*

第十步:启动mysql
我们这时候是没有脚本的,所以不能用service mysqld start。但是mysql给我们提供的有脚本,在support-files下面有个文件叫mysql.server,这就是它的脚本,我们只需要将它复制过去就行了。




这个时候我们还不能启动mysql,因为我们还没有设置配置文件,mysql找配置文件的时候先去找/etc/my.cnf,再去找/etc/mysql/my.cnf,找完这里还去找$BNSEDIR/my.cnf。有人问$BNSEDIR是什么?一般来讲就是你的安装目录。下面还去找~/.my.cnf。找完后如果有冲突怎么办?这里就是以最后一个为准(后一个会覆盖前一个)。我们到support-files目录中选择一个配置文件,其中我们要选择合适的,我们就以正确的作为例子,我们这里查看一下文件中的内存是否为我们合适的内存。这里我们选择my-large.cnf,因为我们的内存是512M的,所以这里我们就选择它了。然后我们将它复制到/etc/下面,并命名为my.cnf,然后编辑配置文件。最后启动serice mysqld start。





[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf

[root@localhost mysql]# vim /etc/my.cnf





[root@localhost mysql]# service mysqld start

我们编译的时候服务器端和客户端的mysql都装了,我们这里的mysql的二进制也装了,但是找不到,所以我们要给它一个路径这样就行了,这里我们登录一下mysql,结果如下。
[root@localhost mysql]# vim /etc/profile.d/mysql.sh


export PATH=$PATH:/usr/local/mysql/bin




第十一步:安装php
这里我们开始安装php,大家去php的官网(http://php.net/downloads.php)下载安装包,php有很多功能都要依赖于你系统上的某些功能的,它可以给我们动态生成图片,但是它要依赖于图片库,如果当前系统上没有图片库,它就没法使用这个功能。这里我们就先解压,解压后我们就可以配置了。
[root@localhost ~]# tar xf php-5.4.13.tar.bz2

[root@localhost ~]# cd php-5.4.13


[root@localhost 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

详解:
--prefix=/usr/local/php   ####安装目录
--with-mysql=/usr/local/mysql                       ####mysql的位置
--with-openssl            ####是否支持openssl功能
--with-mysqli=/usr/local/mysql/bin/mysql_config     ####php与mysql交互的另一个接口(是个二进制程序)
--enable-mbstring         ####支持中文(非单个字节表示的语言)
--with-freetype-dir       ####支持fretype功能(fretype是实现引用不同字体的)
--with-jpeg-dir           ####支持jpg格式的图片
--with-png-dir            ####支持png格式的图片
--with-zlib               ####支持通用格式的压缩库
--with-libxml-dir=/usr    ####xml的库的位置
--enable-xml              ####支持扩展标记语言
--enable-sockets          ####支持基于套接字的通信
--with-apxs2=/usr/local/apache/bin/apxs     ####将它编译成apache的模块
--with-mcrypt             ####支持加密功能的
--with-config-file-path=/etc                ####php文件存放的目录(主配置文件为php.ini)
--with-config-file-scan-dir=/etc/php.d      ####主配置文件有很多片段放的位置(格式是.ini)
--with-bz2                ####支持压缩库
--enable-maintainer-zts   ####主要取决于apache的类型(为prefork不用,使用event或worker需要要用)如果apache以线程方式工作必须编译成这种格式

这里执行后可能会出现错误,因为它所依赖的还有别的库文件不存在,这里我们手动解决依赖关系就行了。我们查看图片出现了错误,它说你没有安装mcrypt相关的软件包,加密不了了。有两种解决方案:一、不适用加密功能把--with-mcrypt给去了。二、使用加密功能,安装mcrypt相关的包。我们这里使用第二中方案。这里我们需要安装四个软件包,一个是mhash,一个是mhash-devel,一个是libmcrypt,最后一个是libmcrypt-devel。




这几个软件包去rpmfind.net上面搜索,里面有很多版本的,我们这里选定的是mhash-0.9.2-6.el5.i386.rpm和mhash-devel-0.9.2-6.el5.i386.rpm。然后我们再上网上下载libmcrypt-2.5.7-5.el5.i386.rpm,libmcrypt-devel-2.5.7-5.el5.i386.rpm软件包,然后解压。解压完成后我们就可以再次执行./configure了。执行完成后我们就可以make和make install。








第十二步:提供配置文件
Php的配置文件比较独特,在/etc/php.ini。php-5.4.13下面有两个文件,一个是php.ini-development用户开发环境的,另一个是php.ini-production用于生产环境的。我们用于生产环境的,把php.ini-production复制到/etc/下并命名为/php.ini。下面我们就说一说如何让apache和php结合起来工作。主要修改apache的配置文件来实现。编辑apache的配置文件,让apache处理php结尾的页面文件,既然我们能够支持php了,我们主页面也应该有以php结尾的页面了。
[root@localhost php-5.4.13]# cp php.ini-production /etc/php.ini

[root@localhost php-5.4.13]# vim /etc/httpd/httpd.conf









下面我们要进入网页默认目录,然后修改index.html,更改为index.php格式的。然后编辑内容,我们这里用php连接mysql,然后进行测试,我们在把mysql关闭(service mysqld stop)然后在进行测试。
[root@localhost ~]# cd /usr/local/apache/htdocs

[root@localhost htdocs]# mv index.html index.php

[root@localhost htdocs]# vim index.php





[root@localhost ~]# service mysqld stop





第十三步:配置xcache
下面我们就实现如何让我们的php支持虚拟主机,但是在支持虚拟主机之前,我们先让我们的php能够使用xcache,对php和opcod进行加速。这里我们直接下载好了,大家做了上网上下载(http://xcache.lighttpd.net/)。我们这里使用的是xcache-2.0版本。xcache的安装比较独特,因为xcache是php的模块准确的说是php的扩展,我们首先要使用php的命令来加载这个扩展,要识别这个扩展。Phpize意思是准备好一个扩展以便进行编译的。Php-config是能够获取php的配置信息,以及编译时候所使用的选项信息的【提示:能够和php-5.4结合工作的只支持xcache2.0及其以后的版本】
[root@localhost ~]# tar xf xcache-2.0.0.tar.bz2

[root@localhost ~]# cd xcache-2.0.0

[root@localhost xcache-2.0.0]# /usr/local/php/bin/phpize   ####【提示:几乎所有扩展在安装之前都要执行这个命令的。】

[root@localhost xcache-2.0.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config

--enable-xcache    ####启用xcache功能

--with-php-config=/usr/local/php/bin/php-config   ####php的配置命令

[root@localhost xcache-2.0.0]# make





安装完成后会在xcache-2.0.0目录下面生成一个文件叫xcache.ini。要想php能够支持xcache这个功能,那就意味着把xcache的配置信息必须要提供到php里面去,所以我们要把xcache.ini追加到php里面去,或者直径将xcache.ini直接复制到php.d下面,不过这个php.d目录是我们手动创建的,复制完成后我们要进行编辑,我们这里只把常用的给列了出来,我们应该重启才能生效,这里要重启web,因为它的模块是被web加载的。我们还需要在/usr/local/apache/htdocs/index.php 添加一项“phpinfo();“,我们在测试一下,由此可见xcache工作起来了。
[root@localhost xcache-2.0.0]# mkdir /etc/php.d

[root@localhost xcache-2.0.0]# cp xcache.ini /etc/php.d

[root@localhost xcache-2.0.0]# vim /etc/php.d/xcache.ini




[xcache.admin]      ####xcache的管理功能
xcache.admin.enable_auth = On    ####管理功能认证打开
xcache.admin.user = "mOo"      ####管理用户是什么
; xcache.admin.pass = md5($your_password)    ####用md5加密的方式加密码
xcache.admin.pass = ""          ####管理密码是什么

xcache.shm_scheme =        "mmap"    ####使用哪种方式来共享内存,“mmap”内存映射(一个内存可以让多个进程同时访问)
xcache.size  =               60M     ####用于缓存opcode代码的空间有多大(可修改的)
xcache.count =                 1     ####设置你的CPU个数
xcache.slots =                8K     ####在缓存当中,有几个槽位来缓存opcode,并且每个槽位是多大
xcache.ttl   =                 0     ####过期时间,0表示永不过期

xcache.gc_interval =           0     ####过期的时候都清理出去,我们的垃圾回收器多长时间工作一次,0表示永不工作

[root@localhost xcache-2.0.0]# service httpd restart

[root@localhost xcache-2.0.0]# vim /usr/local/apache/htdocs/index.php



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