LNMP平台搭建

搭建环境:Redhat6.5php

建议:将全部包放到/root下,与本文路径相同css


 安装mysqlhtml

下载mysql:前端

官网:https://www.mysql.com/java

连接:https://pan.baidu.com/s/1kSVk-2ibHxpPijtKIty0ow node

提取码:ke57mysql

解压mysql源码包:linux

tar zxf mysql-boost-5.7.11.tar.gz -C /root  #这里解压到/root下,由于后面编译的时候调用的是/root/mysql-5.7.11/自带的boost库nginx

安装cmake工具:c++

连接:https://pan.baidu.com/s/19Fftaqhq8ilcJPYZGr4e1g
提取码:4rop

yum localinstall cmake-2.8.12.2-4.el6.x86_64.rpm -y

安装依赖性:

yum install gcc gcc-c++ ncurses-devel bison -y  #这些包Redhat镜像中自带

cd mysql-5.7.11/

编译:

#若是编译报错,首先删除编译过程当中生成的CMakeCache.txt文件,解决完报错后再使用cmake从新编译

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.11/boost/boost_1_59_0/

安装:

make install

#安装过程很长(大约30min),机器内存建议至少2G

建立mysql用户:

[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/ mysql

-M:不自动建立用户家目录

-d:指定用户家目录
[root@server1 ~]# usermod -s /sbin/nologin mysql

#设置mysql用户不能登陆系统

将mysql命令加入系统指令:

[root@server1 ~]# vim /root/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

[root@server1 ~]# source /root/.bash_profile

修改mysql配置文件:

[root@server1 ~]# vim /etc/my.cnf

datadir=/usr/local/lnmp/mysql/data
socket=/usr/local/lnmp/mysql/data/mysql.sock

复制mysql启动脚本到系统目录下:

[root@server1 ~]# cd /usr/local/lnmp/mysql/support-files/
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld

数据库初始化:

#初始化以后会在/usr/local/lnmp/mysql目录下生成data目录

#这个过程会有卡顿,等待片刻就行

[root@server1 support-files]# mysqld --initialize --user=mysql

      ...

2018-01-27T14:44:19.987069Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-01-27T14:44:19.989551Z 1 [Note] A temporary password is generated for root@localhost: /2UMx3Btelb9   #这个码是随机生成的数据库初始密码

修改文件权限:

[root@server1 support-files]# cd /usr/local/lnmp/mysql/

[root@server1 mysql]# chown mysql.mysql . -R

[root@server1 mysql]# chown root . -R

[root@server1 mysql]# chown mysql data -R

[root@server1 mysql]# ll
total 60
drwxr-xr-x 2 root mysql 4096 Jan 27 22:22 bin
-rw-r--r-- 1 root mysql 17987 Feb 2 2016 COPYING
drwxr-x--- 5 mysql mysql 4096 Jan 27 22:46 data
drwxr-xr-x 2 root mysql 4096 Jan 27 22:21 docs
drwxr-xr-x 3 root mysql 4096 Jan 27 22:21 include
drwxr-xr-x 4 root mysql 4096 Jan 27 22:22 lib
drwxr-xr-x 4 root mysql 4096 Jan 27 22:21 man
drwxr-xr-x 10 root mysql 4096 Jan 27 22:22 mysql-test
-rw-r--r-- 1 root mysql 2478 Feb 2 2016 README
drwxr-xr-x 28 root mysql 4096 Jan 27 22:23 share
drwxr-xr-x 2 root mysql 4096 Jan 27 22:23 support-files

启动服务:

[root@server1 mysql]# /etc/init.d/mysqld start

第一次使用数据库须要设定密码:

#随机生成的密码没法正常登录数据库

[root@server1 mysql]# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:     #输入刚才随机生成的数据库初始密码

The existing password for the user account root has expired. Please set a new password.

New password:                      #输入新密码

Re-enter new password:       #确认新密码

    ...           #后面的内容是让选择密码复杂度等,若是不想设定这些,直接一路按回车便可完成

登录数据库:

[root@server1 mysql]# mysql -p
Enter password:      #输入刚才设定的新密码

 安装php

php安装包及其依赖包汇总:

连接:https://pan.baidu.com/s/1E7Gal6zkBcozuAU7rTsF6A
提取码:tvoo

php官网:

http://www.php.net/

解压源码包:

[root@server1 ~]# tar jxf php-5.6.20.tar.bz2

安装依赖性:

yum install gmp-devel net-snmp-devel libxml2-devel openssl-devel curl-devel -y

#下面这几个包redhat6.5镜像中没有,从分享的连接中下载

yum localinstall libmcrypt-devel-2.5.8-9.el6.x86_64.rpm gd-devel-2.0.35-11.el6.x86_64.rpm re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm -y

编译安装php:

[root@server1 ~]# cd php-5.6.20/
[root@server1 php-5.6.20]# ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --without-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash

[root@server1 php-5.6.20]# make && make install  #时间较长,7分钟左右

创建php-fpm配置文件:(php-fpm至关因而php的监听服务,由它守护(控制)着php服务的运行)

 [root@server1 php-5.6.20]# cd /usr/local/lnmp/php/etc/

[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf

创建php配置文件:

#回到解压出来的php包目录中,我以前是在/root下解压的包,所以到/root目录下寻找php配置模板

[root@server1 etc]# cd /root/php-5.6.20

[root@server1 php-5.6.20]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini

创建php-fpm启动脚本:

[root@server1 php-5.6.20]# cd /root/php-5.6.20/sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm

修改php-fpm配置文件:

[root@server1 fpm]# cd /usr/local/lnmp/php/etc/

[root@server1 etc]# vim php-fpm.conf 

 25 pid = run/php-fpm.pid

修改php配置文件:

修改时区:

[root@server1 etc]# vim php.ini

 925 date.timezone = Asia/Shanghai

1001 pdo_mysql.default_socket= /usr/local/lnmp/mysql/data/mysql.sock

1150 mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock

1209 mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock

在编译php的时候已经指定了nginx用户(与nginx服务作接口),但目前还未安装nginx,所以先建立nginx用户,将php服务启动起来:

[root@server1 etc]# useradd -u 800 -M -d /usr/local/lnmp/nginx nginx

启动php服务:(php-fpm在9000端口运行)

[root@server1 etc]# /etc/init.d/php-fpm start

[root@server1 etc]# netstat -antlp |grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 502/php-fpm

安装nginx

安装包:

连接:https://pan.baidu.com/s/1JJlEc-fLeB1MssLznpYIGA
提取码:yl3o

[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz

[root@server1 ~]# cd nginx-1.10.1

[root@server1 nginx-1.10.1]# vim src/core/nginx.h

 14 #define NGINX_VER          "nginx"        #去掉版本号后缀

[root@server1 nginx-1.10.1]# vim auto/cc/gcc

 178 # debug
 179 #CFLAGS="$CFLAGS -g"                  #去掉debug过程,减小编译时间

安装依赖包、编译:

[root@server1 nginx-1.10.1]# yum install pcre-devel -y

[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-threads --user=nginx --group=nginx

[root@server1 nginx-1.10.1]# make && make install

nginx启动脚本作软连接并加入系统指令中,方便使用:

[root@server1 nginx-1.10.1]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

vim /root/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin

source /root/.bash_profile

修改nginx配置文件,使之支持php:

[root@server1 nginx-1.10.1]# vim /usr/local/lnmp/nginx/conf/nginx.conf

  2 user  nginx;

27 sendfile        on;
28 tcp_nopush     on;  #去掉注释
29 tcp_nodelay    on;  #增长一行

34  gzip  on;

46             index  index.php index.html index.htm;     #将默认网页换为php网页

66 location ~ \.php$ {
67    root      html;
68    fastcgi_pass  127.0.0.1:9000;
69    fastcgi_index  index.php;
70 #    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
71    include      fastcgi.conf;
72 }

#修改66~72行时注意格式保持不变,以下图:

 

 新建php网页前端文件:

[root@server1 nginx-1.10.1]# vim /usr/local/lnmp/nginx/html/index.php

<?php
phpinfo()
?>

检查nginx配置文件是否有语法错误:

[root@server1 nginx-1.10.1]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

启动服务:

[root@server1 nginx-1.10.1]# nginx

测试:(server1主机ip=172.25.254.1)

#通常这里须要设置防火墙规则,容许相关服务经过,这里选择直接关闭安全规则(关闭防火墙和selinux),执行如下两条命令:

iptables -F

setenforce 0

测试结果:

 安装discuz:

建立虚拟主机:

mkdir /bbs

vim /usr/local/lnmp/nginx/conf/nginx.conf  #倒数第二行增长以下内容

 

117     server {
118         listen 80;
119         server_name bbs.vaon.org;
120         location / {
121                 root /bbs;
122                 index index.php;
123         }
124         location ~ \.php$ {
125                 root /bbs;
126                 fastcgi_pass 127.0.0.1:9000;
127                 fastcgi_index index.php;
128                 include fastcgi.conf;
129         }
130     }
131 }  #注意这个括号是配置文件中原本就有的括号,实际并不加这行

nginx -s reload

安装论坛:

软件包:

连接:https://pan.baidu.com/s/1mf5e4MGkH6EiJcoe1X4bzA
提取码:fn33

yum install unzip -y

unzip Discuz_X3.2_SC_UTF8.zip

cd upload/

mv * /bbs/

修改discuz里面文件的权限:

cd /bbs/

chmod 777 config/ data/ -R

chmod 777 uc_client/ uc_server/ -R

修改数据库权限:

cd /usr/local/lnmp/mysql/

chmod 755 data/

nginx -s reload

浏览器访问bbs.vaon.org,完成discuz论坛安装:

#在访问以前须要在客户端(windows)设置解析(若是是linux客户机配置文件在/etc/hosts):打开C:\Windows\System32\drivers\etc\hosts文件,在最后面加上一条解析(服务器ip+域名)172.25.254.1 bbs.vaon.org

 安装memcache

server2(172.25.254.2):

[root@server2 ~]# yum install -y memcached

[root@server2 ~]# /etc/init.d/memcached start

[root@server2 ~]# rpm -qa |grep memcache
memcached-1.4.4-3.el6.x86_64

[root@server2 ~]# yum install telnet -y
[root@server2 ~]# telnet localhost 11211
set name 0 0 6
vaon

STORED
get name
VALUE name 0 6
vaon

END
quit

关闭server2的防火墙规则:iptables -F && setenforce 0

server1:
#将php命令加入全局变量中:

[root@server1 ~]# vim /root/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/lnmp/php/bin

[root@server1 ~]# source /root/.bash_profile

连接:https://pan.baidu.com/s/12PVjMOEM-ddFBUGenjn5Mw
提取码:99ym

[root@server1 ~]# tar zxf memcache-2.2.5.tar.gz
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@server1 memcache-2.2.5]# ./configure --prefix=/usr/local/lnmp/php/memcache

[root@server1 memcache-2.2.5]# make && make install
      ...

Installing shared extensions:     /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@server1 memcache-2.2.5]# ls /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/

memcache.so  opcache.a  opcache.so

#修改php配置文件(去掉注释并修改参数便可):

[root@server1 etc]# vim /usr/local/lnmp/php/etc/php.ini

 862 extension=memcache.so

[root@server1 etc]# /etc/init.d/php-fpm reload

[root@server1 etc]# cd /root/memcache-2.2.5
[root@server1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/

[root@server1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/

[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/

[root@server1 html]# vim example.php  #注意这里写的是server2的ip

  3 $memcache = memcache_connect('172.25.254.2', 11211);

[root@server1 html]# vim memcache.php

 23 define('ADMIN_PASSWORD','redhat');      // Admin Password
 28 $MEMCACHE_SERVERS[] = '172.25.254.2:11211'; // add more as an array
 29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an ar    ray

#访问到这个页面表示memcache安装成功

#访问这个状态页面须要输入memcache.php文件中设置过的用户名密码才能进入(用户名memcache密码redhat)

 #压力测试(root@station是真机,充当客户端):

[root@station ~]# ab -c 100 -n 5000 http://172.25.254.1/index.php
    ...

Complete requests:      5000    #全部请求
Failed requests:        488          #失败的请求
    ...

openresty

和nginx功能同样

转自:https://kb.cnblogs.com/page/117183/

server3:

yum install -y memcached

/etc/init.d/memcached start

关闭iptables和selinux

server1:

#关闭以前的nginx:

[root@server1 ~]# nginx -s stop

#安装openresty:

连接:https://pan.baidu.com/s/1FBSeGYT3iENmqCXcYdJdgQ
提取码:7icl

[root@server1 ~]# tar zxf openresty-1.13.6.1.tar.gz

[root@server1 ~]# cd openresty-1.13.6.1

[root@server1 openresty-1.13.6.1]# ./configure

[root@server1 openresty-1.13.6.1]# gmake && gmake install

[root@server1 openresty-1.13.6.1]# cd /usr/local/openresty/nginx/
[root@server1 nginx]# vim html/index.php

<?php
phpinfo()
?>
[root@server1 nginx]# vim conf/nginx.conf
  3 worker_processes  1;
 17 http {
 18
 19         upstream memcache {
 20         server 172.25.254.2:11211;
 21         server 172.25.254.3:11211;
 22         keepalived 512 single;
 23         }
 24     include       mime.types;
 25     default_type  application/octet-stream;
 49         location / {
 50             root   html;
 51             index  index.php index.html index.htm;
 52         }
 69         location /memc {
 70         internal;
 71
 72         memc_connect_timeout 100ms;
 73         memc_send_timeout 100ms;
 74         memc_read_timeout 100ms;
 75
 76         set $memc_key $query_string;
 77         set $memc_exptime 300;
 78
 79         memc_pass memcache;
 80         }
 81         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9    000
 82         #
 83         location ~ \.php$ {
 84            set $key $uri$args;
 85             srcache_fetch GET /memc $key;
 86             srcache_store PUT /memc $key;
 87             root           html;
 88             fastcgi_pass   127.0.0.1:9000;
 89             fastcgi_index  index.php;
 90         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name    ;
 91             include        fastcgi.conf;
 92         }
#开启服务:
[root@server1 nginx]# ./sbin/nginx
nginx: [emerg] unknown directive "keepalived" in /usr/local/openresty/nginx/conf/nginx.conf:22  #报错,未解决
server2|3:
/etc/init.d/memcached restart
宿主机:
作压力测试

 安装jsp、tomcat

server2:

#安装jsp:

redhat6.5镜像中带的java是open-jdk,但与原生的java还有区别的(缺乏一些模块)。下载jdk-7u79-linux-x64

连接:https://pan.baidu.com/s/15KRKL22D2PtCC8urUCucsw
提取码:uou9

[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
c[root@server2 ~]# cd /usr/local/
[root@server2 local]# ln -s jdk1.7.0_79/ java
[root@server2 local]# vim /etc/profile

 export JAVA_HOME=/usr/local/java
 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
# .表示本地目录(java运行时的当前目录)  :表示分隔
 export PATH=$PATH:SJAVA_HOME/bin
[root@server2 local]# source /etc/profile
#安装tomcat:

连接:https://pan.baidu.com/s/1V0CZpjkeNpZzdCmuSRnwtA
提取码:2co9

[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/

[root@server2 ~]# cd /usr/local/

[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server2 local]# cd tomcat/
[root@server2 tomcat]# bin/startup.sh       #启动tomcat服务
[root@server2 tomcat]# cd webapps/ROOT/
[root@server2 ROOT]# vim test.jsp    #写一个jsp网页文件
server2 time is <%=new java.util.Date() %>      #表示显示当前时间,在浏览器上每刷新一下变一次

#将java和tomcat复制一份到server3上去:

cd /usr/local
scp -r java/ tomcat/ root@server3:/usr/local/

server3:

vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:SJAVA_HOME/bin

 

source /etc/profile
cd /usr/local/tomcat
bin/startup.sh
cd webapps/ROOT/
vim test.jsp
server3 time is <%=new java.util.Date() %>

memcache交叉互备

server1:

#重新编译nginx,增长sticky模块:

连接:https://pan.baidu.com/s/15VIYlem8XURIQlV_zhn_AQ
提取码:solc

[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz

[root@server1 ~]# cd nginx-1.10.1

[root@server1 nginx-1.10.1]# make clean   #清除以前编译残留的Makefile文件

[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-threads --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make && make install
[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/
[root@server1 nginx]# vim conf/nginx.conf
 17 http {
 18
 19     upstream tomcat {
 20     sticky;
 21     server 172.25.254.2:8080;
 22     server 172.25.254.3:8080;
 23     }
 24
 25     include       mime.types;
 26     default_type  application/octet-stream;
 27
 

 67         location ~ \.jsp$ {
 68             proxy_pass   http://tomcat;
 69         }
[root@server1 nginx]# /etc/init.d/php-fpm reload
[root@server1 nginx]# nginx    #在安装openresty的时候已经停了nginx,所以这里直接开启nginx便可
server2:

#写一个jsp页面

[root@server2 local]# cd /usr/local/tomcat/webapps/ROOT/
[root@server2 ROOT]# vim test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

#server3与server2保持一致:

[root@server2 ROOT]# scp test.jsp server3:/usr/local/tomcat/webapps/ROOT/

#server2和server3上增长交叉备份模组:

连接:https://pan.baidu.com/s/1BHQoxDP5rqA_CQorME4XaQ
提取码:etc9

#这些jar文件就是java的memcache交叉备份的模块:
asm-3.2.jar                              minlog-1.2.jar
kryo-1.04.jar                            msm-kryo-serializer-1.6.3.jar
kryo-serializers-0.10.jar                reflectasm-1.01.jar
memcached-session-manager-1.6.3.jar      spymemcached-2.7.3.jar
memcached-session-manager-tc7-1.6.3.jar

#将他们放到server2和server3的/usr/local/tomcat/lib/目录下


server2|3:
vim /usr/local/tomcat/conf/context.xml  #直接将下面这段放到19行<Context>下面便可,注意要删除中文注释以及注释前的两个空格:

             ...
 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 memcachedNodes="n1:172.25.2.2:11211,n2:172.25.2.3:11211"
 failoverNodes="n1"    #故障转移节点,在server3上是n2
 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
 />
    ...

/etc/init.d/memcached start
cd /usr/local/tomcat

bin/startup.sh

测试:

当客户端访问172.25.254.1(server1)时,会自动分配给server2或者server3(基于缓存的)。当分配给server2上的tomcat时,关闭server2服务(bin/shutdown.sh),会自动取server2在server3主机上备份的session,使用户操做不消失

相关文章
相关标签/搜索