轻松构建基于NFS的双LAMP服务器

一、准备工作

1、事先准备好安装编译时所需的软件,两台虚拟机。软件如下:apr、apr-util、pcre-devel、httpd-2.4.4、mysql-5.5.28、php-5.4.13、X Software Development、libmcrypt、libmcrypt-devel、mhash-devel、mhash、xcache。

2、虚拟机的编译环境要一致Development Libraries、Development Tools都需要安装。主服务器的地址为172.16.12.22,辅助服务器的地址为172.16.12.23

二、编译安装apache

1、解决依赖关系

httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行。

(1) 编译安装apr


  1. # tar xf apr-1.4.6.tar.bz2 
  2. # cd apr-1.4.6 
  3. # ./configure --prefix=/usr/local/apr 
  4. # make && make install 

(2) 编译安装apr-util


  1. # tar xf apr-util-1.5.2.tar.bz2 
  2. # cd apr-util-1.5.2 
  3. # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 
  4. # make && make install 

(3) httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。

2、编译安装httpd-2.4.4


  1. # tar xf httpd-2.4.4.tar.bz2 
  2. # cd httpd-2.4.4 
  3. # ./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 
  4. # make && make install 

注:请确保你的SELinux是关闭的,因为httpd服务受到SELinux的管控,这里会有影响。

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

编辑/etc/httpd/httpd.conf,添加如下行即可:

PidFile  "/var/run/httpd.pid"

4、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:


  1. #!/bin/bash 
  2. # 
  3. # httpd        Startup script for the Apache HTTP Server 
  4. # 
  5. # chkconfig: - 85 15 
  6. # description: Apache is a World Wide Web server.  It is used to serve \ 
  7. #          HTML files and CGI. 
  8. # processname: httpd 
  9. # config: /etc/httpd/conf/httpd.conf 
  10. # config: /etc/sysconfig/httpd 
  11. # pidfile: /var/run/httpd.pid 
  12.  
  13. # Source function library. 
  14. . /etc/rc.d/init.d/functions 
  15.  
  16. if [ -f /etc/sysconfig/httpd ]; then 
  17.         . /etc/sysconfig/httpd 
  18. fi 
  19.  
  20. # Start httpd in the C locale by default. 
  21. HTTPD_LANG=${HTTPD_LANG-"C"
  22.  
  23. # This will prevent initlog from swallowing up a pass-phrase prompt if 
  24. # mod_ssl needs a pass-phrase from the user. 
  25. INITLOG_ARGS="" 
  26.  
  27. # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server 
  28. # with the thread-based "worker" MPM; BE WARNED that some modules may not 
  29. # work correctly with a thread-based MPM; notably PHP will refuse to start. 
  30.  
  31. # Path to the apachectl script, server binary, and short-form for messages. 
  32. apachectl=/usr/local/apache/bin/apachectl 
  33. httpd=${HTTPD-/usr/local/apache/bin/httpd} 
  34. prog=httpd 
  35. pidfile=${PIDFILE-/var/run/httpd.pid} 
  36. lockfile=${LOCKFILE-/var/lock/subsys/httpd} 
  37. RETVAL=0 
  38.  
  39. start() { 
  40.         echo -n $"Starting $prog: " 
  41.         LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS 
  42.         RETVAL=$? 
  43.         echo 
  44.         [ $RETVAL = 0 ] && touch ${lockfile} 
  45.         return $RETVAL 
  46.  
  47. stop() { 
  48.     echo -n $"Stopping $prog: " 
  49.     killproc -p ${pidfile} -d 10 $httpd 
  50.     RETVAL=$? 
  51.     echo 
  52.     [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} 
  53. reload() { 
  54.     echo -n $"Reloading $prog: " 
  55.     if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then 
  56.         RETVAL=$? 
  57.         echo $"not reloading due to configuration syntax error" 
  58.         failure $"not reloading $httpd due to configuration syntax error" 
  59.     else 
  60.         killproc -p ${pidfile} $httpd -HUP 
  61.         RETVAL=$? 
  62.     fi 
  63.     echo 
  64.  
  65. # See how we were called. 
  66. case "$1" in 
  67.   start) 
  68.     start 
  69.     ;; 
  70.   stop) 
  71.     stop 
  72.     ;; 
  73.   status) 
  74.         status -p ${pidfile} $httpd 
  75.     RETVAL=$? 
  76.     ;; 
  77.   restart) 
  78.     stop 
  79.     start 
  80.     ;; 
  81.   condrestart) 
  82.     if [ -f ${pidfile} ] ; then 
  83.         stop 
  84.         start 
  85.     fi 
  86.     ;; 
  87.   reload) 
  88.         reload 
  89.     ;; 
  90.   graceful|help|configtest|fullstatus) 
  91.     $apachectl [email protected] 
  92.     RETVAL=$? 
  93.     ;; 
  94.   *) 
  95.     echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" 
  96.     exit 1 
  97. esac 
  98.  
  99. exit $RETVAL 


  1. 而后为此脚本赋予执行权限: 
  2. # chmod +x /etc/rc.d/init.d/httpd 
  3.  
  4. 加入服务列表: 
  5. # chkconfig --add httpd 
  6. # chkconfig --level 35 httpd on 
  7. # service httpd restart 
  8.  
  9. 将httpd服务命令添加到环境变量中去: 
  10. # vim /etc/profile.d/httpd.sh 
  11.     export PATH=$PATH:/usr/local/apache/bin 

接下来就可以启动服务进行测试了。

如何轻松搭建基于NFS的双LAMP服务器的个人论坛

三、安装mysql-5.6.10

1、准备数据存放的文件系统

新建一个逻辑卷,并将其挂载至特定目录即可。

这里我们设置其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。


  1. # fdisk /dev/sda                        #创建一个20G的分区 
  2. # partprobe /dev/sda                    #刷新重读 
  3. # pvcreate /dev/sda6                    #创建PV 
  4. # vgcreate myvg /dev/sda6               #创建VG 
  5. # lvcreate -n mydata -L 5G myvg         #创建LV 
  6. # mke2fs -j /dev/myvg/mydata            #格式化为ext3 
  7. # mkdir /mydata -pv                     #创建挂载点 
  8. # vim /etc/fstab                        #修改为开机挂载 
  9. # mount -a                              #挂载至挂载点 
  10. # mkdir /mydata/data                    #创建一个数据存储目录 
  11. # chown -R mysql.mysql /mydata/data/    #修改存储目录的属主属组 
  12. # chmod o-rx /mydata/data/              #修改其他用户的读写权限 

2、新建用户以安全方式运行进程:


  1. # groupadd -r -g 306 mysql 
  2. # useradd -g 306 -r -u 306 mysql 
  3. # chown -R mysql.mysql /usr/local/mysql/*  #修改安装文件的属主属组 
  4. # chown -R mysql:mysql /mydata/data 

3、安装并初始化mysql-5.5.28


  1. # tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local 
  2. # cd /usr/local/ 
  3. # ln -sv mysql-5.5.28-linux2.6-i686  mysql 
  4. # cd mysql  
  5. # less INSTALL-BINARY                   #可以用来查看软件自带的安装说明 
  6.  
  7. # chown -R mysql:mysql  . 
  8. # scripts/mysql_install_db --user=mysql --datadir=/mydata/data 
  9. # chown -R root  . 

4、为mysql提供主配置文件:


  1. # cd /usr/local/mysql 
  2. # cp support-files/my-large.cnf  /etc/my.cnf 

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_concurrency = 4

另外还需要添加如下行指定mysql数据文件的存放位置:

datadir = /mydata/data

5、为mysql提供sysv服务脚本:


  1. # cd /usr/local/mysql 
  2. # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 
  3. # chmod +x /etc/rc.d/init.d/mysqld 

添加至服务列表:


  1. # chkconfig --add mysqld 
  2. # chkconfig mysqld on 

而后就可以启动服务测试使用了。

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

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

编辑/etc/man.config,添加如下行即可:

MANPATH  /usr/local/mysql/man

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

这可以通过简单的创建链接实现:


  1. # ln -sv /usr/local/mysql/include  /usr/include/mysql 

8、输出mysql的库文件给系统库查找路径:


  1. # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 

而后让系统重新载入系统库:

# ldconfig

9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。

# vim /etc/profile.d/mysql.sh

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

四、编译安装php-5.4.13

1、解决依赖关系:

因为编译过程中缺少加密程序,现在添加四个加密软件包:

libmcrypt-2.5.7-5.el5.i386.rpm,libmcrypt-devel-2.5.7-5.el5.i386.rpm

mhash-devel-0.9.2-6.el5.i386.rpm,mhash-0.9.2-6.el5.i386.rpm。

请配置好X Software Development编译环境

2、编译安装php-5.4.13


  1. # tar xf php-5.4.13.tar.bz2 
  2. # cd php-5.4.13 
  3. # ./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 test && make install

为php提供配置文件:

# cp php.ini-production /etc/php.ini

3、 编辑apache配置文件httpd.conf,以apache支持php


  1. # vim /etc/httpd/httpd.conf 
  2.  1、添加如下二行 
  3.    AddType application/x-httpd-php  .php 
  4.    AddType application/x-httpd-php-source  .phps 
  5.  
  6.  2、定位至DirectoryIndex index.html  
  7.    修改为: 
  8.     DirectoryIndex  index.php  index.html 

而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。


  1. # service httpd restart 
  2. # cd /usr/local/apache/htdocs/              #切换到httpd的网页存放目录 
  3. # mv index.html index.php 
  4. # vim index.php 
  5.     <html><body><h1>I HAVE A DREAM,THIS IS WORK DAYS !</h1></body></html> 
  6.     <?php 
  7.         $conn=mysql_connect('localhost','root',''); 
  8.     if ($conn) 
  9.         echo "Chenggong..."
  10.     else 
  11.         echo "Shibai..."
  12.     ?> 

试脚本,用来测试连接数据库是否成功!

如何轻松搭建基于NFS的双LAMP服务器的个人论坛

五、安装xcache,为php加速:

1、安装


  1. # tar xf xcache-3.0.1.tar.gz 
  2. # cd xcache-3.0.1 
  3. # /usr/local/php/bin/phpize                 #加载扩展项 
  4. # ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config 
  5. # make && make install 

安装结束时,会出现类似如下行:


  1. Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525

2、编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini


  1. # mkdir /etc/php.d 
  2. # cp xcache.ini /etc/php.d 

说明:xcache.ini文件在xcache的源码目录中。

接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:


  1. zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so 

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位,这里修改所用到的就是在安装步骤中产生的字符串。

测试安装是否成功


  1. # vim /usr/local/apache/htdocs/index.php            #查看网页状态是否安装xcache 

 

如何轻松搭建基于NFS的双LAMP服务器的个人论坛

六、安装NFS服务,共享文件

1、在主服务器上做:


  1. # service portmap status                            #首先要确保portmap是开启状态 
  2. # service nfs start                                 #启动nfs服务 
  3. # rpcinfo -p localhost                              #查看所有rpc进程所监听的端口 
  4. # vim /etc/exports                                  #将/var/www目录设置为共享 
  5.     /var/www        172.16.0.0/16(rw,no_root_squash) 
  6.     /usr/local/mysql    172.16.0.0/16(rw,no_root_squash) 

2、在辅服务器上做


  1. # mount -t nfs 172.16.12.22:/var/www  /usr/local/apache/htdocs/ #将网络共享挂载 
  2. # mkdir /usr/local/mysql                            #创建目录 
  3. # mount -t nfs 172.16.12.22:/usr/local/mysql    /usr/local/mysql 
  4. # vim /etc/fstab                                    #添加其为开机挂载 
  5.     172.16.12.22:/var/www   /usr/local/apache/htdocs/  nfs  defaults,_rnetdev  0 0 

七、安装辅助服务器

1、安装apache服务器

在第一步的时候已经说过了,这里就不在复述。

2、安装php模块和xcache加速

这一步在第三步骤中讲述过,大家可以查看一下

八、安装Discuz论坛

1、在主服务器上操作


  1. # vim /etc/httpd/httpd.conf                         #指定网页存放目录 
  2.     DocumentRoot "/var/www" 
  3.     <Directory "/var/www"
  4.      
  5. # unzip Discuz_X2.5_SC_GBK.zip                      #解压软件包 
  6. # cp ./upload/* /var/www/ -a                        #将解压后的文件放到网页目录中 
  7.  
  8. # mysqladmin -uroot -p password 'redhat'            #为数据库添加密码 

登录数据库为root用户添加远程权限:


  1. mysql> grant all privileges on *.* to [email protected]'%' identified by 'redhat'

在安装页面填写数据库密码

将数据库的连接方式由localhost修改为172.16.12.22

如何轻松搭建基于NFS的双LAMP服务器的个人论坛

给论坛文件添加权限


  1. # chmod o+rw ./config 
  2. # chmod o+rw ./data 
  3. # chmod o+rw ./data/cache 
  4. # chmod o+rw ./data/avatar 
  5. # chmod o+rw ./data/plugindata 
  6. # chmod o+rw ./data/download 
  7. # chmod o+rw ./data/addonmd5 
  8. # chmod o+rw ./data/template 
  9. # chmod o+rw ./data/threadcache 
  10. # chmod o+rw ./data/p_w_upload 
  11. # chmod o+rw ./data/p_w_upload/album 
  12. # chmod o+rw ./data/p_w_upload/forum 
  13. # chmod o+rw ./data/p_w_upload/group 
  14. # chmod o+rw ./data/log 
  15. # chmod o+rw ./uc_client/data/cache 
  16. # chmod o+rw ./uc_server/data 
  17. # chmod o+rw ./uc_server/data/cache 
  18. # chmod o+rw ./uc_server/data/avatar 
  19. # chmod o+rw ./uc_server/data/backup 
  20. # chmod o+rw ./uc_server/data/logs 
  21. # chmod o+rw ./uc_server/data/tmp 
  22. # chmod o+rw ./uc_server/data/view 

之后选择下一步安装就可以了:最终我们看一下效果图:

如何轻松搭建基于NFS的双LAMP服务器的个人论坛 如何轻松搭建基于NFS的双LAMP服务器的个人论坛

如此简易的基于NFS共享的LAMP论坛就搭建完成了,如果朋友们还想针对论坛实现iptables管理控制制作出DMZ的非军事化区域的话,可以先自行摸索,我们会在之后的博客中给出参考!

PS:写的比较简陋,如果有什么BUG请留言,大家一起学习进步!