Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛

 

版权声明:

本文遵循“署名非商业性使用相同方式共享 2.5 中国大陆”协议

您可以自由复制、发行、展览、表演、放映、广播或通过信息网络传播本作品

您可以根据本作品演义自己的作品

您必须按照作者或者许可人指定的方式对作品进行署名。

您不得将本作品用于商业目的。

如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。

对任何再使用或者发行,您都必须向他人清楚地展示本作品使用的许可协议条款。

如果得到著作权人的许可,您可以不受任何这些条件的限制。

Designed by 小诺(www.rsyslog.org  dreamfire.blog.51cto.com

LAMP是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件:Linux+Apache+MySQL+php,自从Nginx的出现,Apache的一部分市场份额被Nginx获得,原因是由于Apache的高并发性能不及Nginx.前不久Apache团队发布了httpd的2.4版本,性能上做了非常大的提升,为的就是挽回失去的市场份额,当然2.4版本刚刚出来不久,需要1-2年的时间才能够流通.本实验就是通过安装2.4版本,mysql用的是mysql-5.5版本进行安装部署的.接着我们开始进入LAMP搭建。现实生产环境下,不同的业务需求都不相同,因此更多的企业会考虑使用×××LAMP环境,这样可以更加灵活使用各个功能参数将性能调制到最佳状态。当然如果贵公司的环境比较简单,可以考虑rpm包安装。

注意:本实验环境基本上都是从各大官网下载的最新安装包。 

和本实验有关的博文可参看(有些命令在以下博文中有,这里不做过多介绍)

最新、最全面的LAMP+wordpress安装过程http://dreamfire.blog.51cto.com/418026/197595

LinuxApacheMySQL+PHP的综合应用案例http://dreamfire.blog.51cto.com/418026/166056

Apache下域名虚拟主机在个人主页目录上实现过程http://dreamfire.blog.51cto.com/418026/163612

RHEL6.3 DNS配置详解一 DNS相关概念理解及配置基础http://dreamfire.blog.51cto.com/418026/1091943

Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛http://dreamfire.blog.51cto.com/418026/1148203 

注意:本实验没有考虑selinux以及防火墙问题,请在实验过程中将selinux修改为permission或者

disable模式,防火墙关闭.

一、系统环境:

  1. [root@rhel6u3-4 ~]# uname -r 
  2. 2.6.32-279.el6.i686 
  3. [root@rhel6u3-4 ~]# cat /etc/redhat-release  
  4. Red Hat Enterprise Linux Server release 6.3 (Santiago) 
  5. [root@rhel6u3-4 ~]# 
  6. [root@rhel6u3-4 ~]# cd mypackages/ 
  7. [root@rhel6u3-4 mypackages]# ll 
  8. -rwxr-xr-x.  1 root  root    982243 Dec 18 07:24 apr-1.4.6.tar.gz 
  9. -rwxr-xr-x.  1 root  root    774770 Dec 18 07:24 apr-util-1.4.1.tar.gz 
  10. -rw-r--r--.  1 root  root   9489788 Mar  1 19:21 Discuz.zip 
  11. -rwxr-xr-x.  1 root  root   1273059 Dec 18 07:24 gd-2.0.34.tar.gz 
  12. -rwxr-xr-x.  1 root  root   5616185 Dec 18 07:24 httpd-2.4.2.tar.gz 
  13. -rwxr-xr-x.  1 root  root    875425 Dec 18 07:24 libmcrypt-2.5.8.tar.bz2 
  14. -rwxr-xr-x.  1 root  root    655906 Dec 18 07:24 mhash-0.9.9.9.tar.bz2 
  15. -rwxr-xr-x.  1 root  root  24660795 Dec 18 07:25 mysql-5.5.25a.tar.gz 
  16. -rwxr-xr-x.  1 root  root  14060505 Dec 18 07:25 php-5.4.4.tar.gz 
  17. -rwxr-xr-x.  1 root  root    782725 Dec 18 07:25 re2c-0.13.5.tar.gz 
  18. -rwxr-xr-x.  1 root  root    134833 Dec 18 07:25 xcache-2.0.1.tar.gz 
  19. -rw-r--r--.  1 root  root   4323279 Dec 11  2009 phpMyAdmin-2.11.0-all-languages.tar.gz 
  20. [root@rhel6u3-4 mypackages]# 

 二、开始安装部署LAMP

脚本如下

  1. [root@rhel6u3-4 mypackages]# vim packages  \\由于整个环境会涉及比较多的依赖关系包,所以我们先将一些依赖包装上。(根据不同的环境可能不仅限于这些包)这里创建了一个安装依赖包的函数,在脚本中调用即可. 
  2. #Install install LAMP from dependent Packages! 
  3.  
  4. PKG='gcc-c++ flex bison autoconf  automake libpng-devel libjpeg-devel freetype-devel openjpeg-libs fontconfig-devel libXpm-devel cmake ncurses-devel apr-devel pcre-devel apr-util-devel openssl-devel libxml2-devel curl-devel'  \\可以将所需要的包全部卸载里面进行安装 
  5. \\以下是个查询包是否安装机制,如果没有安装则安装 
  6. for i in $PKG 
  7.    do 
  8.        rpm -q $i &> /dev/null 
  9.        [ $? -ne 0 ] && UNPKG="$UNPKG $i"  
  10.    done 
  11.        [ -n "$UNPKG" ] && yum install $UNPKG -y  
  12. echo "Dependent Packages install OK...." 
  13. [root@rhel6u3-4 mypackages]# 

  1. [root@rhel6u3-4 mypackages]# vim lamp.sh //以下是LAMP搭建脚本 
  2. #!/bin/bash 
  3. #install LAMP from Source Packages 
  4. #Designed by xiaonuo http://dreamfire.blog.51cto.com  www.rsyslog.org   
  5. #If you have any questions,please send e-mail to yum.linux@gmail.com  
  6.  
  7. #install dependent Package for LAMP, Please submit all source package into the directory ~/mypackages! 
  8. mkdir -p  ~/mypackages 
  9. yum clean all 
  10. yum makecache 
  11. .  ~/mypackages/packages \\调用函数安装系统依赖包 
  12. \\除了这些redhat光盘自带的包以外,还有一些其他的源码包。 
  13. #install GD2 \\GD2是一个生成图片所使用的依赖包 
  14. cd ~/mypackages/ 
  15. tar xf gd-2.0.34.tar.gz 
  16. cd gd-2.0.34 
  17. ./configure --prefix=/usr/local/gd2 
  18. make && make install 
  19.  
  20. #install apr \\apr是apache的一个依赖包,虽然系统是自带这个包,但是版本太低,不适用于apache2.4版本。 
  21. cd ~/mypackages/ 
  22. tar xf apr-1.4.6.tar.gz 
  23. cd apr-1.4.6 
  24. ./configure --prefix=/usr/local/apr 
  25. make && make install 
  26.  
  27. #install apr-util 
  28. cd ~/mypackages/ 
  29. tar xf apr-util-1.4.1.tar.gz 
  30. cd apr-util-1.4.1 
  31. ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ 
  32. make && make install 
  33.  
  34. # install libmcrypt mhash \\linmcrypt与mhash是php会依赖的一些包 
  35. cd ~/mypackages/ 
  36. tar xf libmcrypt-2.5.8.tar.bz2 
  37. cd libmcrypt-2.5.8 
  38. ./configure --prefix=/usr/local/libmcrypt 
  39. make && make install 
  40.  
  41. cd ~/mypackages/ 
  42. tar xf mhash-0.9.9.9.tar.bz2 
  43. cd mhash-0.9.9.9 
  44. ./configure --prefix=/usr/local/mhash 
  45. make && make install 
  46.  
  47. #install mysql-5.5.25 and configure mysql! \\Mysql这些选择的是mysql5.5版本,些版本一改原有的编译方式,使用cmake代替了原来的configure。 
  48. useradd mysql 
  49. cd ~/mypackages/ 
  50. tar xf mysql-5.5.25a.tar.gz 
  51. cd mysql-5.5.25a 
  52. cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/var/lib/mysql 
  53. cmake . -LH查看帮助,类似于./configure –help 
  54. -DCMAKE_INSTALL_PREFIX= 指定安装主目录 
  55. -DMYSQL_DATADIR 指定库文件存放目录 
  56. -DMYSQL_UNIX_ADDR 指定socket文件所在路径 
  57. -DDEFAULT_CHARSET 指定使用的默认字符编码 
  58. -DDEFAULT_COLLATION 指定使用的默认字符规则 
  59. -DWITH_EXTRA_CHARSETS 其他字符码支持 
  60. -DWITH_MYISAM_STORAGE_ENGINE 编译myisam存储引擎 
  61. -DWITH_INNOBASE_STORAGE_ENGINE 编译innodb存储引擎 
  62. -DWITH_READLINE 增加readline支持,通过 readline,可以方便的在命令行上面移动,增删,复制,粘贴,搜索。 
  63. -DENABLED_LOCAL_INFILE 让mysql支持从本地文件导入数据库\\ 
  64. make && make install 
  65.  
  66. cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf 
  67. sed -i '37iuser = mysql' /etc/my.cnf 
  68. mkdir /var/lib/mysql/ 
  69. chown mysql. /var/lib/mysql 
  70. echo "export PATH=$PATH:/usr/local/mysql/bin/" >> ~/.bashrc 
  71. . ~/.bashrc 
  72. /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql --basedir=/usr/local/mysql --builddir=/usr/local/mysql 
  73.  
  74. cp ~/mypackages/mysql-5.5.25a/support-files/mysql.server /etc/init.d/mysqld  \\创建启动脚本 
  75. chmod 755 /etc/init.d/mysqld 
  76. service mysqld start 
  77. chkconfig --add mysqld 
  78. mysqladmin password '123.com'  \\创建root密码 
  79.  
  80. #install httpd 
  81. cd ~/mypackages/ 
  82. tar xf httpd-2.4.2.tar.gz 
  83. cd httpd-2.4.2 
  84. ./configure --prefix=/usr/local/apache2 --enable-cache --enable-cache-disk --enable-so --enable-sed --enable-http --enable-mpms-shared=all --enable-cgid --enable-rewrite --enable-vhost-alias --enable-ssl --with-mpm=event --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ 
  85. make && make install 
  86. /usr/local/apache2/bin/apachectl start 
  87. links -dump 127.0.0.1  \\完成之后记得测试httpd环境是否OK 
  88. echo 'If you see It works!,Congratulation! Please press enter ' 
  89. #read \\如果你不放心,可以设置断点,先测试网站是否可以访问,如果OK,按回车继续即可 
  90.  
  91. ## install php 
  92. cd ~/mypackages/ 
  93. tar xf php-5.4.4.tar.gz 
  94. cd php-5.4.4 
  95. ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-mysqli=/usr/local/mysql/bin/mysql_config --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --with-pdo-mysql=/usr/local/mysql/ --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt=/usr/local/libmcrypt/ --with-gd --enable-gd-native-ttf --with-openssl --with-mhash=/usr/local/mhash/ --enable-pcntl --enable-sockets --enable-zip --enable-soap --with-apxs2=/usr/local/apache2/bin/apxs --enable-cgi --disable-cli 
  96. php常见参数介绍 
  97. --with-config-file-path与--with-config-file-scan-dir在指定php配置文件的路径 
  98. --with-mysql和--with-mysqli在指定你的mysql的位置和它的相关工具 
  99. --with-iconv-dir,--with-freetype-dir,-with-jpeg-dir,--with-png-dir,--withgd,--with-zlib,--with-libxml-dir这些都是在启用对某种文件的支持 
  100. --with-curl和--with-curlwrappers是用于支持curl函数,此函数允许你用不同的协议连接和沟通不同的服务器 
  101. --with-openssl,--with-mhash,--with-mcrypt这都是和加密有关的参数,启用它们是为了让php可以更好的支持各种加密。 
  102. "--enable-bcmath" 高精度数学运算组件。 
  103. "--enable-shmop" 和 "--enable-sysvsem" 使得你的PHP系统可以处理相关的IPC函数 。IPC是一个Unix标准通讯机制,它提供了使得在同一台主机不同进程之间可以互相通讯的方法。 
  104. "--enable-inline-optimization" 栈堆指针和优化线程。 
  105. "--enable-pcntl" 多线程优化。 
  106. make && make install 
  107. mkdir /usr/local/php/etc 
  108. cp ~/mypackages/php-5.4.4/php.ini-production /usr/local/php/etc/php.ini 
  109.  
  110. #install re2c xcache \\XCache是一个开源的opcode和var的缓存器,其工作原理是通过内存来缓存php的编译结果,当用户读取php网页时后台的php编译器不参加编译工作,而是将内存中的结果直接供用户读取,从而减轻频繁编译对服务器造成的压力。与同类的apc、eaccelerator相比XCache具有覆盖速度快、大流量/高负载的机器上运行稳定、能够快速跟进php版本。安装xcache之前先安装xcache的一个信赖包re2c。之后安装xcache 
  111. cd ~/mypackages/ 
  112. tar xf re2c-0.13.5.tar.gz 
  113. cd re2c-0.13.5 
  114. ./configure 
  115. make && make install 
  116. cd ~/mypackages/ 
  117. tar xf xcache-2.0.1.tar.gz 
  118. cd xcache-2.0.1 
  119. /usr/local/php/bin/phpize 
  120. ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config --enable-xcache-optimizer --enable-xcache-assembler --enable-xcache-encoder --enable-xcache-decoder 
  121. make && make install 
  122.  
  123. #Configure Xcache 
  124. cp -r ~/mypackages/xcache-2.0.1/admin/ /usr/local/apache2/htdocs/ 
  125. chmod 755 /usr/local/apache2/htdocs/admin 
  126. chmod a+r /usr/local/apache2/htdocs/admin/* 
  127. mkdir -p  /usr/local/php/etc/php.d 
  128. cp ~/mypackages/xcache-2.0.1/xcache.ini /usr/local/php/etc/php.d/ 
  129.  
  130. #vim /usr/local/php/etc/php.d/xcache.ini 
  131. XCACHE=$(find /usr/local/php/ -name xcache.so) \\创建一个变量内容为xcache.so的路径 
  132. sed -i "s%/usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache\.so%$XCACHE%" /usr/local/php/etc/php.d/xcache.ini   
  133. sed -i 's%mOo%admini%' /usr/local/php/etc/php.d/xcache.ini  \\创建用户名为admini 
  134. sed -i 's%^xcache\.admin\.pass.*%xcache.admin.pass = "cbff36039c3d0212b3e34c23dcde1456"%' /usr/local/php/etc/php.d/xcache.ini \\创建密码为123.com, xcache.admin.pass 是一个通过md5加密之后的密码 
  135. cat >> /usr/local/apache2/htdocs/phpinfo.php <<endf \\创建PHP测试 
  136. <?php 
  137. phpinfo(); 
  138. ?>
  139. endf 
  140. echo "please input http://127.0.0.1/phpinfo.php to IE! if it's ok,please press enter " 
  141. #read\\可设置断点测试php是否OK 
  142.  
  143.  
  144. #vim /usr/local/apache2/conf/httpd.conf \\配置apache与php集成 
  145. sed -i '375iAddType application/x-httpd-php \.php' /usr/local/apache2/conf/httpd.conf \\在375行下面插入一行 
  146. sed -i 's%index\.html%index.html index.php%' /usr/local/apache2/conf/httpd.conf \\写上index.php主页 
  147. sed -i  '/httpd-mpm\.conf/s/#//' /usr/local/apache2/conf/httpd.conf  
  148. sed -i  '/httpd-vhosts\.conf/s/#//' /usr/local/apache2/conf/httpd.conf \\开启虚拟主机 
  149. sed -i  '/httpd-info\.conf/s/#//' /usr/local/apache2/conf/httpd.conf  
  150. sed -i  '/httpd-default\.conf/s/#//' /usr/local/apache2/conf/httpd.conf 
  151. \\注意:以上 4 个扩展配置文件中的设置需要根据实际需要进行更改。 
  152. mkdir -p /usr/local/apache2/htdocs/bbs \\创建虚拟主机目录,可更换为其他目录 
  153. #vim /usr/local/apache2/conf/extra/httpd-vhosts.conf  
  154. cat >/usr/local/apache2/conf/extra/httpd-vhosts.conf <<endf   
  155. NameVirtualHost  *:80 
  156. <VirtualHost *:80>  \\创建虚拟主机1,用于配置访问DZ论坛 
  157.     ServerAdmin webmaster@rsyslog.org 
  158.     DocumentRoot "/usr/local/apache2/htdocs/bbs" 
  159.     ServerName bbs.rsyslog.org 
  160.     ErrorLog "logs/bbs.rsyslog.org-error_log" 
  161.     CustomLog "logs/bbs.rsyslog.org-access_log" common 
  162. </VirtualHost> 
  163.  
  164. <VirtualHost *:80> \\配置虚拟主机2,用于访问xcache管理页面以及md5加密生成页面 
  165.     ServerAdmin webmaster@rsyslog.org 
  166.     DocumentRoot "/usr/local/apache2/htdocs/admin" 
  167.     ServerName admin.rsyslog.org 
  168.     ErrorLog "logs/admin.rsyslog.org-error_log" 
  169.     CustomLog "logs/admin.rsyslog.org-access_log" common 
  170. </VirtualHost> 
  171. endf 
  172. /usr/local/apache2/bin/apachectl stop 
  173. /usr/local/apache2/bin/apachectl start 
  174. #http://admin.rsyslog.org/index.php  Look xcache status! Need input username and password! 
  175. #http://admin.rsyslog.org/mkpassword.php  Create MD5 password 
  176. #http://bbs.rsyslog.org/install  Install Discuz 
  177. #http://bbs.rsyslog.org  Access Discuz! 
  178. \\以上脚本结束 
  179. 请在DNS中添加A记录 
  180. bbs A   192.168.100.104 
  181. admin   A   192.168.100.104 

 

实验结果如下:

 

Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛_论坛搭建

Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛_最新LAMP脚本_02

Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛_最新LAMP脚本_03

 

实验扩展

1、   安装mysqladmin管理mysql

 

  1. [root@rhel6u3-4 admin]# mkdir /usr/local/apache2/htdocs/admin/phpmyadmin 
  2. [root@rhel6u3-4 mypackages]# tar xf phpMyAdmin-2.11.0-all-languages.tar.gz 
  3. [root@rhel6u3-4 mypackages]# cp -rp phpMyAdmin-2.11.0-all-languages/* /usr/local/apache2/htdocs/admin/phpmyadmin/ 
  4. [root@rhel6u3-4 mypackages]# cd /usr/local/apache2/htdocs/admin/phpmyadmin/ 
  5. [root@rhel6u3-4 phpmyadmin]# cp -p config.sample.inc.php config.inc.php 
  6. [root@rhel6u3-4 phpmyadmin]# vim config.inc.php 
  7. $cfg['blowfish_secret'] = 'rsyslog.org'; 

Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛_论坛搭建_04

Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛_论坛搭建_05

 

以上为最简单的配置,可以看到phpmyadmin可以对数据库进行备份恢复、对表进行填写修改删除等操作,相对于命令操作而言还是挺方便的。

 

2、   优化php,提高安全性

注意:以下为php的内部函数部分,可根据公司开发人员或者自身需求而定。

 

  1. [root@rhel6u3-4 admin]# vim /usr/local/php/etc/php.ini 
  2. disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec, 
  3. proc_open,proc_get_status,error_log,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,sy mlink,leak, popepassthru,stream_socket_server 

 

3、   给论坛导入数据(一个游戏论坛的数据,呵呵!

 

  1. [root@rhel6u3-4 mypackages]# cp dbbackup.sql  /var/lib/mysql/ 
  2. [root@rhel6u3-4 mysql]# mysql -uroot –p 
  3. mysql> use dz_bbs 
  4. mysql> source dbbackup.sql 

Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛_LAMP_06

后面陆续会讲 web层的负载均衡,负载均衡层的高可用,数据库的负载均衡等等