环境: 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
访问测试:
添加数据库访问的用户名和密码
#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的用户名和密码