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
Linux下Apache与MySQL+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模式,防火墙关闭.
一、系统环境:
- [root@rhel6u3-4 ~]# uname -r
- 2.6.32-279.el6.i686
- [root@rhel6u3-4 ~]# cat /etc/redhat-release
- Red Hat Enterprise Linux Server release 6.3 (Santiago)
- [root@rhel6u3-4 ~]#
- [root@rhel6u3-4 ~]# cd mypackages/
- [root@rhel6u3-4 mypackages]# ll
- -rwxr-xr-x. 1 root root 982243 Dec 18 07:24 apr-1.4.6.tar.gz
- -rwxr-xr-x. 1 root root 774770 Dec 18 07:24 apr-util-1.4.1.tar.gz
- -rw-r--r--. 1 root root 9489788 Mar 1 19:21 Discuz.zip
- -rwxr-xr-x. 1 root root 1273059 Dec 18 07:24 gd-2.0.34.tar.gz
- -rwxr-xr-x. 1 root root 5616185 Dec 18 07:24 httpd-2.4.2.tar.gz
- -rwxr-xr-x. 1 root root 875425 Dec 18 07:24 libmcrypt-2.5.8.tar.bz2
- -rwxr-xr-x. 1 root root 655906 Dec 18 07:24 mhash-0.9.9.9.tar.bz2
- -rwxr-xr-x. 1 root root 24660795 Dec 18 07:25 mysql-5.5.25a.tar.gz
- -rwxr-xr-x. 1 root root 14060505 Dec 18 07:25 php-5.4.4.tar.gz
- -rwxr-xr-x. 1 root root 782725 Dec 18 07:25 re2c-0.13.5.tar.gz
- -rwxr-xr-x. 1 root root 134833 Dec 18 07:25 xcache-2.0.1.tar.gz
- -rw-r--r--. 1 root root 4323279 Dec 11 2009 phpMyAdmin-2.11.0-all-languages.tar.gz
- [root@rhel6u3-4 mypackages]#
二、开始安装部署LAMP
脚本如下
- [root@rhel6u3-4 mypackages]# vim packages \\由于整个环境会涉及比较多的依赖关系包,所以我们先将一些依赖包装上。(根据不同的环境可能不仅限于这些包)这里创建了一个安装依赖包的函数,在脚本中调用即可.
- #Install install LAMP from dependent Packages!
- 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' \\可以将所需要的包全部卸载里面进行安装
- \\以下是个查询包是否安装机制,如果没有安装则安装
- for i in $PKG
- do
- rpm -q $i &> /dev/null
- [ $? -ne 0 ] && UNPKG="$UNPKG $i"
- done
- [ -n "$UNPKG" ] && yum install $UNPKG -y
- echo "Dependent Packages install OK...."
- [root@rhel6u3-4 mypackages]#
- [root@rhel6u3-4 mypackages]# vim lamp.sh //以下是LAMP搭建脚本
- #!/bin/bash
- #install LAMP from Source Packages
- #Designed by xiaonuo http://dreamfire.blog.51cto.com www.rsyslog.org
- #If you have any questions,please send e-mail to yum.linux@gmail.com
- #install dependent Package for LAMP, Please submit all source package into the directory ~/mypackages!
- mkdir -p ~/mypackages
- yum clean all
- yum makecache
- . ~/mypackages/packages \\调用函数安装系统依赖包
- \\除了这些redhat光盘自带的包以外,还有一些其他的源码包。
- #install GD2 \\GD2是一个生成图片所使用的依赖包
- cd ~/mypackages/
- tar xf gd-2.0.34.tar.gz
- cd gd-2.0.34
- ./configure --prefix=/usr/local/gd2
- make && make install
- #install apr \\apr是apache的一个依赖包,虽然系统是自带这个包,但是版本太低,不适用于apache2.4版本。
- cd ~/mypackages/
- tar xf apr-1.4.6.tar.gz
- cd apr-1.4.6
- ./configure --prefix=/usr/local/apr
- make && make install
- #install apr-util
- cd ~/mypackages/
- tar xf apr-util-1.4.1.tar.gz
- cd apr-util-1.4.1
- ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
- make && make install
- # install libmcrypt mhash \\linmcrypt与mhash是php会依赖的一些包
- cd ~/mypackages/
- tar xf libmcrypt-2.5.8.tar.bz2
- cd libmcrypt-2.5.8
- ./configure --prefix=/usr/local/libmcrypt
- make && make install
- cd ~/mypackages/
- tar xf mhash-0.9.9.9.tar.bz2
- cd mhash-0.9.9.9
- ./configure --prefix=/usr/local/mhash
- make && make install
- #install mysql-5.5.25 and configure mysql! \\Mysql这些选择的是mysql5.5版本,些版本一改原有的编译方式,使用cmake代替了原来的configure。
- useradd mysql
- cd ~/mypackages/
- tar xf mysql-5.5.25a.tar.gz
- cd mysql-5.5.25a
- 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
- cmake . -LH查看帮助,类似于./configure –help
- -DCMAKE_INSTALL_PREFIX= 指定安装主目录
- -DMYSQL_DATADIR 指定库文件存放目录
- -DMYSQL_UNIX_ADDR 指定socket文件所在路径
- -DDEFAULT_CHARSET 指定使用的默认字符编码
- -DDEFAULT_COLLATION 指定使用的默认字符规则
- -DWITH_EXTRA_CHARSETS 其他字符码支持
- -DWITH_MYISAM_STORAGE_ENGINE 编译myisam存储引擎
- -DWITH_INNOBASE_STORAGE_ENGINE 编译innodb存储引擎
- -DWITH_READLINE 增加readline支持,通过 readline,可以方便的在命令行上面移动,增删,复制,粘贴,搜索。
- -DENABLED_LOCAL_INFILE 让mysql支持从本地文件导入数据库\\
- make && make install
- cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
- sed -i '37iuser = mysql' /etc/my.cnf
- mkdir /var/lib/mysql/
- chown mysql. /var/lib/mysql
- echo "export PATH=$PATH:/usr/local/mysql/bin/" >> ~/.bashrc
- . ~/.bashrc
- /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql --basedir=/usr/local/mysql --builddir=/usr/local/mysql
- cp ~/mypackages/mysql-5.5.25a/support-files/mysql.server /etc/init.d/mysqld \\创建启动脚本
- chmod 755 /etc/init.d/mysqld
- service mysqld start
- chkconfig --add mysqld
- mysqladmin password '123.com' \\创建root密码
- #install httpd
- cd ~/mypackages/
- tar xf httpd-2.4.2.tar.gz
- cd httpd-2.4.2
- ./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/
- make && make install
- /usr/local/apache2/bin/apachectl start
- links -dump 127.0.0.1 \\完成之后记得测试httpd环境是否OK
- echo 'If you see It works!,Congratulation! Please press enter '
- #read \\如果你不放心,可以设置断点,先测试网站是否可以访问,如果OK,按回车继续即可
- ## install php
- cd ~/mypackages/
- tar xf php-5.4.4.tar.gz
- cd php-5.4.4
- ./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
- php常见参数介绍
- --with-config-file-path与--with-config-file-scan-dir在指定php配置文件的路径
- --with-mysql和--with-mysqli在指定你的mysql的位置和它的相关工具
- --with-iconv-dir,--with-freetype-dir,-with-jpeg-dir,--with-png-dir,--withgd,--with-zlib,--with-libxml-dir这些都是在启用对某种文件的支持
- --with-curl和--with-curlwrappers是用于支持curl函数,此函数允许你用不同的协议连接和沟通不同的服务器
- --with-openssl,--with-mhash,--with-mcrypt这都是和加密有关的参数,启用它们是为了让php可以更好的支持各种加密。
- "--enable-bcmath" 高精度数学运算组件。
- "--enable-shmop" 和 "--enable-sysvsem" 使得你的PHP系统可以处理相关的IPC函数 。IPC是一个Unix标准通讯机制,它提供了使得在同一台主机不同进程之间可以互相通讯的方法。
- "--enable-inline-optimization" 栈堆指针和优化线程。
- "--enable-pcntl" 多线程优化。
- make && make install
- mkdir /usr/local/php/etc
- cp ~/mypackages/php-5.4.4/php.ini-production /usr/local/php/etc/php.ini
- #install re2c xcache \\XCache是一个开源的opcode和var的缓存器,其工作原理是通过内存来缓存php的编译结果,当用户读取php网页时后台的php编译器不参加编译工作,而是将内存中的结果直接供用户读取,从而减轻频繁编译对服务器造成的压力。与同类的apc、eaccelerator相比XCache具有覆盖速度快、大流量/高负载的机器上运行稳定、能够快速跟进php版本。安装xcache之前先安装xcache的一个信赖包re2c。之后安装xcache
- cd ~/mypackages/
- tar xf re2c-0.13.5.tar.gz
- cd re2c-0.13.5
- ./configure
- make && make install
- cd ~/mypackages/
- tar xf xcache-2.0.1.tar.gz
- cd xcache-2.0.1
- /usr/local/php/bin/phpize
- ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config --enable-xcache-optimizer --enable-xcache-assembler --enable-xcache-encoder --enable-xcache-decoder
- make && make install
- #Configure Xcache
- cp -r ~/mypackages/xcache-2.0.1/admin/ /usr/local/apache2/htdocs/
- chmod 755 /usr/local/apache2/htdocs/admin
- chmod a+r /usr/local/apache2/htdocs/admin/*
- mkdir -p /usr/local/php/etc/php.d
- cp ~/mypackages/xcache-2.0.1/xcache.ini /usr/local/php/etc/php.d/
- #vim /usr/local/php/etc/php.d/xcache.ini
- XCACHE=$(find /usr/local/php/ -name xcache.so) \\创建一个变量内容为xcache.so的路径
- sed -i "s%/usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache\.so%$XCACHE%" /usr/local/php/etc/php.d/xcache.ini
- sed -i 's%mOo%admini%' /usr/local/php/etc/php.d/xcache.ini \\创建用户名为admini
- sed -i 's%^xcache\.admin\.pass.*%xcache.admin.pass = "cbff36039c3d0212b3e34c23dcde1456"%' /usr/local/php/etc/php.d/xcache.ini \\创建密码为123.com, xcache.admin.pass 是一个通过md5加密之后的密码
- cat >> /usr/local/apache2/htdocs/phpinfo.php <<endf \\创建PHP测试
- <?php
- phpinfo();
- ?>;
- endf
- echo "please input http://127.0.0.1/phpinfo.php to IE! if it's ok,please press enter "
- #read\\可设置断点测试php是否OK
- #vim /usr/local/apache2/conf/httpd.conf \\配置apache与php集成
- sed -i '375iAddType application/x-httpd-php \.php' /usr/local/apache2/conf/httpd.conf \\在375行下面插入一行
- sed -i 's%index\.html%index.html index.php%' /usr/local/apache2/conf/httpd.conf \\写上index.php主页
- sed -i '/httpd-mpm\.conf/s/#//' /usr/local/apache2/conf/httpd.conf
- sed -i '/httpd-vhosts\.conf/s/#//' /usr/local/apache2/conf/httpd.conf \\开启虚拟主机
- sed -i '/httpd-info\.conf/s/#//' /usr/local/apache2/conf/httpd.conf
- sed -i '/httpd-default\.conf/s/#//' /usr/local/apache2/conf/httpd.conf
- \\注意:以上 4 个扩展配置文件中的设置需要根据实际需要进行更改。
- mkdir -p /usr/local/apache2/htdocs/bbs \\创建虚拟主机目录,可更换为其他目录
- #vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
- cat >/usr/local/apache2/conf/extra/httpd-vhosts.conf <<endf
- NameVirtualHost *:80
- <VirtualHost *:80> \\创建虚拟主机1,用于配置访问DZ论坛
- ServerAdmin webmaster@rsyslog.org
- DocumentRoot "/usr/local/apache2/htdocs/bbs"
- ServerName bbs.rsyslog.org
- ErrorLog "logs/bbs.rsyslog.org-error_log"
- CustomLog "logs/bbs.rsyslog.org-access_log" common
- </VirtualHost>
- <VirtualHost *:80> \\配置虚拟主机2,用于访问xcache管理页面以及md5加密生成页面
- ServerAdmin webmaster@rsyslog.org
- DocumentRoot "/usr/local/apache2/htdocs/admin"
- ServerName admin.rsyslog.org
- ErrorLog "logs/admin.rsyslog.org-error_log"
- CustomLog "logs/admin.rsyslog.org-access_log" common
- </VirtualHost>
- endf
- /usr/local/apache2/bin/apachectl stop
- /usr/local/apache2/bin/apachectl start
- #http://admin.rsyslog.org/index.php Look xcache status! Need input username and password!
- #http://admin.rsyslog.org/mkpassword.php Create MD5 password
- #http://bbs.rsyslog.org/install Install Discuz
- #http://bbs.rsyslog.org Access Discuz!
- \\以上脚本结束
- 请在DNS中添加A记录
- bbs A 192.168.100.104
- admin A 192.168.100.104
实验结果如下:
实验扩展
1、 安装mysqladmin管理mysql
- [root@rhel6u3-4 admin]# mkdir /usr/local/apache2/htdocs/admin/phpmyadmin
- [root@rhel6u3-4 mypackages]# tar xf phpMyAdmin-2.11.0-all-languages.tar.gz
- [root@rhel6u3-4 mypackages]# cp -rp phpMyAdmin-2.11.0-all-languages/* /usr/local/apache2/htdocs/admin/phpmyadmin/
- [root@rhel6u3-4 mypackages]# cd /usr/local/apache2/htdocs/admin/phpmyadmin/
- [root@rhel6u3-4 phpmyadmin]# cp -p config.sample.inc.php config.inc.php
- [root@rhel6u3-4 phpmyadmin]# vim config.inc.php
- $cfg['blowfish_secret'] = 'rsyslog.org';
以上为最简单的配置,可以看到phpmyadmin可以对数据库进行备份恢复、对表进行填写修改删除等操作,相对于命令操作而言还是挺方便的。
2、 优化php,提高安全性
注意:以下为php的内部函数部分,可根据公司开发人员或者自身需求而定。
- [root@rhel6u3-4 admin]# vim /usr/local/php/etc/php.ini
- disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,
- 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、 给论坛导入数据(一个游戏论坛的数据,呵呵!)
- [root@rhel6u3-4 mypackages]# cp dbbackup.sql /var/lib/mysql/
- [root@rhel6u3-4 mysql]# mysql -uroot –p
- mysql> use dz_bbs
- mysql> source dbbackup.sql
后面陆续会讲 web层的负载均衡,负载均衡层的高可用,数据库的负载均衡等等