• 企业——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








     

  • 相关阅读:
    PowerDesigner将PDM导出生成WORD文档
    wrong number of arguments,java方法反射时数组参数的坑
    页面关键词Meta Keywords和描述Description的优化作用
    Java RMI之HelloWorld篇
    WebService另一种轻量级实现—Hessian 学习笔记
    RMI、Hessian、Burlap、Httpinvoker、WebService的比较
    利用Hessian如何实现Webservice
    什么是反射?反射有什么用处
    java string,需要进行首字母大写改写
    解决版本冲突-使用SVN主干与分支功能
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9807545.html
Copyright © 2020-2023  润新知