LAMP在linux界甚至整个IT界可是相当的出名,其实现的功能很是强大。那LAMP到底是什么呢?L,即linux操作系统;A,即Apache服务器;M,即MySQL数据库;P,即PHP/Perl/Python等脚本语言。Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

此次介绍的源码编译安装LAMP,这里我们是在VMware虚拟机里实现的。安装次序为:apr --> apr-util --> httpd --> MySQL --> Php --> XCache。

在开始我们的源码编译安装前,请确保你的linux系统已经安装过开发工具和开发库,即:Development Libraries和Development Tools。

这里我们先下载好所有我们需要的各源码包,包括:apr-1.4.6.tar.bz2,apr-util-1.5.2.tar.bz2,httpd-2.4.4.tar.bz2,mysql-5.6.10-linux-glibc2.5-i686.tar.gz,php-5.4.13.tar.bz2,xcache-2.0.0.tar.bz2。还有两个我们先下载下来,phpMyAdmin-3.4.10.1-all-languages.tar.bz2和Discuz_X2.5_SC_GBK.zip。

这里我将各源码包放在了/root目录下了,放哪个目录下无所谓,好,下面我们一步步来编译安装各软件包。

首先解压apr-1.4.6.tar.bz2软件包。

tar xf apr-1.4.6.tar.bz2   #解压软件包

cd apr-1.4.6#进入该目录

./configure --prefix=/usr/local/apr   #指定我们源码编译的软件包安装目录

make  

make install

注意,这里我们之所以将我们的软件包安装在/usr/local/apr目录下,是因为我们的linux上自带有apr软件包,可使用rpm -q apr命令查看下,只是版本比较老而已。可能有些人会问,为什么不先卸载了在安装或者干脆升级呢,这样不会冲突么?其实我们是不能卸载自带的apr的,因为可能有些其他软件需要依赖老版本的apr,如果我们卸载了,可能导致这些依赖老版本apr的软件无法使用。这里我们采用的是多版本共存的方式编译安装的,只要将我们编译安装的新版本安装在不同目录下即可。因此,这里我们选择安装在/usr/local目录下。

同样的方式解压apr-util-1.5.2.tar.bz2源码包。

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   #指定我们该软件包的安装目录,这个是工具包,还需使用另一个选项告诉它apr软件包的位置

make

make install  

这两个安装完毕,下面我们去安装我们的httpd源码包。在安装该软件包之前,先解决其依赖关系,首先安装pcre-devel开发包。可使用yum命令,即yum install pcre-devel,或先用rpm -q pcre-devel查看是否已安装过该软件包。这里不再介绍。下面解压源码包。

tar xf httpd-2.4.4.tar.bz2   #解压该源码包

cd httpd-2.4.4

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event

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模型,可以自行修改为其他模型,如worker

想了解更多选项含义,可在该目录下使用如下命令:

./configure --help | less    #less是分频显示,可去掉

好吧,插播个广告,补充个知识点:

MPM: Multi Path Modules,多道处理模块(至关重要),包含以下几个模块:

  mpm_winnt:windows专用,这里不再介绍;

  prefork:一个请求用一个进程响应;

  worker:一个请求用一个线程响应。系统启动多个进程,每个进程生成多个线程。该模型下,每个web服务器会生成多个进程,而每个进程还可以生成多个线程,用每个线程来响应用户请求,默认web服务器启动两个进程。因linux对线程支持不好,测试发现在linux上worker没有prefork性能好,因此默认在linux上启用prefork。

  event:一个进程处理多个请求,该模型是基于事件驱动模型实现,在所有模型中该模型最强大。

想深入了解以上各模型请查阅相关资料,或关注我的博客,这里不再介绍。

回归正题,继续来完成编译安装我们的httpd。

修改httpd的主配置文件,设置其Pid文件的路径

vim /etc/httpd/httpd.conf     #修改配置文件,在配置文件中添加如下信息

PidFile "/var/run/httpd.pid"#添加该行信息,指定我们的httpd进程文件所在位置

我们知道,在我们启动RedHat5.8时,当开机启动某个服务时,会显示OK的字样,现在我们也实现这种效果。为我们的httpd提供SysV服务脚本。

vim /etc/rc.d/init.d/httpd    #编辑该文件,添加如下内容

#!/bin/bash          #脚本首行,必须有,其他‘#’的均为注释信息

#

# httpd        Startup script for the Apache HTTP Server

#

# chkconfig: - 85 15       #SysV风格脚本必须有该行信息,指定在2345级别写启动该服务

# description: Apache is a World Wide Web server.  It is used to serve \     #SysV风格脚本必须有该行信息

#          HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf      

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid      #这三行均为httpd配置文件相关信息,帮助理解该脚本

# 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}          #如果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    #调用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/rc.d/init.d/httpd     #为脚本服务赋予执行权限

记得在开启httpd服务前,关闭本机的selinux,否则有影响。使用如下命令:

getenforce    #查看本机的selinux情况,如果为permissive就不必修改

setenforce 0#关闭selinux,立即生效

vim /etc/selinux/config   #修改如下内容,可永久生效

SELINUX=permissive  

保存退出。

编辑添加环境变量

vim /etc/profile.d/httpd.sh  编辑该文件,添加如下一行信息

export PATH=$PATH:/usr/local/apache/bin    #添加环境变量,让系统可直接使用httpd命令

chkconfig --add httpd   #将httpd加入服务列表

chkconfig --list httpd   #可查看该服务脚本在各级别下的启动情况

service httpd start    #启动httpd服务进行测试

netstat -tunlp    #查看下本机的tcp/udp各端口监听情况,可以看到我们的80端口已开启,且处于监听状态

介绍httpd的几个命令:

httpd -l       #能列出当前服务器上编译时所支持的核心模块

httpd -t       #测试修改过httpd.conf文件后有没有语法错误

httpd -M       #表示显示所有额外装载的模块

至此,我们的http服务就建好了。一块来测试下效果吧。

本虚拟机的IP地址为172.16.32.1,因此,我们打开浏览器,在地址栏输入172.16.32.1,然后回车,可以看到显示有‘It works!’字样,证明我们的http服务可以正常使用了。查看下你使用的linux的IP地址,在地址栏输入你linux的IP,即可显示。

Linux LAMP平台构建_虚拟机



接下来,该安装我们的mysql了。

tar xf mysql-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local   #将该源码包解压到指定的目录下

cd /usr/local    #进入该目录

ln -sv mysql-5.6.10-linux-glibc2.5-i686 mysql  #创建mysql到mysql-5.6.10-linux-glibc2.5-i686的符号链接,这里我们不采用修改文件名的方式,而是创建链接

cd mysql   #进入该目录

在该目录下,有个data的目录,一看名字就知道,这个目录是存放我们的数据的地方。但请各位想想,数据存放在这个目录下会回很不安全,假如某个不法分子攻破我们的mysql服务器,就可以随便查看我们的数据了,这是很危险的,而且,我们的数据文件是动态增涨的,假如哪天我们分的磁盘满了那就不好办了。因此,这里,我们建议将我们的数据文件单独存放在一个磁盘中,且该磁盘格式为逻辑卷,因为,当我们的数据增涨很快时,如果我们的磁盘空间不够,我们可以修改逻辑卷,增大其容量。另一个问题就是,mysql目录下的所有文件都是root属主,root属组,当我们的mysql进程运行时,是以mysql的身份运行的,而mysql对该目录下的文件没有执行权限,因此我们就需要修改该目录下的所有文件及目录,让mysql具有执行权限,但目前我们系统现在还没有mysql用户,因此我们还需要创建mysql用户,mysql组。

先创建我们的逻辑卷。

fdisk /dev/sda  #创建一个新磁盘分区,将其格式修改为8e,即LVM格式。本机为/dev/sda5

partprobe /dev/sda   #让内核重读磁盘分区

pvcreate /dev/sda5     #创建物理卷

vgcreate myvg /dev/sda5    #创建卷组,卷组名为myvg

lvcreate -n mydata -L 5G myvg    #在卷组上创建逻辑卷,大小为5G,卷标为mydata

lvs     #查看创建的逻辑卷信息

mke2fs -j /dev/myvg/mydata    #格式化该逻辑卷

mkdir /mydata#创建该目录,用于挂载我们的逻辑卷

vim /etc/fstab   #编辑该文件,添加如下该行信息,将我们的创建的逻辑卷挂载至/mydata目录下

/dev/myvg/mydata       /mydata          ext3    defaults    00

mkdir /mydata/data       #创建该目录,用于存放我们mysql的数据文件

然后创建mysql用户mysql组。

groupadd -r -g 300 mysql    #创建系统组,并设置gid为300,系统组gid均小于500,可自行修改

useradd -r -g 300 -u 300 mysql   #创建mysql系统用户,并设置其gid、uid均为300

id mysql    #可查看我们刚创建的用户信息

cd /usr/local/mysql   #进入该目录

chown -R mysql.mysql .   #修改该目录下的所有文件和目录,及目录下的子目录子文件均为mysql属主属组

chown -R mysql.mysql /mydata/data    #修改该文件及子文件为mysql属主属组,方便mysql写入数据

cd /usr/local/mysql    #进入该目录

scripts/mysql_install_db --user=mysql --datadir=/mydata/data   #--user指定我们的mysql服务器创建的文件及目录以哪个用户运行,--datadir指定我们的数据文件所在目录,这里mysql不需要执行./configure命令

完成后,为我们的mysql提供配置文件,执行完上面的命令后,在我们的/etc目录下会生成一个文件叫my.cnf,这就是我们的mysql的配置文件,我们只需对其稍加修改即可使用。

vim /etc/my.cnf

datadir = /mydata/data   #修改我们的数据文件存放位置

保存退出。同样,为我们的mysql服务提供服务脚本。这里我们使用系统自带的,我们不需修改即可使用。

cp support-files/mysql.server  /etc/rc.d/init.d/mysqld   #将该目录下的脚本拷贝到指定目录下,并重命名

chmod +x /etc/rc.d/init.d/mysqld  #为我们创建的服务脚本赋予执行权限,如果该脚本已有执行权限,可不用执行该命令,这里本机显示有执行权限,没有执行此命令

vim /etc/profile.d/mysql      #编辑该文件,添加环境变量

export PATH=$PATH:/usr/local/mysql/bin  #添加环境变量,让系统直接使用mysql的命令

同样,将该服务脚本添加到服务列表。

chkconfig --add mysql     #添加该服务脚本至服务列表

chkconfig mysql on    #设置开机启动,默认级别为2345

service mysql start   #开启mysql服务

netstat -tunlp     #查看我们的mysql服务端口是否已开启,默认mysql监听在3306端口

现在为我们的mysql创建帮助手册,并添加其开发组件至系统。

在我们的mysql目录下,有个man目录,其下就是mysql的帮助手册了。

vim /etc/man.config   #编辑该文件,添加如下一行信息

MANPATH  /usr/local/mysql/man

ln -sv /usr/local/mysql/include /usr/include/mysql  #创建符号链接,输出mysql的头文件至系统头文件路径

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf   #添加该行信息,输出mysql的库文件给系统库查找路径

ldconfig     #让系统重新载入系统库

同样,介绍几个mysql的命令。

mysql  

  -u USERNAME :中间的空格可省,不指定默认为root

  -P:指定密码,不指定默认为空

  -h MYSQL_SERVER :指定连接的服务器地址,不指定默认为本机

如:mysql -uroot -p12345 -hlocalhost    #通过本机以root身份登录mysql,root密码为12345

执行完该命令就进入了mysql的命令行界面,在里边就可以进行mysql的操作了。想了解mysql的一些命令,可搜索相关资料。

Linux LAMP平台构建_Linux_02


至此,我们的mysql源码编译安装也已完毕。在命令上边提到,我们可以使用phpMyAdmin进入到图形界面来管理我们的mysql数据,但是这个需要php的支持,因此,我们先来安装php,然后再介绍如何用phpMyAdmin来管理我们的mysql数据。

在安装我们的php之前,先解决依赖关系,安装X Software Development,命令为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 -q libmcrypt和rpm -q libmcrypt-devel命令查看下有没有安装这两个库。

准备工作完成后,开始安装我们的php。

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

部分选项含义如下所示:

--prefix=/usr/local/php        #指定安装文件目录

--with-mysql=/usr/local/mysql     #指定所使用的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 2.0的处理器模块所在目录

--with-mcrypt                #支持mcrypt扩展

--with-config-file-path=/etc                   #指定配置文件所在目录

--with-config-file-scan-dir=/etc/php.d         #设定在哪个路径下扫描配置文件

--with-bz2              #支持BZip2

本人英语水平有限,以上如果解释你不懂,或想了解更多可在该目录下使用./configure --help命令查看。

make  

make test      #执行完上面的命令后,系统会提示你执行该命令,这是测试命令,切记,不要忘记,一定要执行该命令

make install    

为我们的php提供配置文件,我们依然选用安装php时生成的配置文件,这个可不用修改,直接拿来用。

先确保还在php-5.4.13目录下

cp php.ini-production /etc/php.ini    #将该目录下的文件复制到/etc下,并重命名作为我们的配置文件

vim /etc/httpd/httpd.conf    #编辑该文件,让apache支持php

AddType application/x-httpd-php  .php

AddType application/x-httpd-php-source  .phps   #添加该两行信息

同时找到DircetoryIndex,添加index.php,即修改为:

DircetoryIndex index.php index.html

至此,php安装成功,重启httpd服务即可实现支持php了。php安装完成了,那我们的php能否连接数据库呢?现在我们来测试下我们的php是否能够连接mysql数据库吧。

cd /usr/local/apache     #进入该目录下

vim htdocs/index.html   #编辑该文件,修改如下信息,你刚才测试httpd时,显示的内容就是这里定义的

<html>

<body><h1>Welcome to my LAMP!!!</h1>

<?php         #添加php脚本

$conn=mysql_connect('langdu','root','123456');    #调用mysql_connect函数,三个参数含义分别为主机名、登录数据库的用户名、登录数据库用户的用户密码

if ($conn)      #将上边函数的执行状态结果保存到conn中,然后判断

 echo "Success...";     #如果连接成功,输出Success...

else

 echo "Failure...";     #如果连接失败,输出Failure... ,使用‘;’结尾,不要忘记

?>

</body>

</html>

既然是php了,所以,修改后缀名。

mv htdocs/index.html htdocs/index.php

修改完毕。好了,现在打开我们的浏览器,在地址栏输入linux的IP地址,本机为172.16.32.1,因此,在地址栏输入172.16.32.1,回车,一切显示正常。

Linux LAMP平台构建_应用程序_03


现在我们的php已经安装好了,刚才介绍说可以通过phpMyAdmin来实现在图形化界面下管理我们的数据库,现在介绍如何配置phpMyAdmin。这里我们在虚拟主机中实现。下面介绍如何启用虚拟主机。

vim /etc/httpd/httpd.conf   #编辑httpd的主配置文件,找到Virtual hosts,修改如下信息

# Virtual hosts    #找到该行信息,这里就是用来定义虚拟主机的

Include /etc/httpd/extra/httpd-vhosts.conf   #启用该行,直接去掉前面的注释符即可

保存退出。

编辑上边提到的文件httpd-vhosts.conf。

vim /etc/httpd/extra/httpd-vhosts.conf  #编辑该文件,修改如下信息

<VirtualHost *:80>    #表示监听本机所有地址的80端口,这是http的端口

  DocumentRoot "/www/1.com"#新建该目录,指定虚拟主机文档根目录,网页文件的存放位置,此目录可自行修改,修改后重启服务即可生效。

  ServerName www.1.com#指定服务器主机名,待会在地址栏输入该名称即可

  <Directory "/www/1.com">       #定义该路径如何被访问

      Options none         #定义/var/www/html目录下所有的网页文档在被访问时的访问属性,有多个时可用空格隔开      

      AllowOverride none

      Require all granted    #定义允许所有人访问,否则待会我们在浏览器就打不开网页了

 </Directory>

  ErrorLog "logs/1.com-error_log"#定义错误日志存放文件,该目录是相对于ServerRoot的目录,查看httpd.conf配置文件可看到ServerRoot为"/usr/local/apache

  CustomLog "logs/1.com-access_log" combined   #定义访问日志文件,文件记录格式为combined,可在httpd.conf配置文件中查看包含哪些信息

</VirtualHost>    

你会看到里边定义有两个虚拟主机样例,我们只修改这一个,另一个不管它。但待会检查及重启服务时可能会报错,与我们无关先不管它,你要真不想重启服务时报错可删掉。保存退出。

因为我们这里是在虚拟机上实现的,现在修改我们windows上的hosts文件,目录为C:\Windows\System32\drivers\etc添加如下信息:

172.16.32.1www.1.com   #添加该信息,实现本地解析

保存退出,在DOC命令界面,输入ping www.1.com,可以解析成功。

Linux LAMP平台构建_应用程序_04


mkdir /www/1.com -pv    #创建该目录

httpd -t     #检查配置文件有没有语法错误,因我们另一个虚拟主机没有配置,会报错,不用管它

service httpd restart  #重启服务,也可以待会我们配置好再重启

现在去解压我们的phpMyAdmin软件包。软件包我们已下载完毕,直接解压。

tar xf phpMyAdmin-3.4.10.1-all-languages.tar.bz2  #解压该软件包

mv phpMyAdmin-3.5.1-all-languages /www/1.com/pma   #将解压得到的目录文件移动到该目录下,并命名为pma

service httpd restart  #为了确保万无一失,我们在重启下服务  

现在打开浏览器,在地址栏输入www.1.com/pma,然后回车。

下面是显示效果。

下图是登陆界面:

Linux LAMP平台构建_Linux_05

下图是登录后的主界面:

现在我们再来看另外一个基于php的动态网站。我们先去修改配置文件。

vim /etc/httpd/extra/httpd-vhosts.conf  #编辑该文件,将另一个虚拟主机配置修改如下信息

<VirtualHost *:80>

  DocumentRoot "/www/2.com"

  ServerName www.2.com

  <Directory "/www/2.com">

      Options none

      AllowOverride none

      Require all granted

 </Directory>

  ErrorLog "logs/2.com-error_log"

  CustomLog "logs/2.com-access_log" combined

</VirtualHost>

修改完后保存退出。

httpd -t   #检查语法有没有错误

unzip Discuz_X2.5_SC_GBK.zip   #解压该文件,会发现目录下多了三个目录,readme、upload和utilities。我们只需要将upload里的文件复制出来即可。

mv upload/* /www/2.com/   #移动upload目录下的所有文件到该目录下来。

因为我们这里是在虚拟机上实现的,现在修改我们windows上的hosts文件,目录为C:\Windows\System32\drivers\etc添加如下信息:

172.16.32.1     www.2.com#添加该信息,实现本地解析

保存退出,在DOC命令界面,输入ping www.2.com,可以解析成功。

service httpd restart  #重启服务

现在在浏览器地址栏输入www.2.com就可以打开Discuz了,但还是安装向导界面。本想贴出所有截图,但是图片总显示有问题,只显示一半。这里就贴出部分图片吧。下面有附件,想查看显示效果的,可下载图片查看下。

进入安装向导界面1后,会显示有一些目录我们没有写权限,我们现在去修改各目录,让其具有写权限。请先确保当前处于/www/2.com目录下。

chmod 777 config/ data/ data/cache/ data/avatar/ data/plugindata/ data/download/ data/addonmd5/ data/template/ data/threadcache/ data/p_w_upload/ data/p_w_upload/album/ data/p_w_upload/forum/ data/p_w_upload/group/ data/log/

chmod 777 uc_client/data/cache/ uc_server/data/ uc_server/data/cache/ uc_server/data/avatar/ uc_server/data/backup/ uc_server/data/logs/ uc_server/data/tmp/ uc_server/data/view/

修改完毕后点击下一步,进入如下界面:

Linux LAMP平台构建_虚拟机_06

修改完毕,点击下一步,填好点下一步即可完成安装。完毕后我们点暂不开通,就进入主界面了。如下图。

Linux LAMP平台构建_应用程序_07

貌似Xcache还没介绍如何安装嘞。这里就暂不介绍了。想知道如何安装可关注我的博客或查找相关资料。

这个组合在linux界甚至整个IT界可是相当的出名,其实现的功能很是强大。待会给你个图表,你看一下就知道LAMP有多强大了。说了这么多,那LAMP到底是什么呢?既然是组合,那就先介绍下各自代表什么吧。L,即linux操作系统;A,即Apache服务器;M,即MySQL数据库;P,即PHP/Perl/Python等脚本语言。Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案。

下面是一个图表,介绍几个比较出名的网站的架构。


System

Server

Storage

Script

Yahoo

FreeBSD   + Linux

Apache

MySQL

PHP

Facebook

FreeBSD

Apache

MySQL   + Memcached

PHP

Wikimedia

Linux

Apache   + Lighttpd

MySQL   + Memcached

PHP

Flickr

Redhat   Linux

Apache

MySQL   + Memcached

PHP+   Perl

Sina

FreeBSD   + Solaris

Apache   + Nginx

MySQL   + Memcached

PHP

YouTube

Suse   Linux

Apache   + Lighttpd

MySQL

Python

从上表你应该已经看出来LAMP的强大之处了吧。因为是源码编译安装,下面就介绍下我们所使用的各个软件。此次介绍的源码编译安装LAMP,这里我们是在VMware虚拟机里实现的。linux系统使用的是RedHat5.8发行版;Apache服务器主要提供http服务,使用的是 httpd-2.4.4.tar.bz2源码包,httpd-2.4.4需要较新版本的apr和apr-util,这里我们使用的是apr-1.4.6.tar.bz2源码包,及apr-util-1.5.2.tar.bz2源码包;MySQL用来提供数据库支持,使用的是mysql-5.6.10-linux-glibc2.5-i686.tar.gz源码包;这里我们使用PHP脚本语言,主要用来提供动态网页效果,使用的版本为php-5.4.13.tar.bz2源码包。各源码包这里不再提供,请各位自行搜索下载。既然都是一个个的源码包,这里我们先来介绍下各自的安装次序,这可不是随便安装哪个都可以的,所以请各位看好了,记好了,不按要求安装,弄错了自行负责啊。 安装次序为:apr --> apr-util --> httpd --> MySQL --> Php --> XCache

下面介绍下为何是这样的安装次序。上边已经提到了,在linux上安装httpd,但其依赖apr和apr-util,所以我们需先安装apr和apr-util。而apr-util是apr的工具包。安装过apr和apr-util及httpd后,因php安装时需mysql的支持,所以需先安装mysql然后安装php。XCache是为php提供加速功能的。到时候我们看情况,如何允许介绍如何安装。在安装mysql后会介绍一个软件,该软件可实现在图形化界面下管理我们linux中的数据库。php安装完成后介绍一个基于php的开源的动态网站,该网站所显示的界面我们在很多地方都见过。

在开始我们的源码编译安装前,请确保你的linux系统已经安装过开发工具和开发库,即:Development Libraries和Development Tools。安装方法为,先确保本机有yum源然后使用该命令yum groupinstall "Development Libraries" "Development Tools"即可。因我们是在虚拟机里实现,因此,请确保你的虚拟机时间正确,因我们使用的各个软件版本基本上都是最新版的,如果你虚拟机的时间不对,可能会显示该软件来自未来,无法识别。因此,在编译安装前请确保你的时间是正确的。下面我们就开始吧。

这里我们先下载好所有我们需要的各源码包,包括:apr-1.4.6.tar.bz2,apr-util-1.5.2.tar.bz2,httpd-2.4.4.tar.bz2,mysql-5.6.10-linux-glibc2.5-i686.tar.gz,php-5.4.13.tar.bz2,xcache-2.0.0.tar.bz2。还有两个我们先下载下来,phpMyAdmin-3.4.10.1-all-languages.tar.bz2和Discuz_X2.5_SC_GBK.zip。

这里我将各源码包放在了/root目录下了,放哪个目录下无所谓,好,下面我们一步步来编译安装各软件包。

首先解压apr-1.4.6.tar.bz2软件包。

tar xf apr-1.4.6.tar.bz2   #解压软件包

cd apr-1.4.6#进入该目录

./configure --prefix=/usr/local/apr   #指定我们源码编译的软件包安装目录

make  

make install

注意,这里我们之所以将我们的软件包安装在/usr/local/apr目录下,是因为我们的linux上自带有apr软件包,可使用rpm -q apr命令查看下,只是版本比较老而已。可能有些人会问,为什么不先卸载了在安装或者干脆升级呢,这样不会冲突么?其实我们是不能卸载自带的apr的,因为可能有些其他软件需要依赖老版本的apr,如果我们卸载了,可能导致这些依赖老版本apr的软件无法使用。这里我们采用的是多版本共存的方式编译安装的,只要将我们编译安装的新版本安装在不同目录下即可。因此,这里我们选择安装在/usr/local目录下。

同样的方式解压apr-util-1.5.2.tar.bz2源码包。

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   #指定我们该软件包的安装目录,这个是工具包,还需使用另一个选项告诉它apr软件包的位置

make

make install  

这两个安装完毕,下面我们去安装我们的httpd源码包。在安装该软件包之前,先解决其依赖关系,首先安装pcre-devel开发包。可使用yum命令,即yum install pcre-devel,或先用rpm -q pcre-devel查看是否已安装过该软件包。这里不再介绍。下面解压源码包。

tar xf httpd-2.4.4.tar.bz2   #解压该源码包

cd httpd-2.4.4

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event

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模型,可以自行修改为其他模型,如worker

想了解更多选项含义,可在该目录下使用如下命令:

./configure --help | less    #less是分频显示,可去掉

好吧,插播个广告,补充个知识点:

MPM: Multi Path Modules,多道处理模块(至关重要),包含以下几个模块:

  mpm_winnt:windows专用,这里不再介绍;

  prefork:一个请求用一个进程响应;

  worker:一个请求用一个线程响应。系统启动多个进程,每个进程生成多个线程。该模型下,每个web服务器会生成多个进程,而每个进程还可以生成多个线程,用每个线程来响应用户请求,默认web服务器启动两个进程。因linux对线程支持不好,测试发现在linux上worker没有prefork性能好,因此默认在linux上启用prefork。

  event:一个进程处理多个请求,该模型是基于事件驱动模型实现,在所有模型中该模型最强大。

想深入了解以上各模型请查阅相关资料,或关注我的博客,这里不再介绍。

回归正题,继续来完成编译安装我们的httpd。

修改httpd的主配置文件,设置其Pid文件的路径

vim /etc/httpd/httpd.conf     #修改配置文件,在配置文件中添加如下信息

PidFile "/var/run/httpd.pid"#添加该行信息,指定我们的httpd进程文件所在位置

我们知道,在我们启动RedHat5.8时,当开机启动某个服务时,会显示OK的字样,现在我们也实现这种效果。为我们的httpd提供SysV服务脚本。

vim /etc/rc.d/init.d/httpd    #编辑该文件,添加如下内容

#!/bin/bash          #脚本首行,必须有,其他‘#’的均为注释信息

#

# httpd        Startup script for the Apache HTTP Server

#

# chkconfig: - 85 15       #SysV风格脚本必须有该行信息,指定在2345级别写启动该服务

# description: Apache is a World Wide Web server.  It is used to serve \     #SysV风格脚本必须有该行信息

#          HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf      

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid      #这三行均为httpd配置文件相关信息,帮助理解该脚本

# 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}          #如果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    #调用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/rc.d/init.d/httpd     #为脚本服务赋予执行权限

记得在开启httpd服务前,关闭本机的selinux,否则有影响。使用如下命令:

getenforce    #查看本机的selinux情况,如果为permissive就不必修改

setenforce 0#关闭selinux,立即生效

vim /etc/selinux/config   #修改如下内容,可永久生效

SELINUX=permissive  

保存退出。

编辑添加环境变量

vim /etc/profile.d/httpd.sh  编辑该文件,添加如下一行信息

export PATH=$PATH:/usr/local/apache/bin    #添加环境变量,让系统可直接使用httpd命令

chkconfig --add httpd   #将httpd加入服务列表

chkconfig --list httpd   #可查看该服务脚本在各级别下的启动情况

service httpd start    #启动httpd服务进行测试

netstat -tunlp    #查看下本机的tcp/udp各端口监听情况,可以看到我们的80端口已开启,且处于监听状态

介绍httpd的几个命令:

httpd -l       #能列出当前服务器上编译时所支持的核心模块

httpd -t       #测试修改过httpd.conf文件后有没有语法错误

httpd -M       #表示显示所有额外装载的模块

至此,我们的http服务就建好了。一块来测试下效果吧。

本虚拟机的IP地址为172.16.32.1,因此,我们打开浏览器,在地址栏输入172.16.32.1,然后回车,可以看到显示有‘It works!’字样,证明我们的http服务可以正常使用了。查看下你使用的linux的IP地址,在地址栏输入你linux的IP,即可显示。

Linux LAMP平台构建_应用程序_08



接下来,该安装我们的mysql了。

tar xf mysql-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local   #将该源码包解压到指定的目录下

cd /usr/local    #进入该目录

ln -sv mysql-5.6.10-linux-glibc2.5-i686 mysql  #创建mysql到mysql-5.6.10-linux-glibc2.5-i686的符号链接,这里我们不采用修改文件名的方式,而是创建链接

cd mysql   #进入该目录

在该目录下,有个data的目录,一看名字就知道,这个目录是存放我们的数据的地方。但请各位想想,数据存放在这个目录下会回很不安全,假如某个不法分子攻破我们的mysql服务器,就可以随便查看我们的数据了,这是很危险的,而且,我们的数据文件是动态增涨的,假如哪天我们分的磁盘满了那就不好办了。因此,这里,我们建议将我们的数据文件单独存放在一个磁盘中,且该磁盘格式为逻辑卷,因为,当我们的数据增涨很快时,如果我们的磁盘空间不够,我们可以修改逻辑卷,增大其容量。另一个问题就是,mysql目录下的所有文件都是root属主,root属组,当我们的mysql进程运行时,是以mysql的身份运行的,而mysql对该目录下的文件没有执行权限,因此我们就需要修改该目录下的所有文件及目录,让mysql具有执行权限,但目前我们系统现在还没有mysql用户,因此我们还需要创建mysql用户,mysql组。

先创建我们的逻辑卷。

fdisk /dev/sda  #创建一个新磁盘分区,将其格式修改为8e,即LVM格式。本机为/dev/sda5

partprobe /dev/sda   #让内核重读磁盘分区

pvcreate /dev/sda5     #创建物理卷

vgcreate myvg /dev/sda5    #创建卷组,卷组名为myvg

lvcreate -n mydata -L 5G myvg    #在卷组上创建逻辑卷,大小为5G,卷标为mydata

lvs     #查看创建的逻辑卷信息

mke2fs -j /dev/myvg/mydata    #格式化该逻辑卷

mkdir /mydata#创建该目录,用于挂载我们的逻辑卷

vim /etc/fstab   #编辑该文件,添加如下该行信息,将我们的创建的逻辑卷挂载至/mydata目录下

/dev/myvg/mydata       /mydata          ext3    defaults    00

mkdir /mydata/data       #创建该目录,用于存放我们mysql的数据文件

然后创建mysql用户mysql组。

groupadd -r -g 300 mysql    #创建系统组,并设置gid为300,系统组gid均小于500,可自行修改

useradd -r -g 300 -u 300 mysql   #创建mysql系统用户,并设置其gid、uid均为300

id mysql    #可查看我们刚创建的用户信息

cd /usr/local/mysql   #进入该目录

chown -R mysql.mysql .   #修改该目录下的所有文件和目录,及目录下的子目录子文件均为mysql属主属组

chown -R mysql.mysql /mydata/data    #修改该文件及子文件为mysql属主属组,方便mysql写入数据

cd /usr/local/mysql    #进入该目录

scripts/mysql_install_db --user=mysql --datadir=/mydata/data   #--user指定我们的mysql服务器创建的文件及目录以哪个用户运行,--datadir指定我们的数据文件所在目录,这里mysql不需要执行./configure命令

完成后,为我们的mysql提供配置文件,执行完上面的命令后,在我们的/etc目录下会生成一个文件叫my.cnf,这就是我们的mysql的配置文件,我们只需对其稍加修改即可使用。

vim /etc/my.cnf

datadir = /mydata/data   #修改我们的数据文件存放位置

保存退出。同样,为我们的mysql服务提供服务脚本。这里我们使用系统自带的,我们不需修改即可使用。

cp support-files/mysql.server  /etc/rc.d/init.d/mysqld   #将该目录下的脚本拷贝到指定目录下,并重命名

chmod +x /etc/rc.d/init.d/mysqld  #为我们创建的服务脚本赋予执行权限,如果该脚本已有执行权限,可不用执行该命令,这里本机显示有执行权限,没有执行此命令

vim /etc/profile.d/mysql      #编辑该文件,添加环境变量

export PATH=$PATH:/usr/local/mysql/bin  #添加环境变量,让系统直接使用mysql的命令

同样,将该服务脚本添加到服务列表。

chkconfig --add mysql     #添加该服务脚本至服务列表

chkconfig mysql on    #设置开机启动,默认级别为2345

service mysql start   #开启mysql服务

netstat -tunlp     #查看我们的mysql服务端口是否已开启,默认mysql监听在3306端口

现在为我们的mysql创建帮助手册,并添加其开发组件至系统。

在我们的mysql目录下,有个man目录,其下就是mysql的帮助手册了。

vim /etc/man.config   #编辑该文件,添加如下一行信息

MANPATH  /usr/local/mysql/man

ln -sv /usr/local/mysql/include /usr/include/mysql  #创建符号链接,输出mysql的头文件至系统头文件路径

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf   #添加该行信息,输出mysql的库文件给系统库查找路径

ldconfig     #让系统重新载入系统库

同样,介绍几个mysql的命令。

mysql  

  -u USERNAME :中间的空格可省,不指定默认为root

  -P:指定密码,不指定默认为空

  -h MYSQL_SERVER :指定连接的服务器地址,不指定默认为本机

如:mysql -uroot -p12345 -hlocalhost    #通过本机以root身份登录mysql,root密码为12345

执行完该命令就进入了mysql的命令行界面,在里边就可以进行mysql的操作了。想了解mysql的一些命令,可搜索相关资料。

Linux LAMP平台构建_应用程序_09

至此,我们的mysql源码编译安装也已完毕。在命令上边提到,我们可以使用phpMyAdmin进入到图形界面来管理我们的mysql数据,但是这个需要php的支持,因此,我们先来安装php,然后再介绍如何用phpMyAdmin来管理我们的mysql数据。

在安装我们的php之前,先解决依赖关系,安装X Software Development,命令为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 -q libmcrypt和rpm -q libmcrypt-devel命令查看下有没有安装这两个库。

准备工作完成后,开始安装我们的php。

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

部分选项含义如下所示:

--prefix=/usr/local/php        #指定安装文件目录

--with-mysql=/usr/local/mysql     #指定所使用的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 2.0的处理器模块所在目录

--with-mcrypt                #支持mcrypt扩展

--with-config-file-path=/etc                   #指定配置文件所在目录

--with-config-file-scan-dir=/etc/php.d         #设定在哪个路径下扫描配置文件

--with-bz2              #支持BZip2

本人英语水平有限,以上如果解释你不懂,或想了解更多可在该目录下使用./configure --help命令查看。

make  

make test      #执行完上面的命令后,系统会提示你执行该命令,这是测试命令,切记,不要忘记,一定要执行该命令

make install    

为我们的php提供配置文件,我们依然选用安装php时生成的配置文件,这个可不用修改,直接拿来用。

先确保还在php-5.4.13目录下

cp php.ini-production /etc/php.ini    #将该目录下的文件复制到/etc下,并重命名作为我们的配置文件

vim /etc/httpd/httpd.conf    #编辑该文件,让apache支持php

AddType application/x-httpd-php  .php

AddType application/x-httpd-php-source  .phps   #添加该两行信息

同时找到DircetoryIndex,添加index.php,即修改为:

DircetoryIndex index.php index.html

至此,php安装成功,重启httpd服务即可实现支持php了。php安装完成了,那我们的php能否连接数据库呢?现在我们来测试下我们的php是否能够连接mysql数据库吧。

cd /usr/local/apache     #进入该目录下

vim htdocs/index.html   #编辑该文件,修改如下信息,你刚才测试httpd时,显示的内容就是这里定义的

<html>

<body><h1>Welcome to my LAMP!!!</h1>

<?php         #添加php脚本

$conn=mysql_connect('langdu','root','123456');    #调用mysql_connect函数,三个参数含义分别为主机名、登录数据库的用户名、登录数据库用户的用户密码

if ($conn)      #将上边函数的执行状态结果保存到conn中,然后判断

 echo "Success...";     #如果连接成功,输出Success...

else

 echo "Failure...";     #如果连接失败,输出Failure... ,使用‘;’结尾,不要忘记

?>

</body>

</html>

既然是php了,所以,修改后缀名。

mv htdocs/index.html htdocs/index.php

修改完毕。好了,现在打开我们的浏览器,在地址栏输入linux的IP地址,本机为172.16.32.1,因此,在地址栏输入172.16.32.1,回车,一切显示正常。

Linux LAMP平台构建_Linux_10

现在我们的php已经安装好了,刚才介绍说可以通过phpMyAdmin来实现在图形化界面下管理我们的数据库,现在介绍如何配置phpMyAdmin。这里我们在虚拟主机中实现。下面介绍如何启用虚拟主机。

vim /etc/httpd/httpd.conf   #编辑httpd的主配置文件,找到Virtual hosts,修改如下信息

# Virtual hosts    #找到该行信息,这里就是用来定义虚拟主机的

Include /etc/httpd/extra/httpd-vhosts.conf   #启用该行,直接去掉前面的注释符即可

保存退出。

编辑上边提到的文件httpd-vhosts.conf。

vim /etc/httpd/extra/httpd-vhosts.conf  #编辑该文件,修改如下信息

<VirtualHost *:80>    #表示监听本机所有地址的80端口,这是http的端口

  DocumentRoot "/www/1.com"#新建该目录,指定虚拟主机文档根目录,网页文件的存放位置,此目录可自行修改,修改后重启服务即可生效。

  ServerName www.1.com#指定服务器主机名,待会在地址栏输入该名称即可

  <Directory "/www/1.com">       #定义该路径如何被访问

      Options none         #定义/var/www/html目录下所有的网页文档在被访问时的访问属性,有多个时可用空格隔开      

      AllowOverride none

      Require all granted    #定义允许所有人访问,否则待会我们在浏览器就打不开网页了

 </Directory>

  ErrorLog "logs/1.com-error_log"#定义错误日志存放文件,该目录是相对于ServerRoot的目录,查看httpd.conf配置文件可看到ServerRoot为"/usr/local/apache

  CustomLog "logs/1.com-access_log" combined   #定义访问日志文件,文件记录格式为combined,可在httpd.conf配置文件中查看包含哪些信息

</VirtualHost>    

你会看到里边定义有两个虚拟主机样例,我们只修改这一个,另一个不管它。但待会检查及重启服务时可能会报错,与我们无关先不管它,你要真不想重启服务时报错可删掉。保存退出。

因为我们这里是在虚拟机上实现的,现在修改我们windows上的hosts文件,目录为C:\Windows\System32\drivers\etc添加如下信息:

172.16.32.1www.1.com   #添加该信息,实现本地解析

保存退出,在DOC命令界面,输入ping www.1.com,可以解析成功。

Linux LAMP平台构建_Linux_11

mkdir /www/1.com -pv    #创建该目录

httpd -t     #检查配置文件有没有语法错误,因我们另一个虚拟主机没有配置,会报错,不用管它

service httpd restart  #重启服务,也可以待会我们配置好再重启

现在去解压我们的phpMyAdmin软件包。软件包我们已下载完毕,直接解压。

tar xf phpMyAdmin-3.4.10.1-all-languages.tar.bz2  #解压该软件包

mv phpMyAdmin-3.5.1-all-languages /www/1.com/pma   #将解压得到的目录文件移动到该目录下,并命名为pma

service httpd restart  #为了确保万无一失,我们在重启下服务  

现在打开浏览器,在地址栏输入www.1.com/pma,然后回车。

下面是显示效果。

下图是登陆界面:

Linux LAMP平台构建_应用程序_12

下图是登录后的主界面:

Linux LAMP平台构建_应用程序_13

现在我们再来看另外一个基于php的动态网站。我们先去修改配置文件。

vim /etc/httpd/extra/httpd-vhosts.conf  #编辑该文件,将另一个虚拟主机配置修改如下信息

<VirtualHost *:80>

  DocumentRoot "/www/2.com"

  ServerName www.2.com

  <Directory "/www/2.com">

      Options none

      AllowOverride none

      Require all granted

 </Directory>

  ErrorLog "logs/2.com-error_log"

  CustomLog "logs/2.com-access_log" combined

</VirtualHost>

修改完后保存退出。

httpd -t   #检查语法有没有错误

unzip Discuz_X2.5_SC_GBK.zip   #解压该文件,会发现目录下多了三个目录,readme、upload和utilities。我们只需要将upload里的文件复制出来即可。

mv upload/* /www/2.com/   #移动upload目录下的所有文件到该目录下来。

因为我们这里是在虚拟机上实现的,现在修改我们windows上的hosts文件,目录为C:\Windows\System32\drivers\etc添加如下信息:

172.16.32.1     www.2.com#添加该信息,实现本地解析

保存退出,在DOC命令界面,输入ping www.2.com,可以解析成功。

service httpd restart  #重启服务

现在在浏览器地址栏输入www.2.com就可以打开Discuz了,但还是安装向导界面。本想贴出所有截图,但是图片总显示有问题,只显示一半。这里就贴出部分图片吧。下面有附件,想查看显示效果的,可下载图片查看下。

进入安装向导界面1后,会显示有一些目录我们没有写权限,我们现在去修改各目录,让其具有写权限。请先确保当前处于/www/2.com目录下。

chmod 777 config/ data/ data/cache/ data/avatar/ data/plugindata/ data/download/ data/addonmd5/ data/template/ data/threadcache/ data/p_w_upload/ data/p_w_upload/album/ data/p_w_upload/forum/ data/p_w_upload/group/ data/log/

chmod 777 uc_client/data/cache/ uc_server/data/ uc_server/data/cache/ uc_server/data/avatar/ uc_server/data/backup/ uc_server/data/logs/ uc_server/data/tmp/ uc_server/data/view/

修改完毕后点击下一步,进入如下界面:

Linux LAMP平台构建_虚拟机_14

修改完毕,点击下一步,填好点下一步即可完成安装。完毕后我们点暂不开通,就进入主界面了。如下图。

貌似Xcache还没介绍如何安装嘞。这里就暂不介绍了。想知道如何安装可关注我的博客或查找相关资料。

这个组合在linux界甚至整个IT界可是相当的出名,其实现的功能很是强大。待会给你个图表,你看一下就知道LAMP有多强大了。说了这么多,那LAMP到底是什么呢?既然是组合,那就先介绍下各自代表什么吧。L,即linux操作系统;A,即Apache服务器;M,即MySQL数据库;P,即PHP/Perl/Python等脚本语言。Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案。

下面是一个图表,介绍几个比较出名的网站的架构。


System

Server

Storage

Script

Yahoo

FreeBSD   + Linux

Apache

MySQL

PHP

Facebook

FreeBSD

Apache

MySQL   + Memcached

PHP

Wikimedia

Linux

Apache   + Lighttpd

MySQL   + Memcached

PHP

Flickr

Redhat   Linux

Apache

MySQL   + Memcached

PHP+   Perl

Sina

FreeBSD   + Solaris

Apache   + Nginx

MySQL   + Memcached

PHP

YouTube

Suse   Linux

Apache   + Lighttpd

MySQL

Python

从上表你应该已经看出来LAMP的强大之处了吧。因为是源码编译安装,下面就介绍下我们所使用的各个软件。此次介绍的源码编译安装LAMP,这里我们是在VMware虚拟机里实现的。linux系统使用的是RedHat5.8发行版;Apache服务器主要提供http服务,使用的是 httpd-2.4.4.tar.bz2源码包,httpd-2.4.4需要较新版本的apr和apr-util,这里我们使用的是apr-1.4.6.tar.bz2源码包,及apr-util-1.5.2.tar.bz2源码包;MySQL用来提供数据库支持,使用的是mysql-5.6.10-linux-glibc2.5-i686.tar.gz源码包;这里我们使用PHP脚本语言,主要用来提供动态网页效果,使用的版本为php-5.4.13.tar.bz2源码包。各源码包这里不再提供,请各位自行搜索下载。既然都是一个个的源码包,这里我们先来介绍下各自的安装次序,这可不是随便安装哪个都可以的,所以请各位看好了,记好了,不按要求安装,弄错了自行负责啊。 安装次序为:apr --> apr-util --> httpd --> MySQL --> Php --> XCache

下面介绍下为何是这样的安装次序。上边已经提到了,在linux上安装httpd,但其依赖apr和apr-util,所以我们需先安装apr和apr-util。而apr-util是apr的工具包。安装过apr和apr-util及httpd后,因php安装时需mysql的支持,所以需先安装mysql然后安装php。XCache是为php提供加速功能的。到时候我们看情况,如何允许介绍如何安装。在安装mysql后会介绍一个软件,该软件可实现在图形化界面下管理我们linux中的数据库。php安装完成后介绍一个基于php的开源的动态网站,该网站所显示的界面我们在很多地方都见过。

在开始我们的源码编译安装前,请确保你的linux系统已经安装过开发工具和开发库,即:Development Libraries和Development Tools。安装方法为,先确保本机有yum源然后使用该命令yum groupinstall "Development Libraries" "Development Tools"即可。因我们是在虚拟机里实现,因此,请确保你的虚拟机时间正确,因我们使用的各个软件版本基本上都是最新版的,如果你虚拟机的时间不对,可能会显示该软件来自未来,无法识别。因此,在编译安装前请确保你的时间是正确的。下面我们就开始吧。

这里我们先下载好所有我们需要的各源码包,包括:apr-1.4.6.tar.bz2,apr-util-1.5.2.tar.bz2,httpd-2.4.4.tar.bz2,mysql-5.6.10-linux-glibc2.5-i686.tar.gz,php-5.4.13.tar.bz2,xcache-2.0.0.tar.bz2。还有两个我们先下载下来,phpMyAdmin-3.4.10.1-all-languages.tar.bz2和Discuz_X2.5_SC_GBK.zip。

这里我将各源码包放在了/root目录下了,放哪个目录下无所谓,好,下面我们一步步来编译安装各软件包。

首先解压apr-1.4.6.tar.bz2软件包。

tar xf apr-1.4.6.tar.bz2   #解压软件包

cd apr-1.4.6#进入该目录

./configure --prefix=/usr/local/apr   #指定我们源码编译的软件包安装目录

make  

make install

注意,这里我们之所以将我们的软件包安装在/usr/local/apr目录下,是因为我们的linux上自带有apr软件包,可使用rpm -q apr命令查看下,只是版本比较老而已。可能有些人会问,为什么不先卸载了在安装或者干脆升级呢,这样不会冲突么?其实我们是不能卸载自带的apr的,因为可能有些其他软件需要依赖老版本的apr,如果我们卸载了,可能导致这些依赖老版本apr的软件无法使用。这里我们采用的是多版本共存的方式编译安装的,只要将我们编译安装的新版本安装在不同目录下即可。因此,这里我们选择安装在/usr/local目录下。

同样的方式解压apr-util-1.5.2.tar.bz2源码包。

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   #指定我们该软件包的安装目录,这个是工具包,还需使用另一个选项告诉它apr软件包的位置

make

make install  

这两个安装完毕,下面我们去安装我们的httpd源码包。在安装该软件包之前,先解决其依赖关系,首先安装pcre-devel开发包。可使用yum命令,即yum install pcre-devel,或先用rpm -q pcre-devel查看是否已安装过该软件包。这里不再介绍。下面解压源码包。

tar xf httpd-2.4.4.tar.bz2   #解压该源码包

cd httpd-2.4.4

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event

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模型,可以自行修改为其他模型,如worker

想了解更多选项含义,可在该目录下使用如下命令:

./configure --help | less    #less是分频显示,可去掉

好吧,插播个广告,补充个知识点:

MPM: Multi Path Modules,多道处理模块(至关重要),包含以下几个模块:

  mpm_winnt:windows专用,这里不再介绍;

  prefork:一个请求用一个进程响应;

  worker:一个请求用一个线程响应。系统启动多个进程,每个进程生成多个线程。该模型下,每个web服务器会生成多个进程,而每个进程还可以生成多个线程,用每个线程来响应用户请求,默认web服务器启动两个进程。因linux对线程支持不好,测试发现在linux上worker没有prefork性能好,因此默认在linux上启用prefork。

  event:一个进程处理多个请求,该模型是基于事件驱动模型实现,在所有模型中该模型最强大。

想深入了解以上各模型请查阅相关资料,或关注我的博客,这里不再介绍。

回归正题,继续来完成编译安装我们的httpd。

修改httpd的主配置文件,设置其Pid文件的路径

vim /etc/httpd/httpd.conf     #修改配置文件,在配置文件中添加如下信息

PidFile "/var/run/httpd.pid"#添加该行信息,指定我们的httpd进程文件所在位置

我们知道,在我们启动RedHat5.8时,当开机启动某个服务时,会显示OK的字样,现在我们也实现这种效果。为我们的httpd提供SysV服务脚本。

vim /etc/rc.d/init.d/httpd    #编辑该文件,添加如下内容

#!/bin/bash          #脚本首行,必须有,其他‘#’的均为注释信息

#

# httpd        Startup script for the Apache HTTP Server

#

# chkconfig: - 85 15       #SysV风格脚本必须有该行信息,指定在2345级别写启动该服务

# description: Apache is a World Wide Web server.  It is used to serve \     #SysV风格脚本必须有该行信息

#          HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf      

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid      #这三行均为httpd配置文件相关信息,帮助理解该脚本

# 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}          #如果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    #调用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/rc.d/init.d/httpd     #为脚本服务赋予执行权限

记得在开启httpd服务前,关闭本机的selinux,否则有影响。使用如下命令:

getenforce    #查看本机的selinux情况,如果为permissive就不必修改

setenforce 0#关闭selinux,立即生效

vim /etc/selinux/config   #修改如下内容,可永久生效

SELINUX=permissive  

保存退出。

编辑添加环境变量

vim /etc/profile.d/httpd.sh  编辑该文件,添加如下一行信息

export PATH=$PATH:/usr/local/apache/bin    #添加环境变量,让系统可直接使用httpd命令

chkconfig --add httpd   #将httpd加入服务列表

chkconfig --list httpd   #可查看该服务脚本在各级别下的启动情况

service httpd start    #启动httpd服务进行测试

netstat -tunlp    #查看下本机的tcp/udp各端口监听情况,可以看到我们的80端口已开启,且处于监听状态

介绍httpd的几个命令:

httpd -l       #能列出当前服务器上编译时所支持的核心模块

httpd -t       #测试修改过httpd.conf文件后有没有语法错误

httpd -M       #表示显示所有额外装载的模块

至此,我们的http服务就建好了。一块来测试下效果吧。

本虚拟机的IP地址为172.16.32.1,因此,我们打开浏览器,在地址栏输入172.16.32.1,然后回车,可以看到显示有‘It works!’字样,证明我们的http服务可以正常使用了。查看下你使用的linux的IP地址,在地址栏输入你linux的IP,即可显示。

Linux LAMP平台构建_Linux_15



接下来,该安装我们的mysql了。

tar xf mysql-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local   #将该源码包解压到指定的目录下

cd /usr/local    #进入该目录

ln -sv mysql-5.6.10-linux-glibc2.5-i686 mysql  #创建mysql到mysql-5.6.10-linux-glibc2.5-i686的符号链接,这里我们不采用修改文件名的方式,而是创建链接

cd mysql   #进入该目录

在该目录下,有个data的目录,一看名字就知道,这个目录是存放我们的数据的地方。但请各位想想,数据存放在这个目录下会回很不安全,假如某个不法分子攻破我们的mysql服务器,就可以随便查看我们的数据了,这是很危险的,而且,我们的数据文件是动态增涨的,假如哪天我们分的磁盘满了那就不好办了。因此,这里,我们建议将我们的数据文件单独存放在一个磁盘中,且该磁盘格式为逻辑卷,因为,当我们的数据增涨很快时,如果我们的磁盘空间不够,我们可以修改逻辑卷,增大其容量。另一个问题就是,mysql目录下的所有文件都是root属主,root属组,当我们的mysql进程运行时,是以mysql的身份运行的,而mysql对该目录下的文件没有执行权限,因此我们就需要修改该目录下的所有文件及目录,让mysql具有执行权限,但目前我们系统现在还没有mysql用户,因此我们还需要创建mysql用户,mysql组。

先创建我们的逻辑卷。

fdisk /dev/sda  #创建一个新磁盘分区,将其格式修改为8e,即LVM格式。本机为/dev/sda5

partprobe /dev/sda   #让内核重读磁盘分区

pvcreate /dev/sda5     #创建物理卷

vgcreate myvg /dev/sda5    #创建卷组,卷组名为myvg

lvcreate -n mydata -L 5G myvg    #在卷组上创建逻辑卷,大小为5G,卷标为mydata

lvs     #查看创建的逻辑卷信息

mke2fs -j /dev/myvg/mydata    #格式化该逻辑卷

mkdir /mydata#创建该目录,用于挂载我们的逻辑卷

vim /etc/fstab   #编辑该文件,添加如下该行信息,将我们的创建的逻辑卷挂载至/mydata目录下

/dev/myvg/mydata       /mydata          ext3    defaults    00

mkdir /mydata/data       #创建该目录,用于存放我们mysql的数据文件

然后创建mysql用户mysql组。

groupadd -r -g 300 mysql    #创建系统组,并设置gid为300,系统组gid均小于500,可自行修改

useradd -r -g 300 -u 300 mysql   #创建mysql系统用户,并设置其gid、uid均为300

id mysql    #可查看我们刚创建的用户信息

cd /usr/local/mysql   #进入该目录

chown -R mysql.mysql .   #修改该目录下的所有文件和目录,及目录下的子目录子文件均为mysql属主属组

chown -R mysql.mysql /mydata/data    #修改该文件及子文件为mysql属主属组,方便mysql写入数据

cd /usr/local/mysql    #进入该目录

scripts/mysql_install_db --user=mysql --datadir=/mydata/data   #--user指定我们的mysql服务器创建的文件及目录以哪个用户运行,--datadir指定我们的数据文件所在目录,这里mysql不需要执行./configure命令

完成后,为我们的mysql提供配置文件,执行完上面的命令后,在我们的/etc目录下会生成一个文件叫my.cnf,这就是我们的mysql的配置文件,我们只需对其稍加修改即可使用。

vim /etc/my.cnf

datadir = /mydata/data   #修改我们的数据文件存放位置

保存退出。同样,为我们的mysql服务提供服务脚本。这里我们使用系统自带的,我们不需修改即可使用。

cp support-files/mysql.server  /etc/rc.d/init.d/mysqld   #将该目录下的脚本拷贝到指定目录下,并重命名

chmod +x /etc/rc.d/init.d/mysqld  #为我们创建的服务脚本赋予执行权限,如果该脚本已有执行权限,可不用执行该命令,这里本机显示有执行权限,没有执行此命令

vim /etc/profile.d/mysql      #编辑该文件,添加环境变量

export PATH=$PATH:/usr/local/mysql/bin  #添加环境变量,让系统直接使用mysql的命令

同样,将该服务脚本添加到服务列表。

chkconfig --add mysql     #添加该服务脚本至服务列表

chkconfig mysql on    #设置开机启动,默认级别为2345

service mysql start   #开启mysql服务

netstat -tunlp     #查看我们的mysql服务端口是否已开启,默认mysql监听在3306端口

现在为我们的mysql创建帮助手册,并添加其开发组件至系统。

在我们的mysql目录下,有个man目录,其下就是mysql的帮助手册了。

vim /etc/man.config   #编辑该文件,添加如下一行信息

MANPATH  /usr/local/mysql/man

ln -sv /usr/local/mysql/include /usr/include/mysql  #创建符号链接,输出mysql的头文件至系统头文件路径

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf   #添加该行信息,输出mysql的库文件给系统库查找路径

ldconfig     #让系统重新载入系统库

同样,介绍几个mysql的命令。

mysql  

  -u USERNAME :中间的空格可省,不指定默认为root

  -P:指定密码,不指定默认为空

  -h MYSQL_SERVER :指定连接的服务器地址,不指定默认为本机

如:mysql -uroot -p12345 -hlocalhost    #通过本机以root身份登录mysql,root密码为12345

执行完该命令就进入了mysql的命令行界面,在里边就可以进行mysql的操作了。想了解mysql的一些命令,可搜索相关资料。

Linux LAMP平台构建_虚拟机_16

至此,我们的mysql源码编译安装也已完毕。在命令上边提到,我们可以使用phpMyAdmin进入到图形界面来管理我们的mysql数据,但是这个需要php的支持,因此,我们先来安装php,然后再介绍如何用phpMyAdmin来管理我们的mysql数据。

在安装我们的php之前,先解决依赖关系,安装X Software Development,命令为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 -q libmcrypt和rpm -q libmcrypt-devel命令查看下有没有安装这两个库。

准备工作完成后,开始安装我们的php。

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

部分选项含义如下所示:

--prefix=/usr/local/php        #指定安装文件目录

--with-mysql=/usr/local/mysql     #指定所使用的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 2.0的处理器模块所在目录

--with-mcrypt                #支持mcrypt扩展

--with-config-file-path=/etc                   #指定配置文件所在目录

--with-config-file-scan-dir=/etc/php.d         #设定在哪个路径下扫描配置文件

--with-bz2              #支持BZip2

本人英语水平有限,以上如果解释你不懂,或想了解更多可在该目录下使用./configure --help命令查看。

make  

make test      #执行完上面的命令后,系统会提示你执行该命令,这是测试命令,切记,不要忘记,一定要执行该命令

make install    

为我们的php提供配置文件,我们依然选用安装php时生成的配置文件,这个可不用修改,直接拿来用。

先确保还在php-5.4.13目录下

cp php.ini-production /etc/php.ini    #将该目录下的文件复制到/etc下,并重命名作为我们的配置文件

vim /etc/httpd/httpd.conf    #编辑该文件,让apache支持php

AddType application/x-httpd-php  .php

AddType application/x-httpd-php-source  .phps   #添加该两行信息

同时找到DircetoryIndex,添加index.php,即修改为:

DircetoryIndex index.php index.html

至此,php安装成功,重启httpd服务即可实现支持php了。php安装完成了,那我们的php能否连接数据库呢?现在我们来测试下我们的php是否能够连接mysql数据库吧。

cd /usr/local/apache     #进入该目录下

vim htdocs/index.html   #编辑该文件,修改如下信息,你刚才测试httpd时,显示的内容就是这里定义的

<html>

<body><h1>Welcome to my LAMP!!!</h1>

<?php         #添加php脚本

$conn=mysql_connect('langdu','root','123456');    #调用mysql_connect函数,三个参数含义分别为主机名、登录数据库的用户名、登录数据库用户的用户密码

if ($conn)      #将上边函数的执行状态结果保存到conn中,然后判断

 echo "Success...";     #如果连接成功,输出Success...

else

 echo "Failure...";     #如果连接失败,输出Failure... ,使用‘;’结尾,不要忘记

?>

</body>

</html>

既然是php了,所以,修改后缀名。

mv htdocs/index.html htdocs/index.php

修改完毕。好了,现在打开我们的浏览器,在地址栏输入linux的IP地址,本机为172.16.32.1,因此,在地址栏输入172.16.32.1,回车,一切显示正常。

Linux LAMP平台构建_Linux_17

现在我们的php已经安装好了,刚才介绍说可以通过phpMyAdmin来实现在图形化界面下管理我们的数据库,现在介绍如何配置phpMyAdmin。这里我们在虚拟主机中实现。下面介绍如何启用虚拟主机。

vim /etc/httpd/httpd.conf   #编辑httpd的主配置文件,找到Virtual hosts,修改如下信息

# Virtual hosts    #找到该行信息,这里就是用来定义虚拟主机的

Include /etc/httpd/extra/httpd-vhosts.conf   #启用该行,直接去掉前面的注释符即可

保存退出。

编辑上边提到的文件httpd-vhosts.conf。

vim /etc/httpd/extra/httpd-vhosts.conf  #编辑该文件,修改如下信息

<VirtualHost *:80>    #表示监听本机所有地址的80端口,这是http的端口

  DocumentRoot "/www/1.com"#新建该目录,指定虚拟主机文档根目录,网页文件的存放位置,此目录可自行修改,修改后重启服务即可生效。

  ServerName www.1.com#指定服务器主机名,待会在地址栏输入该名称即可

  <Directory "/www/1.com">       #定义该路径如何被访问

      Options none         #定义/var/www/html目录下所有的网页文档在被访问时的访问属性,有多个时可用空格隔开      

      AllowOverride none

      Require all granted    #定义允许所有人访问,否则待会我们在浏览器就打不开网页了

 </Directory>

  ErrorLog "logs/1.com-error_log"#定义错误日志存放文件,该目录是相对于ServerRoot的目录,查看httpd.conf配置文件可看到ServerRoot为"/usr/local/apache

  CustomLog "logs/1.com-access_log" combined   #定义访问日志文件,文件记录格式为combined,可在httpd.conf配置文件中查看包含哪些信息

</VirtualHost>    

你会看到里边定义有两个虚拟主机样例,我们只修改这一个,另一个不管它。但待会检查及重启服务时可能会报错,与我们无关先不管它,你要真不想重启服务时报错可删掉。保存退出。

因为我们这里是在虚拟机上实现的,现在修改我们windows上的hosts文件,目录为C:\Windows\System32\drivers\etc添加如下信息:

172.16.32.1www.1.com   #添加该信息,实现本地解析

保存退出,在DOC命令界面,输入ping www.1.com,可以解析成功。

Linux LAMP平台构建_Linux_18

mkdir /www/1.com -pv    #创建该目录

httpd -t     #检查配置文件有没有语法错误,因我们另一个虚拟主机没有配置,会报错,不用管它

service httpd restart  #重启服务,也可以待会我们配置好再重启

现在去解压我们的phpMyAdmin软件包。软件包我们已下载完毕,直接解压。

tar xf phpMyAdmin-3.4.10.1-all-languages.tar.bz2  #解压该软件包

mv phpMyAdmin-3.5.1-all-languages /www/1.com/pma   #将解压得到的目录文件移动到该目录下,并命名为pma

service httpd restart  #为了确保万无一失,我们在重启下服务  

现在打开浏览器,在地址栏输入www.1.com/pma,然后回车。

下面是显示效果。

下图是登陆界面:

Linux LAMP平台构建_虚拟机_19

下图是登录后的主界面:

Linux LAMP平台构建_虚拟机_20

现在我们再来看另外一个基于php的动态网站。我们先去修改配置文件。

vim /etc/httpd/extra/httpd-vhosts.conf  #编辑该文件,将另一个虚拟主机配置修改如下信息

<VirtualHost *:80>

  DocumentRoot "/www/2.com"

  ServerName www.2.com

  <Directory "/www/2.com">

      Options none

      AllowOverride none

      Require all granted

 </Directory>

  ErrorLog "logs/2.com-error_log"

  CustomLog "logs/2.com-access_log" combined

</VirtualHost>

修改完后保存退出。

httpd -t   #检查语法有没有错误

unzip Discuz_X2.5_SC_GBK.zip   #解压该文件,会发现目录下多了三个目录,readme、upload和utilities。我们只需要将upload里的文件复制出来即可。

mv upload/* /www/2.com/   #移动upload目录下的所有文件到该目录下来。

因为我们这里是在虚拟机上实现的,现在修改我们windows上的hosts文件,目录为C:\Windows\System32\drivers\etc添加如下信息:

172.16.32.1     www.2.com#添加该信息,实现本地解析

保存退出,在DOC命令界面,输入ping www.2.com,可以解析成功。

service httpd restart  #重启服务

现在在浏览器地址栏输入www.2.com就可以打开Discuz了,但还是安装向导界面。本想贴出所有截图,但是图片总显示有问题,只显示一半。这里就贴出部分图片吧。下面有附件,想查看显示效果的,可下载图片查看下。

进入安装向导界面1后,会显示有一些目录我们没有写权限,我们现在去修改各目录,让其具有写权限。请先确保当前处于/www/2.com目录下。

chmod 777 config/ data/ data/cache/ data/avatar/ data/plugindata/ data/download/ data/addonmd5/ data/template/ data/threadcache/ data/p_w_upload/ data/p_w_upload/album/ data/p_w_upload/forum/ data/p_w_upload/group/ data/log/

chmod 777 uc_client/data/cache/ uc_server/data/ uc_server/data/cache/ uc_server/data/avatar/ uc_server/data/backup/ uc_server/data/logs/ uc_server/data/tmp/ uc_server/data/view/

修改完毕后点击下一步,进入如下界面:

Linux LAMP平台构建_Linux_21

修改完毕,点击下一步,填好点下一步即可完成安装。完毕后我们点暂不开通,就进入主界面了。如下图。

Linux LAMP平台构建_Linux_22