架设LAMP 

LAMP的基本概念

LAMP即linux apache mysql php.她是目前市场上比较流行的一种WEB服务器的架设方案。她的工作流程是这样的:即首先WEB服务器接受从客户端发来的请求,然后把请求的内容进行解析,根据不同的请求类别进行不同的处理,我们这里要知道用户的请求内容一般分为静态内容和动态内容,过去用户的请求内容可能大都是静态内容,而现在用户的请求内容一般静态内容和动态内容都有。因为http协议的是在早期的社会环境下进行设计的,因此http协议只能处理静态的内容,即HTML格式的文件,现在随着社会的发展,动态的内容请求是必然的,那怎么办呢?一种方案就是重新进行http协议的设计,让她可以处理动态的内容,但这样做必然要对整个的架构推到重来,工作量太大,而且还牵涉到资源节约和兼容的问题,因此APACHE采取了一种和可以处理动态内容的工具相结合的方式来处理这个问题,如和PHP,JSP等可以处理动态内容等程序结合来共同完成用户的所有动静态内容的请求。那么MYSQL在整个的LAMP中又担当了什么角色呢?MYSQL的作用就是在处理动态内容时,把所需要的数据单独的存放在一个可以很好的处理数据的软件工具里,即一个专门的数据库里来供其他程序的调用。

                             LAMP的架设步骤

首先选好你自己的LINUX平台,我用的是红帽5.8平台。相应的APACHE,MYSQL PHP的版本,这里需要注意的是我们在作一个实验的时候一定要注意我们的平台和软件的版本。

现在开始我们的架设

第一步 要先安装好我们的开发环境

Yum -y groupinstall “Development Libraries” “Development Tools” X Software Development”(需要安装这三个包组)

还需要安装一个

Yum -y install pcre-devel(安装这个包的目的是这个包可以忽略不同平台)

安装APACHE,PHP和MYSQL,这里我们要清楚,这是三个不同的软件,是可以没有先后次序的安装还是可以有一定的先后次序,当然应该有一定的次序,我们先装APACHE,因为PHP是当有客户的动态请求的内容时,APACHE会把这部分内容交由PHP来处理,当然这里就又牵扯出一个内容,那APACHE和PHP又是怎样的建立两者之间的彼此之间的关系的呢,是只有一种渠道建立关系,还是有好几种渠道可以建立关系呢?当然根据一般的推像,当然应该有很多种,事实上也的确如此。分别有CGI,fastCGI。CGI模式简单的讲就是在需要调用PHP模块时由APACHE进程来调用,因此在物理实现上需要将PHP模块和APACHE安装在一个服务器上,而fastCGI模式则是在需要调用PHP时,PHP则事先有一个端口在进行监听,也就是说在物理实现上PHP可以单独的安装在另一台独立的服务器上。以上说的是APACHE和PHP的关系,下面来说说PHP和MYSQL的这两者之间的关系究竟又是怎样建立起来的。

我们知道MYSQL是把PHP需要的数据存储起来的一个数据库,当然应该两者之间要通过某种机制可以互相认识,这种机制就是PHP上安装有可以去驱动MYSQL的驱动程序。这样一来这三者之间的运作机制就明了。

我们用源码进行安装

我们先安装APACHE,这里有一个注意需要注意的地方,安装APACHE时需要依赖apr 和 apr-util,这两个包我们在安装我们的红帽操作系统时是默认已经安装了这两个包的,但是这两个包的版本太低,因为我们打算安装的APACHE是APACHE-2.4.3版本的,属于比较新的版本,这时我们有两个选择一是对原有的两个版本较老的版本进行升级安装,升级到可以和我们的APACHE相批配的版本;二是我们可以不管系统上的两个包,直接进行这两个包的最新版本的源码包的编译,有人这时候会问那需要卸载原来系统上的包吗,如果不卸载,他们安装在一起会不会冲突,当然不会因为我们会给他指定不同的安状目录,这两个新包只给指定的APACHE服务。

第二步 Get apr-1.4.6.tar.bz2 apr-util-1.4.1.tar.bz2 httpd-2.4.3.tar.bz2(下载两个包)

Tar xf apr-1.4.6.tar.bz2(解压缩包)

Cd apr-1.4.6

./configure --prefix=/usr/local/apr(指定安装路径)

Make && make install 

Tar xf apr-util-1.4.1.tar.bz2

Cd arp-util-1.4.1

./configure --prefix=/usr/local/apr-util(指定安装路径) --with-apr=/usr/local/apr(with 的意思是告诉util apr在那儿,因为util要依赖于apr来工作。

Make && make install 

这两个包安装完后我们就可以安装httpd-2.4.3了,这里有些知识我们要明白,2.4.3的版本,他改进了以前版本,他可以让我们动态的安装MPM模块,也就是说当我们进行源码编译的时候我们可以预先编译进我们的好几种的MPM模块,这样的改进的好处是显而易见的,当然我以后把HTTP的工作模式想从一种模式改到另外一种模式时,我们只要在配制文件中禁掉目前不想的工作模式,而启用我们要的模式既可以,非常之方便,以前的版本可不是这样,以前我们在源码编译时只能编译一种模式,如果在工作中想改变一下工作模式的话,就需要重新进行编译,我们想想这里还有牵扯到很多其他的相关操作,不方便。

第三步 这才到了正式安装HTTPD的时侯了。tar xf httpd-2.4.3.tar.bz2

Cd httpd-2.4.3

./configure --prefix=/usr/local/httpd/apsche (制定apache安装的路径)--enable-so(这一步很关键是可以装载动态模块) --enable-ssl --enable-cgi --enable-rewrite --with-zlib --enable-mpms-share --with-mpm=event --sysconfdir=/etc/httpd --with-apr=/usr/local/apr(告诉路径) --with-arp-uril=/usr/local/apr-util/(告诉路径)

Make && make install

这里我们要注意一个知识点,我们要知道我们用RPM包安装HTTPD时,她有一个红帽再帮我们编译时已经有一个默认的安装路径,而我们这次是我们自己进行红帽HTTPD源码包的编译,我们把她安装在/usr/local/apache这个路径里,而不是默认的安装路路径里,因此我们又知道了二进制文件安装在了/usr/local/apache/bin里,这个路径也不是二进制文件默认的传统的安装路经,因此PATH变量找不到的,我们需要让PATH变量找到她。

Vim /etc/profile.d/httpd.sh里写入下边这一行

Export PATH=$PATH:/usr/local/apache/bin

同样的道理,这种方式安装的MAN文档,库文件,头文件的位置也不再默认的位置,我们同样需要把他们倒出来一让其他依赖他的程序能够找到他们。

Vim /etc/man.config在有很多MANPATH的地方随便找个地方,一般是在最下面写入这样一行

MANPATH /usr/local/apache/man

这样一个APACHE服务器就准备好了。

接下来我们就可以练习怎样切换APACHE的工作模式,我们刚才说过apache-2.4.3支持多模块的模式装载,我们刚才进行源码安装的时候制定的是event模式,现在我们可以尝试着把他切换至prfork模式,看应该怎样进行操作。

Httpd -M我们会看到

Mpm-event-module(shared)字样,这就是表示我们目前启用的是event模式。

我们只要确保/usr/local/apache/modules里有prefork这个模块即可。

Cd /etc/httpd

Cp httpd.conf http.conf.bak

Vim httpd.conf里的

LoadModule mpm_event_module modules/mod_mpm_envent.so注释掉

把LoadModule mpm_prefork_module modules/mod_mpm_prefork.so启用起来即可。

Apachectl stop(停掉原来的event模式下的apache服务)

Apachectl start(重新开启服务,这时就切换到了prfork模式下的服务

验证一下 httpd -M

这时就会发现prefork字样,这就表示apache此时是工作在prefork模式下。

接下来我们就是基于虚拟主机的话题。

Vim /etc/httpd/conf/httpd.conf

注释掉中心主机 “/usr/local/apache/htdocs”

注释掉Directory

启用 Include/etc/httpd/extra/httpd-vhosts.conf

编辑 vim /extra/httpd-vhosts.conf这个文件

<VirtualHost *:80>

ServerName  

ServerAlias www2.magedu.com

DocumentRoot “/www/mamgedu.com

AllowOverride none

Options none

Require all granted

</Directory>

</VirtualHost>

<VirtualHost *:80>

ServerName 

DocumentRoot “/www/example.com

<Directory “/www/example.com”>

AllowOverride none

Options none

Require all granted

</Directory>

</VirtualHost>f

Mkdir -pv /www/{magedu,example}.com

Vim /www/magedu/index.html

Vim /www/example/index.html

这样虚拟主机就配置好了。

下来我们就要提供我们服务的脚本了。

#!/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

Vim /etc/rc.d/init.d/httpd

Chmod +x /etc/rc.d/init.d/httpd(赋予权限)

Chkconfig --add httpd(加到服务列表中去)

Chconfig httpd on(让他开机自动启动)

这样就可以让apache按常规方法启动了。

第二阶段 MYSQL的安装

Get mysql-5.5.28-linux2.6-i686.tar.gz(下载mysql软件包

我们想把mysql的数据放在和mysq安装位置不同的地方,把他放在lvm上,这样以后易于扩展。先创建我们的lvm。

Fdisk /dev/sda

Pvcreate /dev/sda5

Vgcreate myvg /dev/sda5

Lvcreate -L 10G -n mydata myvg

Mke2fs -j /dev/myvg/mydata

挂载他让能开机自动挂载

Mkdir /mydata

Vim /etc/fstab里写入这一行

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

Mount -a

Mount

Groupadd -r mysql

Useradd -g mysql -r mysql

Mkdir /mydata/data

Chown -R mysql.mysql /mydata(让数据库有写入的权限)

Tar xf mysql-5.5.28-linux2.6.i686.tar.gz -C /usr/local

Cd /usr/local

Ln -sv mysql-5.5.28-linux2.6-i686 mysql(创建链接)

Cd mysql

Chown -R mysql.mysql .

Scripts mysql_install_da --datadir=/mydata/data/ --user=mysql

Chown -R root .

Cp support-files/my-large.cnf /etc/my.cnf

Vim /etc/my.cnf 里加入

Datadir=/mydata/data

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

Chmod +x /etc/rc.d/init.d/mysqld

Chkconfig --add mysqld

Chkconfig mydqld on

Service mysqld start

Vim /etc/profile.d/mysql.sh

Export PATH=&PATH:/usr/local/mysql/bin

Vim /etc/ld.so.conf.d/mysql.conf(导出库文件)里加入这样一行

/usr/local/mysql/lib

Ldconfig -v( 让他生效)

Ln -sv /usr/local/mysql/include /usr/include/mysql(输出头文件

Vim /etc/man.conf里加入

MANPATH /usr/local/mysql/man

第三阶段 PHH的安装

Rpm -ivh libmcrypt-2.5.7-5.el5.i386.rpm libmcrypt-devel-2.5.7.el5.i386.rpm

Get php-5.4.8.tar.bz2

Tar xf php-5.4.8

Cd php-5.4.8

./configure --prefix=/usr/local/php --with-mysql=/usr/localmysql --with-openssl --with-mysqli=/usr/local/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-mycrpt ==with-config-file-path=/etc/ --with-confg-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

Make && make install 

Cp php.inii-production /etc/php.ini

注意:我们这里的安装模式是把php作为apache的一个模块,因此当我们安装完成php后,会在/usr/local/apache/moduls里生产一个php的模块。

并且此时在/etc/httpd/httpd.conf里自动增加

LoadModule php5_module modules/libphp5.so

这还不够,我们的服务器还要能够在客户端请求时能够识别请求的是不是动态的内容因此在我们的服务器里还要增加

Vim httpd.conf

AddType application/x-httpd-php.php

在 DirecroryIndex里增加 index.php

service httpd restart

下边就是看一下我们的网页。

Cd /www/magedu.com

Mv index.html index.php

Vim index.php

我们再完善她一下,我们可以把我们写的网页给他换一个。

Get Discuz_7.2_FULL_SC_GBK.zip

Unzip Discuz_7.2_FULL_SC_GBK.zip

Cd upload

Mv * /www/magedu.com

Cd /www/magedu.com

这里还需要编辑PHP的配置文件

Vim /etc/php.ini里

Short_open_tag = ON

Service httpd restart

这里我们有一个提示,不可写,为什么?

ll /www/magedu.com会看到

里边的属主和属组都是root,这我们就明白了,现在需要写的是daemon用户,我们有两种方式可以解决这个问题,一是把其他人设为可写;另外一种是用ACL的方式把daemon用户设为可写。

Setfacl -m u:daemon:rw- config.inc.php,依此类推。

这时候我们有一个问题,当我们在填写的时候我们填写的用户名应该不是root,因为不安全,正确的办法是连上我们的mysql数据库,再库中创建一个和我们的网页一样的名字,然后建立一个可以对她有访问权限的用户即可。

Create database discuz;

GRANT ALL ON discuz.*.TO ‘myc’@’localhost’ IDENTIFIED BY ‘REDHAT’;

GRANT ALL ON discuz.*.TO ‘myc’@’127.0.0.1’ IDENTIFIED BY ‘REDHAT’;

FLUSSH PRIVILEGES;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<Directory “/www/magedu.com”>