由于Nginx有大并发的优势,现在越来越多的企业LAMP平台都在向LNMP迁移。现实生产环境下,不同的业务需求都不相同,因此更多的企业会考虑使用×××LNMP环境,这样可以更加灵活使用各个功能参数将性能调制到最佳状态。当然如果贵公司的环境比较简单,可以考虑rpm包安装。

一、系统环境

Centos-6.4-x86_64为例,安装时选择中文Minimal模式,关闭selinux功能。

[root@bbs ~]# uname -r

2.6.32-358.el6.x86_64

[root@bbs ~]# cat/etc/redhat-release

CentOS release 6.4 (Final)

[root@bbs ~]# vi/etc/sysconfig/iptables

-A INPUT -m state --state NEW -mtcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙

-A INPUT -m state --state NEW -mtcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙

特别提示:很多人把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端口这条规则的下面。


二、开始安装部署LNMP

1、部署环境之前,先准备好所需的软件包,简历一个ftp共享,下载libmcrypt-2.5.8.tar.gzpcre-8.33.tar.gzzlib-1.2.8.tar.gzlibmcrypt-2.5.8.tar.gzmhash-0.9.9.tar.gznginx-1.4.3.tar.gzmysql-5.6.14.tar.gz php-5.4.21.tar.gz,软件包到ftp下的lnmp-bbs文件夹。并将Centos6.4关盘中yum软件仓库全都放到ftp的根目录下。修改yum配置指定的软件仓库位置如下:

[local]

name=CentOS-6.4-LAN

baseurl=ftp://192.168.1.100/

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[root@bbs ~]# yum clean all       //清空yum缓存

[root@bbs ~]# yum check-update   //检查可更新的rpm


2、安装我们所需要的软件工具。

[root@bbs ~]# yum -y install vimgcc gcc-c++ automake autoconf libtool glibc make cmake wget unzip sendmai

安装一些lnmp依赖的库,yum能够自动解决依赖包问题,功能明显优越于rpm安装。

[root@bbs ~]# yum -y installlibxslt-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetypefreetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-develncurses ncurses-devel curl libcurl-devel e2fsprogs e2fsprogs-devel krb5-devellibidn libidn-devel openssl openssl-devel

3、安装nginx软件包

关于nginx详细配置可参看以下文档:

http://www.nginx.cn/install

安装pcre软件包,为nginx提供兼容perl的正则表达式库。

[root@bbs lnmp-bbs]# tar xfpcre-8.33.tar.gz

[root@bbs pcre-8.33]# cd pcre-8.33

[root@bbs pcre-8.33]# ./configure

[root@bbs pcre-8.33]# make&& make install


nginx提供gzip的支持

[root@bbs lnmp-bbs]# tar xfzlib-1.2.8.tar.gz

[root@bbs zlib-1.2.8]# cdzlib-1.2.8

[root@bbs zlib-1.2.8]# ./configure

[root@bbs zlib-1.2.8]# make&& make install


支持ssl协议

[root@bbs lnmp-bbs]# tar xfopenssl-1.0.1e.tar.gz

[root@bbs openssl-1.0.1e]# cdopenssl-1.0.1e

[root@bbs openssl-1.0.1e]# ./config

[root@bbs openssl-1.0.1e]# make&& make install


编译nginx

[root@bbs lnmp-bbs]# useradd nginx-r -s /sbin/nologin

[root@bbs lnmp-bbs]# tar xfnginx-1.4.3.tar.gz

[root@bbs lnmp-bbs]# cd nginx-1.4.3

[root@bbs nginx-1.4.3]# ./configure\

> --prefix=/usr/local/nginx/ \

> --sbin-path=/usr/local/nginx/sbin/nginx\

>--conf-path=/etc/nginx/nginx.conf \

>--error-log-path=/var/log/nginx/error.log \

>--http-log-path=/var/log/nginx/access.log \

>--pid-path=/usr/local/nginx/nginx.pid \

> --user=nginx \

> --group=nginx \

> --with-http_ssl_module \

> --with-http_flv_module \

> --with-http_gzip_static_module\

> --with-http_stub_status_module\

>--http-client-body-temp-path=/usr/local/nginx/client \

>--http-proxy-temp-path=/usr/local/nginx/proxy \

>--http-fastcgi-temp-path=/usr/local/nginx/fcgi \

>--with-pcre=/home/lnmp-bbs/pcre-8.33 \           //注意,这里是pcre源码包的位置,不是安装目录,写错了会报错,编译不过去

>--with-zlib=/home/lnmp-bbs/zlib-1.2.8 \          //注意,这里是zlib源码包的位置

>--with-openssl=/home/lnmp-bbs/openssl-1.0.1e     //注意,这里是openssl源码包的位置

[root@bbs nginx-1.4.3]# make&& make install

[root@bbs nginx-1.4.3]# chown -Rnginx:nginx /usr/local/nginx/html

[root@bbs nginx-1.4.3]# ln -s/usr/local/nginx/sbin/* /usr/local/sbin/

[root@bbs nginx-1.4.3]# ln -s/usr/local/nginx/html /var/local/

标准的nginx启动命令:

/usr/local/nginx/sbin/nginx -c/etc/nginx/nginx.conf

浏览器中输入 http://ip           看到上面nginx 欢迎界面说明启动成功


4、安装mysql数据库

安装mysql包,并设置mysql开机自动启动。

[root@bbs lnmp-bbs]# useradd mysql -r -s /sbin/nologin

[root@bbs lnmp-bbs]# mv /etc/my.cnf /etc/my.cnf.bak            //安装centos时,系统会自动穿件这个文件,一定要改名或删除,不然mysql会报错不能启动【StartingMySQL..... ERROR! The server quit without updating PID file(/var/lib/mysql/bbs.test.pid).

[root@bbs lnmp-bbs]# mkdir -p/data/mysqldb          

[root@bbs lnmp-bbs]# chown -Rmysql:mysql /data/mysqldb

[root@bbs lnmp-bbs]# tar xfmysql-5.6.14.tar.gz

[root@bbs nginx-1.4.3]# cd mysql-5.6.14

cmake的详细参数,请参考以下文章:

http://952259538.blog.51cto.com/6841773/1329339

http://my.oschina.net/cxz001/blog/132090

[root@bbs mysql-5.6.14]# cmake .-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \  

                                                    //mysql安装目录

> -DDEFAULT_CHARSET=utf8 \                           //默认的字符集

> -DDEFAULT_COLLATION=utf8_general_ci\               //编码校对规则

> -DENABLED_PROFILING=ON \                           //是否启用代码查询分析

> -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk\             //额外的字符集

> -DWITH_READLINE=1 \                                //使用绑定的readline

> -DWITH_DEBUG=0 \                                   //不开启调试

> -DWITH_MYISAM_STORAGE_ENGINE=1\                    //myisam引擎

> -DWITH_INNOBASE_STORAGE_ENGINE=1\                  //innodb 引擎

> -DMYSQL_DATADIR=/data/mysqldb\                     //数据库存放目录

> -DENABLED_LOCAL_INFILE=1 \                         //允许从本地导入数据

> -DEXTRA_CHARSETS=all                               //启用所有扩展字符集

其它的一些数据引擎,在缺省情况下,MYSQL支持三个引擎:ISAMMYISAMHEAP(Memory),其它的引擎也编译进去了,只是不启用。

-DWITH_MEMORY_STORAGE_ENGINE=1

   -DWITH_ARCHIVE_STORAGE_ENGINE=1

   -DWITH_BLACKHOLE_STORAGE_ENGINE=1

   -DWITH_FEDERATED_STORAGE_ENGINE=1

   -DWITH_PARTITION_STORAGE_ENGINE=1

如果你想除去对某种引擎的支持,则在CMake编译选项中使用-DWITHOUT_<ENGINE>_STORAGE_ENGINE去掉该引擎

[root@bbs mysql-5.6.14]# make&& make install

[root@bbs mysql-5.6.14]# chown -Rmysql:mysql /usr/local/mysql

[root@bbs mysql-5.6.14]# \cp/usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

[root@bbs mysql-5.6.14]# \cp/usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@bbs mysql-5.6.14]# /usr/local/mysql/scripts/mysql_install_db--user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb                   //初始化mysql

[root@bbs mysql-5.6.14]# chkconfigmysqld on                    //设置开机启动

[root@bbs mysql-5.6.14]# service mysqld start

[root@bbs mysql-5.6.14]# mysqladmin-u root password 123456     //创建数据库管理用户及密码或使用密文形式的命令创建密码:mysql_secure_installation

[root@bbs mysql-5.6.14]# ln -s/usr/local/mysql/bin/* /usr/local/bin/

[root@bbs mysql-5.6.14]# ln -s /usr/local/mysql/man/man1/*  /usr/share/man/man1

[root@bbs mysql-5.6.14]# ln -s /usr/local/mysql/man/man8/*  /usr/share/man/man8


5、安装php软件包

PHP5手册http://www.php100.com/manual/php/

安装php软件之前,需要安装以下库,方可更佳完美的支持php软件

//libmcrypt 可以使php支持更多加密算法。

[root@bbs lnmp-bbs]# tar xflibmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8

./configure

make && make install


//mhash是一个哈稀演函数库,它可以支持多种哈稀演算法

[root@bbs lnmp-bbs]# tar xfmhash-0.9.9.tar.gz

cd mhash-0.9.9

./configure

make && make install


[root@bbs lnmp-bbs]# tar xfphp-5.4.21.tar.gz

[root@bbs lnmp-bbs]# cd php-5.4.21

[root@bbs php-5.4.21]# ./configure --prefix=/usr/local/php--enable-fpm \

--with-mcrypt=/usr/local/libmcrypt\

--enable-mbstring --disable-pdo--with-curl --disable-debug --disable-rpath \

--enable-inline-optimization--with-bz2 --with-zlib --enable-sockets \

--enable-sysvsem --enable-sysvshm--enable-pcntl --enable-mbregex \

--with-mhash --enable-zip--with-pcre-regex --with-mysql --with-mysqli \

--with-gd --with-jpeg-dir--with-iconv-dir --with-png-dir --with-libxml-dir \

--with-curlwrappers --with-openssl--with-xmlrpc --enable-xml \

--enable-gd-native-ttf  --enable-shmop

都需要定制哪些功能,参数选项根据自己需求去修改。

[root@bbs php-5.4.21]# make && make install

[root@bbs php-5.4.21]# \cp/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

[root@bbs php-5.4.21]# \cp/home/lnmp-bbs/php-5.4.21/php.ini-production /usr/local/php/lib/php.ini

[root@bbs php-5.4.21]# \cp/home/lnmp-bbs/php-5.4.21/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@bbs php-5.4.21]# chmod +x /etc/init.d/php-fpm

[root@bbs php-5.4.21]# ln -s/usr/local/php/bin/* /usr/local/bin/

[root@bbs php-5.4.21]# ln -s/usr/local/php/sbin/* /usr/local/sbin/

[root@bbs php-5.4.21]# ln -s/usr/local/php/etc/php-fpm.conf /etc/

[root@bbs php-5.4.21]# ln -s/usr/local/php/lib/php.ini /etc/


6、无需重新编译php加入ftp扩展的解决方法

php编译的时候,没有添加ftp模块,我们不需要从新编译,从新安装php,也可以添加ftp模块。

首先,进入源码目录

cd php-5.4.21/ext/ftp

#运行phpize生成configure

/usr/local/php/bin/phpize

#编译,指定php-config,注意这里的php-config,不是php.ini

./configure--with-php-config=/usr/local/php/bin/php-config

#上面可以添加--enable-ftp,也可以不用添加

#编译安装

make && make install

#生成一个目录来存放扩展的模块

mkdir /usr/local/php/ext

#复制ftp.so到模块目录

cp/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ftp.so/usr/local/php/ext/

#编辑php.ini文件,指定PHP到哪个目录读模块

vi /usr/local/php/lib/php.ini

复制代码代码如下:

extension_dir="/usr/local/php/ext"

#Load模块

extension=ftp.so

#保存退出

至此,成功完成ftp扩展的加载。


三、修改配置文件

1nginx配置文件修改

vim /etc/nginx/nginx.conf

//修改nginx使用的用户为nginx,编译时指定过默认使用的用户,此处默认注释即可,不修改也没关系

2   user nginx;  

//添加php默认打开页面

45             index index.php index.htmlindex.htm;

//去掉一下注释,开启FastCGI功能,用来调用php接口

65         location ~ \.php$ {

66             root           html;

67             fastcgi_pass   127.0.0.1:9000;      //设置监听IP及端口

68             fastcgi_index index.php;

69             fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;                     //红色部分为网站相对路径,或改成绝对路径

70            include        fastcgi_params;

71        }


2php配置文件

vim /usr/local/php/etc/php-fpm.conf

去掉下边的分号 pidphp-fpm产生的进程号

25  pid = run/php-fpm.pid

php的用户和组都改成nginx

148  user = nginx

149  group = nginx

vim /usr/local/php/lib/php.ini

禁止显示php版本的信息

376  expose_php = Off

//时区改为PRC,就是×××。

919  date.timezone = PRC

测试php页面能够正常访问

vim /usr/local/nginx/html/test.php

<?php

phpinfo()           //长标签,php默认此模式

?>

<?phpinfo();?>       //短标签,需求改php.ini开启短标签,不推荐开启短标签功能


测试mysql是否成功

vim /usr/local/nginx/html/conn.php

加入以下

<?php

$link=mysql_connect('localhost','root','123456');

var_dump($link);

?>

输入http://ip/conn.php

看到下面字样,表示成功:

resource(3) of type (mysql link)


三、Discuz_X3.1_SC_UTF8.zip

1、使用unzip命令对Discuz_X3.1_SC_UTF8.zip进行解压,将upload中的文件全部复制到/usr/local/nginx/html里边。把目录属组都改成nginx或目录权限改成777,否则论坛无法使用,然后登陆浏览器,按向导安装就可以了。

CentOS-6.4 源码包编译安装LNMP +Discuz开源论坛(mysql-5.6.14 +PHP-5.4.21+nginx-1.4.2)_屏蔽外链

数据库地址填写mysql服务器地址,如果是本机,写localhost就行。管理员账号和密码一定要记住,不然无法对网站用户进行管理。

CentOS-6.4 源码包编译安装LNMP +Discuz开源论坛(mysql-5.6.14 +PHP-5.4.21+nginx-1.4.2)_discuz改成InnoDB引擎_02

mysql服务在本机时,可能出现此错误,这时数据库服务器地址不要使用localhost,改成127.0.0.1即可。

修改论坛logo,第一种方法就是直接上传图片,在管理中心修改链接。第二种方法是直用相同名字的图片,直接替换网站路径里的图片。

CentOS-6.4 源码包编译安装LNMP +Discuz开源论坛(mysql-5.6.14 +PHP-5.4.21+nginx-1.4.2)_discuz重置创始人密码_03

修改左下角的外链,上半部分直接在管理中心去修改就可以了鼠标点击一下就可以了。

CentOS-6.4 源码包编译安装LNMP +Discuz开源论坛(mysql-5.6.14 +PHP-5.4.21+nginx-1.4.2)_屏蔽外链_04

下半部分就要修改网页代码了,才能屏蔽掉。注意:htm页面用<!--  -->注释

vim /usr/local/nginx/html/template/default/common/footer.htm

76             <!-- </div>

77                 <div id="frt">

78                         <p>Powered by<strong><a href="http://www.discuz.net    "target="_blank">Discuz!</a></strong> <em>$_G['setting']['version']</em><!-    -{if!empty($_G['setting']['boardlicensed'])}--> <ahref="http://license.com   senz.com/?pid=1&host=$_SERVER[HTTP_HOST]"target="_blank">Licensed</a><!--{/    if}--></p>

79                         <pclass="xs0">&copy; 2001-2013 <a href="http://www.    comsenz.com"target="_blank">Comsenz Inc.</a></p>

80                 </div>-->

CentOS-6.4 源码包编译安装LNMP +Discuz开源论坛(mysql-5.6.14 +PHP-5.4.21+nginx-1.4.2)_lnmp+discuz _05

右下角外链修改也是分为2部分,进行修改。

CentOS-6.4 源码包编译安装LNMP +Discuz开源论坛(mysql-5.6.14 +PHP-5.4.21+nginx-1.4.2)_discuz重置创始人密码_06

在管理中心,可以对Comsenz Inc.进行修改,删除或是改成其它的名字或链接。

防水墙的链接修改,有一下几种方案。

vim/usr/local/nginx/html/source/plugin/security/security.class.php

显示图片和图片上的文字,将原来的代码改成一下代码

102 /*      function global_footerlink() {

103                 return '&nbsp;<ahref="http://discuz.qq.com/service/security"target="_blank" title="'.lang('plugin/security',     'title').'"><imgsrc="static/p_w_picpath/common/security.png"></a>';

104        }

102         function global_footerlink() {

103             return ' <a  target="_blank"

        title="'.lang('plugin/security','title').'" rel="nofollow"><img src

  ="static/p_w_picpath/common/security.png"></a> ';

104         }

如果你要保留图标,那就只删除<a>…</a>标签的内容就可以了,<img>就别删了。

将图标与链接全部删除:用/*…..*/注释掉相关代码,或全部删除。



2discuz论坛创始人密码忘记解决办法

方法一直接修改数据库,前提是你能看到这个数据库

discuz建立一个论坛,创始人的密码忘了,只有修改数据库。

修改这个表cdb_members

discuz中用的密码是用两次md5加密的。

create proc updateAdminPwd

as

declare salt varchar(30)

select  set salt = salt from cdb_members whereusername = 'admin'

update cdb_members

set password =md5(concat(md5('admin'),salt))

where username = 'admin'


方法二在网站根目录下的子目录uc_server/data中打开找到文件config.inc.php

以及 config/config_global.phpconfig/config_ucenter.php (这两个如果没有下面代码可以不用修改)

找到类似以下代码:

define('UC_FOUNDERPW','256955f2e034sad74f0e2953572ea360');

define('UC_FOUNDERSALT', '217804');

然后用以下代码替换

define('UC_FOUNDERPW','047099adb883dc19616dae0ef2adc5b6');

define('UC_FOUNDERSALT', '311254');

修改完后,Ucenter创始人的密码就变为: 123456789 ,这时可以登录到Ucenter里再把密码改为自己想要的就可以了。

方法三:创建下面的php文件

<?php

$ucfounderpw = '123123';

$ucsalt = rand(100000,999999);

$ucfounderpw =md5(md5($ucfounderpw).$ucsalt);

echo $ucfounderpw.'<br/>'.$ucsalt;

?>

生成的ucfounderpwucsalt

替换掉bbs\uc_server\data\config.inc.php文件里的参数

方法三:下载工具程序直接修改,当然要上传到空间的

http://www.discuz.net/thread-1667317-1-1.html


3discuz数据库迁移,mysql密码更改后,相关配置文件修改如下

网站系统需要修改的位置有两处 Discuz UC-center

①路径: /usr/local/nginx/html/config/config_global.php 这个根据你网站安装的路径而定。

 打开 config_global.php 文件修改:$_config['db']['1']['dbpw'] = '原来密码';

 原来密码修改为新的数据库密码。

②路径:/usr/local/nginx/html/config/config_ucenter.php

 打开 config_ucenter.php 文件同样要修改:define('UC_DBPW', '原来密码');

③路径:/usr/local/nginx/html/uc_server/data/config.inc.php

 打开 config.inc.php 文件修改:define('UC_DBPW', '原来密码');原来密码修改为新的数据库密码。

原来密码修改为新的数据库密码。在这个不修改的情况下,用户包括管理员都无法登录的,这个是用户登录管理密码。

到这里整个论坛都恢复正常访问了。


Discuz默认使用的数据库引擎是MyISAMMySQL InnoDB 引擎相比我们论坛默认的 MyISAM 引擎在写性能上有很大提升。InnoDB 支持行锁(更准确的说是索引锁)而 MyISAM 只能是表锁。使得 InnoDB 在高并发环境中有更好的表现。

Discuz! X2 或者更早的版本,有站长手动把数据库引擎转为 InnoDB , 来避免论坛发帖高峰时期带来的卡顿,

但是 Discuz! X2.5 以及 Discuz! X3版本,由于 post 表使用了联合自增主键,而InnoDB 不支持这个特性,而无法手动把数据库引擎改为 InnoDB

考虑到大型站点站长们的这个需求后,发布了在大型论坛测试过的Discuz! X2.5 / X3  InnoDB 补丁测试版。

基本原理:

1,去掉 post position 字段的自增属性。

2,利用内存缓存来记录每个帖子的当前最大楼层数,并在发帖请求过来时依次分发并自增楼层号。

3,由于内存缓存速度极快当多个发帖请求过来后能快速自增并分配楼层号,每条插入语句都能快速领取到唯一楼层号。

4,内建了错误修复机制避免内存失效或者统计错误时自动修复。

5,取消了 count(*) 语句,改为读取模糊值。

适应场景:

发帖比较频繁,适应于会员热衷于交流场景,日发帖一般在数万贴每日的。

服务器要求:

1,独立服务器,或能执行命令行(命令行避免超时)

2,启用了内存缓存(建议为 memcacheredis

具体操作请看以下链接:

http://www.discuz.net/thread-3251930-1-1.html

http://www.discuz.net/thread-3330856-1-1.html

http://www.discuz.net/thread-3334048-1-1.html