企业——lnmp架构的搭建

   LNMP结构里php会启动一个服务:php-fpm,而LANP中php只是作为Apache的一个模块存在。Nginx会把用户的动态请求交给php服务去处理,这个php服务就会去和数据库进行交互。用户的静态请求Nginx会直接处理,Nginx处理静态请求的速度要比apache快很多性能上要好,所以apache和Nginx在动态请求处理上区别不大,但如果是静态请求处理的话就会明显发现Nginx要快于apache,而且Nginx能承受的并发量要比apache大,可以承受好几万的并发量,所以大一些的网站都会使用Nginx作为web服务器。

 

1.实验环境
redhat6.5
iptables和selinux关闭
准备条件:虚拟机vm

2.简介:
LNMP就是Linux+Nginx+MySQL+PHP
Nginx会把用户的动态请求交给php服务去处理,这个php服务就会去和数据库进行交互。用户的静态请求Nginx会直接处理。

3.nginx准备
   tar zxf nginx-1.10.1.tar.gz
   tar zxf nginx-sticky-module-ng.tar.gz
   cd nginx-1.10.1

注意:以下修改需要在编译安装Nginx之前进行,修改之后再编译。
   vim src/core/nginx.h
    #define NGINX_VERSION         ##nginx的版本号

 #define NGINX_VER         "nginx"       ##删除后面的内容,后面是nginx的名称。

   vim auto/cc/gcc

    # debug
    # CFLAGS="$CFLAGS -g"       ##注释debug内容
   yum install pcre-devel  -y
   ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads  --with-file-aio       ##根据报错解决依赖性
   make
   make install
   cd /usr/local/lnmp/nginx/conf/
   vim nginx.conf
         location / {
             root   html;
             index  index.php index.html index.htm;  
             ##加入index.php会默认首先访问index.php
          }

     location ~ \.php$ {
         root           html;   
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
        # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;   
        ##这行注释掉,因为文件fastcgi.conf里面有
          include        fastcgi.conf;
          }
   cd /usr/local/lnmp/nginx/sbin/
   pwd
    /usr/local/lnmp/nginx/sbin
   cd
   vim .bash_profile
    PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin
   source .bash_profile
   cd /usr/local/lnmp/nginx/html/
   vim index.php
    <?php
    phpinfo()
    ?>
   nginx -t
   nginx

4.mysql准备
   tar zxf mysql-boost-5.7.23.tar.gz
   yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm
   cd mysql-5.7.23/

   yum install gcc gcc-c++ -y
   yum install ncurses-devel -y
   yum install -y bison

   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_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=boost/boost_1_59_0/


================================================================================================================================================
   ##cmake 时有报错,根据报错内容解决依赖性
   rm -fr CMakeCache.txt
   注意:每解决完一次错误,就应删除缓存 rm -fr CMakeCache.txt
================================================================================================================================================

   make
   make install
   cd /usr/local/lnmp/mysql
   rpm -qa | grep mysql
    mysql-libs-5.7.23-1.el6.x86_64
   cd support-files/
   cp my-default.cnf /etc/my.cnf
    cp: overwrite `/etc/my.cnf'? y
    vim /etc/my.cnf
     18 basedir = /usr/local/lnmp/mysql
     19 datadir = /usr/local/lnmp/mysql/data
     20 port = 3306
     21 # server_id = .....
     22 socket = /usr/local/lnmp/mysql/data/mysql.sock
   file mysql.server    ##这是个脚本文件
    mysql.server: POSIX shell script text executable
   cp mysql.server /etc/init.d/mysql   ##把它复制到linux默认脚本执行路径
   cd ..
   groupadd -g 27 mysql
   useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
   cd
   vim .bash_profile  //mysql添加到环境变量
    10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
   source .bash_profile  //生效,刷新环境变量
   cd /usr/local/lnmp/mysql
   chown mysql.mysql -R .
   mysqld --initialize --user=mysql  //以mysql用户身份初始化,会生成一个初始密码
   chown root.root -R .  //为了安全将mysql目录的所有者改为root
   chown mysql data/ -R
   /etc/init.d/mysqld start
    Starting MySQL.. SUCCESS!
   mysql_secure_installation
   mysql -p

================================================================================================================================================
过程中出现的问题:
1.mysql服务起不来

[root@vm1 mysql]# /etc/init.d/mysqld start
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/lnmp/mysql/data/vm1.pid).

解决方法:
将mysql下的data文件全部删除,然后重新初始化 mysqld --initialize --user=mysql

如果初始化之后,进程还是起不来的话,就killall -9 mysqld 杀掉所有数据库的进程,重启一下服务  

如果还是起不来的话,那就可能是因为权限的问题了,修改权限
================================================================================================================================================


5.php的源码安装及配置
   tar jxf php-5.6.35.tar.bz2
   ##需要下载的安装包:
   yum install -y libxml2-devel openssl-devel curl-devel gd-devel-2.0.35-11.el6.x86_64.rpm gmp-devel libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm net-snmp-devel    ##后面会出现的问题

================================================================================================================================================
安装过程中会出现一系列error:
   原因是:因为源文件编译的时候,添加了一些模块,但是模块的没有相应的软件支持,所以源文件编译会报错,所以需要下载相应的软件

   一些软件下载可以直接后面跟 -devel 下载,比如:libxml2-devel openssl-devel curl-devel
   还有一些关于 .h 的文件,如果不知道是什么提供了这些文件的话,可以通过 yum search 文件名.h 查找,如果查找不到的话,还可以用 yum provides */文件名 进行查找
================================================================================================================================================

   rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm
   cd php-5.6.35
  
   yum install libxml2 libxml2-devel -y
   yum install curl curl-devel -y
   yum install libjpeg-devel -y
   yum install libpng-devel libpng -y
   yum install freetype-devel -y
   yum install gmp-devel -y
   yum -y install net-snmp-devel

   ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --enable-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 --with-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

6.php配置
   cd /usr/local/lnmp/php/
   ls
   cd etc/
   ls
   cp php-fpm.conf.default php-fpm.conf    ##主配置文件
   cd php-5.6.35
   cp php.ini-production /usr/local/lnmp/php/etc/php.ini   ##php-fpm最先开启的文件
   cd
   cd /usr/local/lnmp/php/etc/
   ls
   vim php.ini
     936 date.timezone =Asia/Shanhai
   vim php-fpm.conf
     25 pid = run/php-fpm.pid
     26
     27 ; Error log file
   useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
   cd
   cd php-5.6.35
   cd sapi/fpm/
   file init.d.php-fpm   ##是个脚本文件   file 用来查看文件类型
   cp init.d.php-fpm /etc/init.d/php-fpm   ##将脚本文件传到默认脚本路径
   chmod +x /etc/init.d/php-fpm    ##给可执行权限
   /etc/init.d/php-fpm start       ##开启进程管理器

 



================================================================================================================================================
(1)php-fpm  全名是PHP FastCGI进程管理器

php-fpm启动后会先读php.ini,然后再读相应的conf配置文件,conf配置可以覆盖php.ini的配置。
启动php-fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据fpm.conf/www.conf去创建若干子进程,子进程用于处理实际的业务。

(2)php-fpm全局配置说明
配置里面的所有相对路径,都是相对于php的安装路径。
除了有php-fpm.conf配置文件外,通常还有其他的*.conf配置文件(也可以不要,直接在php-fpm.conf配置)用于配置进程池,不同的进程池可以用不同的用户执行,监听不同的端口,处理不同的任务;多个进程池共用一个全局配置。

================================================================================================================================================


7.安装论坛
   yum install -y unzip
    125  unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
   cd /usr/local/lnmp/nginx/html/
   ls
   cd upload/
   mv upload/ bbs
  
   bbs下文件目录权限不足,修改权限
   chmod 777 config/ data/ uc_server/ uc_client/ -R

 

修改完之后:

 


   如果没有开启数据库也是会报错的

 

开启数据库:

/etc/init.d/mysqld start
   mysql -p
   cd /usr/local/lnmp/php/etc/
   ls
   vim php.ini   ##目录不存在,添加目录
  
   /etc/init.d/php-fpm reload
   cd /usr/local/
   ll
   cd lnmp/
   ll
   cd mysql/
   ll
   chmod 755 data/


   ll     ##如果不是下面的权限的=话,会出现数据库的permission deny
   srwxrwxrwx 1 mysql mysql        0 Aug  5 03:20 mysql.sock
  

 

 


  
8.php添加memcache缓存模块

================================================================================================================================================
添加缓存的原因:为了加快返回数据的速率

当客户端的访问发送给nginx的时候,nginx只处理静态的请求,将动态的请求,发送给后端的php来完成,这个时候访问的速率就不由nginx来决定了,而是由php处理访问请求的数据的速率来决定的,因此加入缓存,可以加快php的速率
================================================================================================================================================

   tar zxf memcache-2.2.5.tgz
   yum install memcached -y
   vim /etc/sysconfig/memcached
    CACHESIZE="64"    ##可以修改memcache的缓存的内存空间大小
   /etc/init.d/memcached start
   netstat -antlp      ##查看端口,监听本机的11211端口
   tcp        0      0 :::11211                    :::*                        LISTEN      901/memcached
   cd memcache-2.2.5
   cd /usr/local/lnmp/
   ls
   cd php/
   cd bin/
   pwd
   /usr/local/lnmp/php/bin
   vim .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/lnmp/php/bin
   source .bash_profile
   php -m | grep memcache      ##查看php下添加了那些关于memcahce的模块    刚开始的时候是没有添加的
   php -m | grep mysql        ##是含有mysql的模块的


    mysql
    mysqli
    pdo_mysql

   cd memcache-2.2.5
   phpize
    ##注意:phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize
   ./configure
   make && make install
   cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
   ls
    memcache.so  opcache.a  opcache.so     ####生成的php和memcache关联的模块
  
   cd /usr/local/lnmp/php/etc
   vim php.ini        ##在php里面加入memcache模块
    extension=memcache.so

 

 


   /etc/init.d/php-fpm reload
   php -m | grep memcache
    memcache            ##给php添加memcache模块成功

   cp example.php memcache.php /usr/local/lnmp/nginx/html/     ##将测试页面添加到nginx的默认发布目录当中去     一个是测试页面,一个是缓存的页面   两个压测页面
   cd /usr/local/lnmp/nginx/html/
   vim memcache.php     ##修改页面配置如下图


静态测试:

 

 

 

 

用户名和密码可以在之前修改的php配置文件里设定

 

 

 

9.nginx添加缓存
OpenResty是一个基于Nginx和Lua的高性能web平台

================================================================================================================================================
添加缓存的原因:为了加快返回数据的速率

当客户端的访问发送给nginx的时候,nginx只处理静态的请求,将动态的请求,发送给后端的php来完成,这个时候访问的速率就不由nginx来决定了,而是由php处理访问请求的数据的速率来决定的,因此加入缓存,可以加快php的速率。给nginx添加上缓存以后,返回的数据,会先保留一份在nginx的缓存上面,然后等到下一此=次客户端的访问请求传到nginx的时候,nginx会先在自己的缓存中查找,查找不到的话,再将访问请求发送给php处理
================================================================================================================================================

   nginx -s stop
   tar zxf openresty-1.13.6.1.tar.gz

   ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio

   gmake && gmake install

   cd /opt/nginx/nginx/conf/
   ls
   vim nginx.conf   ##配置文件和nginx的配置文件相同
   cp /usr/local/lnmp/nginx/conf/nginx.conf .
    cp: overwrite `./nginx.conf'? y
   /opt/nginx/nginx/sbin/nginx -t
   /opt/nginx/nginx/sbin/nginx

   cd ..
   cd html/
   ls
   cp /usr/local/lnmp/nginx/html/example.php .
   cp /usr/local/lnmp/nginx/html/index.php .
   cd ..
   cd conf/
   vim nginx.conf
   在http里面:
        upstream memcache {
          server localhost:11211;
          keepalive 512;
        }

    location /memc {
        internal;
        memc_connect_timeout 100ms;
        memc_send_timeout 100ms;   ##延时
        memc_read_timeout 100ms;
        set $memc_key $query_string;
        set $memc_exptime 300;   ##300秒以后过期
        memc_pass memcache;
              ##连接的是上面的upstream后的server
     }

     在location添加:
        set $key $uri$args;   ##定义key
        srcache_fetch GET /memc $key;  ##get到返回
            ##没有get到接下来的动作
        srcache_store PUT /memc $key;  ##返回200,缓存保留并返回

   测试:
   在真实主机上测试:
    ab -c 10 -n 1000 http://172.25.11.1/example.php
    ab -c 10 -n 1000 http://172.25.11.1/index.php








 

posted @ 2018-10-17 22:14  wf-aiyouwei  阅读(237)  评论(0编辑  收藏  举报