• LNMP一体式部署


    常见的Web框架结构比如:LNMP和LAMP

    L=Linux N=nginx A=apache M= MySQL P=php T=Tomcat

    Nginx和Apache都是Web应用服务器,Nginx处理静态数据快,Apache处理动态快;Nginx对系统资源占用小,Apache对系统资源占用高;Nginx用的是epoll模型,Apache用的是select模型

     

    LNMP组合的工作流程:

     

    在LNMP组合工作时,首先是用户通过浏览器输入域名请求 Nginx Web服务,(用户通过浏览器发过来的请求数据包是http格式的数据包,特点是格式很松散,因此解析的速度慢,但是数据包比fastcgi格式数据包小,省带宽

    如果请求是静态资源(location /{ 过滤),worker进程,去网页目录根据URL的uri部分去拿网页(即磁盘I/O读写)读取到内存里,则由Nginx解析返回给用户;

    注:用户的请求一定是遵循HTTP协议的,因为是通过浏览器过来的(80端口)

    Nginx和Apache其实一样,如果没有PHP支持,那么都处理不了所谓的动态请求。他们自身其实都只能处理静态(图片、视频、html网页)。只是Apache转发动态数据包的速度快,但是只是单个包的速度,Apache并发低

     

    网页位置可以写在location外,也就是server里,对全部的location生效

     

    如果是动态请求(.php结尾),那么Nginx客户端就会把它通过FastCGI接口将请求由FastCGI的客户端Nginx推送到FastCGI的服务端PHP-fpm(监听9000端口)接口规则=快速接口,fastcgi数据包这种规则的数据包 格式非常严谨,因此,PHP解析的速度非常快,但是越严谨的数据包越大,所以fastcgi数据包大小要绝对大于http数据包)(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)解析器(php.ini)进行解析。在这个阶段进行了数据包的格式转换,不再是和http请求了,而是转换成fastcgi格式的数据包,为了加快PHP的解析速度

    先把动态网页读到内存里,用PHP(php.ini)解析器执行这段代码,也就是执行sql语句将代码转换为想要的数据,数据将这部分代码覆盖,动态网页变成静态网页。开发的代码实现的远程去找mysql,和运维是没关系的

    具体实施:

    location ~* .(php|php5)${

    index index.php  index.htmp index.htmpl;

    {

    fastcgi_pass 127.0.0.1:9000(如果是本地部署的话)

    修改配置文件,将监听本地的改成监听IP的(如果是监听远程的)

    注:作为客户端client的fastcgi_pass(Nginx安装包包含)和作为server端的PHP-fpm (PHP安装包包含)服务端为socket进程,监听9000端口,因为经常用所以fastcgi_pass和Nginx合并而且PHP-fpm和PHP功能合并了。

    监听IP允许远程访问,监听127是与允许本地访问

    PHP不用修改配置,找的网页和Nginx一样的

    分布式部署两边各有一个网页,不会出现冲突;但是部署在一台,最好程序用户设置成同一个用户,不然会造成资源分配的问题等。

    Nginx和PHP各有其各自的资源空间,优化包括安全优化和性能优化,性能优化往往是内存

     

    如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户,这就是LNMP环境的基本请求顺序流程。这个请求流程是企业使用LNMP环境的常用流程。

    注:静态网页是文件实体

      动态网页也是文件实体的,只是他的实体是代码(JS语言,前台语言;PHP代码,后台语言)动态网页由实体文件index.php(放在内存中),通过JS语言到数据库取得数据,并写回index.php文件,再打包给用户(代码不放在存储中)

    代码是不往存储里放的,不做备份,NFS保证安全的合适图片和视频,所以单独挂;像网页的文件等都是直接在web服务器本地的。PHP需不需要挂存储?如果是读网页,是不需要挂存储的,但是如果是用户上传的话是需要挂存储的

     

    分离式部署中,NGINX服务器和PHP服务器上网页、代码必须两者都有,否则会触发404



    LNMP的部署方式分为两种:

     

    全部部署在一台上

    LNMP

    全部不在一台上

    N+P+M

    只分离MySQL

    NP+M

    一、部署LNMP(将Nginx和PHP的程序用户设为同一个)

    1 安装Nginx

    [root@localhost ~]# tar xf nginx-1.10.2.tar.gz -C /usr/src/

    [root@localhost ~]# cd /usr/src/nginx-1.10.2/

    [root@localhost ~]# mount /dev/sr0 /media/cdrom

    [root@localhost nginx-1.10.2]# yum -y install pcre-devel openssl-devel

    [root@localhost nginx-1.10.2]# useradd -s /sbin/nologin -M www   //创建程序用户

    [root@localhost nginx-1.10.2]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

    [root@localhost nginx-1.10.2]# make && make install

    [root@localhost nginx-1.10.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

    [root@localhost conf]# cd /usr/local/nginx/conf/

    [root@localhost conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf

    [root@localhost conf]# vim nginx.conf

    worker_processes  1;

    events {

        worker_connections  1024;

    }

    http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  65;

        server {

            listen       80;

            server_name  www.yunjisuan.com;

            location / {

                root   html/www;

                index  index.html index.htm;

            }

        }

    }

     

    !Nginx编译安装完毕

     

    2  安装MySQL(PHP需要MySQL的支持环境)

     

     

    # 创建mysql用户的账号

     

    [root@wangmingxin ~]# groupadd mysql

    [root@wangmingxin ~]# useradd -s /sbin/nologin -g mysql -M mysql

    [root@wangmingxin ~]# tail -1 /etc/passwd

    mysql:x:501:501::/home/mysql:/sbin/nologin

    [root@wangmingxin ~]# id mysql

    uid=501(mysql) gid=501(mysql) groups=501(mysql)

     

    # 采用二进制方式安装MySQL

    [root@wangmingxin ~]# tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz -C /usr/local/

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

    [root@wangmingxin local]# mv mysql-5.5.32-linux2.6-x86_64 mysql-5.5.32

    [root@wangmingxin local]# ln -s mysql-5.5.32 mysql

    [root@wangmingxin local]# ls

    bin  games    lib    libexec  mysql-5.5.32  sbin   src

    etc  include  lib64  mysql    nginx         share

    [root@wangmingxin local]# cd /usr/local/mysql

    [root@wangmingxin mysql]# ls

    bin      data  include         lib  mysql-test  scripts  sql-bench

    COPYING  docs  INSTALL-BINARY  man  README      share    support-files

    #提示:

    二进制安装包,仅需要解压就可以了,不需要执行cmake/configure,make,make install等过程

     

    注意:

    • #当安装LNMP一体化环境时,MySQL数据库要装在Nginx所在的机器上。如果MySQL和Nginx不在一台机器上,那么,Nginx服务器上的MySQL数据库软件包只要解压移动到/usr/local/目录,改名为mysql就可以了,不需要进行后面的初始化配置。
    • #在非一体的LNMP环境(Nginx和MySQL不在一台机器上),编译PHP环境时,也是需要MySQL数据库环境的,但是高版本的PHP,例如5.3版本以上,内置了PHP需要的MySQL程序,因此,对于此类版本就不需要在Nginx服务器上安装MySQL软件了,只需要在编译PHP时指定相关参数即可。这个PHP的编译参数为--with-mysql=mysqld,表示PHP程序在编译时会调用内置的MySQL的库。

    #初始化 MySQL配置文件my.cnf

    [root@wangmingxin mysql]# cd /usr/local/mysql

    [root@wangmingxin mysql]# ls -l support-files/*.cnf

    -rw-r--r-- 1 7161 wheel  4691 Jun 19  2013 support-files/my-huge.cnf

    -rw-r--r-- 1 7161 wheel 19759 Jun 19  2013 support-files/my-innodb-heavy-4G.cnf

    -rw-r--r-- 1 7161 wheel  4665 Jun 19  2013 support-files/my-large.cnf

    -rw-r--r-- 1 7161 wheel  4676 Jun 19  2013 support-files/my-medium.cnf

    -rw-r--r-- 1 7161 wheel  2840 Jun 19  2013 support-files/my-small.cnf

    [root@wangmingxin mysql]# /bin/cp support-files/my-small.cnf /etc/my.cnf

    提示: 

    - support-files下有my.cnf的各种配置样例。 

    - 使用cp全路径/bin/cp,可实现拷贝而不出现替换提示,即如果有重名文件会直接覆盖 

    - 本例为测试安装环境,因此选择参数配置小的my-small.cnf配置模版,如果是生产环境可以根据硬件选择更高级的配置文件,上述配置文件模版对硬件的要求从低到高依次为:

    1.  my-medium.cnf (最低)

    2.  my-small.cnf

    3.  my-large.cnf

    4.  my-huge.cnf

    5.  my-innodb-heavy-4G.cnf(最高)

    # 初始化MySQL数据库文件

    [root@wangmingxin ~]# mkdir -p /usr/local/mysql/data   //建立MySQL数据文件目录

    [root@wangmingxin ~]# chown -R mysql.mysql /usr/local/mysql   //授权mysql用户管理MySQL的安装目录

    [root@wangmingxin ~]# yum -y install libaio  //光盘源安装依赖包,否则下一步的编译会报错

    [root@wangmingxin ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

    #初始化MySQL数据库文件,会有很多信息提示,如果没有ERROR级别的错误,会有两个OK的字样,表示初始化成功,否则就要解决初始化的问题

    以上命令的主要作用是在/usr/local/mysql/data/目录下生成MySQL正确运行所必需的基本数据库文件,其功能是对MySQL权限,状态等进行管理。

    # 初始化故障排错集锦

    错误示例1:

    usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared ob

    #错误原因是没有libaio函数库的支持。需要

    yum -y install libaio

    错误示例2:

    WARNING:The host'mysql'could not be looked up with resolveip

    #需要修改主机名解析,使其和uname -n一样,修改后的结果如下:

    [root@localhost ~] # grep `uname -n` /etc/hosts

    错误示例3

    ERROR:1004Can't create file '/tmp/#sql300e_1_o.frm'(errno:13)

    #原因是/tmp目录的权限有问题。

    解决办法为处理/tmp目录,如下:

    [root@localhost ~]# ls -ld /tmp

    drwxrwxrwt. 3 root root 4096 Jul 14 07:56 /tmp

    [root@localhost ~]# chmod -R 1777 /tmp/

    ```

    此故障必须解除,否则,后面会出现登陆不了数据库等问题。

    #配置并启动MySQL数据库(PHP安装需要先有mysql环境,不然php会报错)

    1 设置MySQL启动脚本

    [root@wangmingxin mysql]# /bin/cp support-files/mysql.server /etc/init.d/mysqld   //拷贝MySQL启动脚本到MySQL的命令路径

    [root@wangmingxin mysql]# chmod +x /etc/init.d/mysqld   //使脚本可执行

     

    (2)MySQL二进制默认安装路径是/usr/local/mysql,启动脚本里是/usr/local/mysql。如果安装路径不同,那么脚本里路径等都需要替换

    (3)启动MySQL数据库,命令如下:

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

    Starting MySQL........ SUCCESS!

    以上是启动数据库的规范方法之一,但还可以用如下方式启动, 

    /usr/local/mysql/bin/mysqld_safe --user=mysql & 

    这个命令结尾的“&”符号,作用是在后台执行MySQL服务,命令执行完还需要按下回车才能进入命令行状态。

    (4)检查MySQL数据库是否启动,命令如下:

    [root@wangmingxin mysql]# netstat -antup | grep mysql

    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      4037/mysqld     

    如果发现3306端口没起来,请tail -100 /usr/local/mysql/data/主机名.err查看日志信息,看是否有报错信息,然后根据相关错误提示进行调试。经常查看服务运行日志是个很好的习惯,也是高手的习惯。

    (5)查看MySQL数据库启动结果日志,命令如下:

    [root@wangmingxin mysql]# tail -10 /usr/local/mysql/data/zhangminagjuan.err InnoDB: Creating foreign key constraint system tables

    InnoDB: Foreign key constraint system tables created

    181127 19:08:47  InnoDB: Waiting for the background threads to start

    181127 19:08:48 InnoDB: 5.5.32 started; log sequence number 0

    181127 19:08:48 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306

    181127 19:08:48 [Note]   - '0.0.0.0' resolves to '0.0.0.0';

    181127 19:08:48 [Note] Server socket created on IP: '0.0.0.0'.

    181127 19:08:48 [Note] Event Scheduler: Loaded 0 events

    181127 19:08:48 [Note] /usr/local/mysql/bin/mysqld: ready for connections.

    Version: '5.5.32'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)

    (6)设置MySQL开机自启动,命令如下:

    [root@wangmingxin mysql]# chkconfig --add mysqld

    [root@wangmingxin mysql]# chkconfig mysqld on

    [root@wangmingxin mysql]# chkconfig --list mysqld

    mysqld             0:off    1:off    2:on    3:on    4:on    5:on    6:off

    提示:也可以将启动命令/etc/init.d/mysqld start 放到/etc/rc.local里面

    (7)配置mysql命令的全局使用路径,命令如下:

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

    [root@wangmingxin mysql]# which mysqladmin

    /usr/local/bin/mysqladmin

    #MySQL安全配置

    为MySQL的root用户设置密码,命令如下:

    [root@wangmingxin mysql]# mysqladmin -u root password '666666'

    [root@wangmingxin mysql]# mysql -uroot -p666666

    Welcome to the MySQL monitor.  Commands end with ; or g.

    Your MySQL connection id is 2

    Server version: 5.5.32 MySQL Community Server (GPL)

     

    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

     

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

     

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

     

    mysql>

     

    LNMPPHPFastCGI方式)服务的安装和准备

    检查NginxMySQL的安装情况

    [root@wangmingxin ~]# ls -ld /usr/local/nginx     //检查确认Nginx及MySQL的安装路径

    drwxr-xr-x 6 root root 4096 Nov 27 16:47 /usr/local/nginx

    [root@wangmingxin ~]# ls -ld /usr/local/mysql

    lrwxrwxrwx 1 mysql mysql 12 Nov 27 18:48 /usr/local/mysql -> mysql-5.5.32

    [root@wangmingxin ~]# netstat -antup | grep -E "80|3306"     //检查端口及启动情况

    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      4037/mysqld     

    测试访问Nginx及mysql是否OK,

    是不是能curl通

    能不能登录mysql

    #检查安装PHP所需的lib库

     [root@localhost ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

    zlib-devel-1.2.3-29.el6.x86_64

     [root@localhost ~]# rpm -qa freetype-devel libpng-devel gd libcurl-devel libxslt-devel

    • 注:每个lib一般都会存在对应的以“*-devel”命名的包,安装lib对应的-devel包后,对应的lib包就会自动安装好,例如安装gd-devel时就会安装gd。
    • 这些lib库不是必须安装的,但是目前的企业环境下一般都需要安装。否则,PHP程序运行时会出现问题,例如验证码无法显示等。



    执行下面命令安装相关的lib软件包

     [root@localhost ~]# yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

     [root@localhost ~]# yum -y install freetype-devel libpng-devel gd libcurl-devel libxslt-devel

    安装后的结果如下:

    [root@wangmingxin ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

    libjpeg-turbo-devel-1.2.1-1.el6.x86_64

    zlib-devel-1.2.3-29.el6.x86_64

    libxml2-devel-2.7.6-14.el6.x86_64

    1. #这里仅缺少libiconv-devel包  因为默认的yum源没有此包,后面会编译安装。

    [root@wangmingxin ~]#  rpm -qa freetype-devel libpng-devel gd libcurl-devel libxslt-devel

    libxslt-devel-1.1.26-2.el6_3.1.x86_64

    gd-2.0.35-11.el6.x86_64

    libpng-devel-1.2.49-1.el6_2.x86_64

    libcurl-devel-7.19.7-37.el6_4.x86_64

    freetype-devel-2.3.11-14.el6_3.1.x86_64

    #安装yum无法安装的libiconv

    [root@wangmingxin libiconv-1.14]# tar xf libiconv-1.14.tar.gz -C /usr/src/

    [root@wangmingxin libiconv-1.14]# cd /usr/src/libiconv-1.14/

    [root@wangmingxin libiconv-1.14]# ./configure --prefix=/usr/local/libiconv && make && make install

    安装libmcrypt

    推荐使用简单的在线yum的方式安装:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 

    编译安装过程略 

    [root@localhost yum.repos.d]# yum -y install libmcrypt-devel

    #开始安装PHPFastCGI方式)服务

    1. [root@localhost ~]# tar xf php-5.3.28.tar.gz -C /usr/src/

    2. [root@localhost ~]# cd /usr/src/php-5.3.28/

    3. [root@localhost php-5.3.28]# ./configure

    4. > --prefix=/usr/local/php5.3.28      #表示指定PHP的安装路径为/usr/local/php5.3.28

    5. > --with-mysql=/usr/local/mysql      #表示需要指定MySQL的安装路径,安装PHP需要的MySQL相关内容。当然,如果没有MySQL软件包,也可以不单独安装,这样的情况可使用--with-mysql=mysqlnd替代--with-                                                  mysql=/usr/local/mysql,因为PHP软件里已经自带了连接MySQL的客户端工具。

    6. > --with-iconv-dir=/usr/local/libiconv

    7. > --with-freetype-dir

    8. > --with-jpeg-dir

    9. > --with-png-dir

    10. > --with-zlib

    11. > --with-libxml-dir=/usr

    12. > --enable-xml

    13. > --disable-rpath

    14. > --enable-safe-mode

    15. > --enable-bcmath

    16. > --enable-shmop

    17. > --enable-sysvsem

    18. > --enable-inline-optimization

    19. > --with-curl

    20. > --with-curlwrappers

    21. > --enable-mbregex

    22. > --enable-fpm

    23. > --enable-mbstring

    24. > --with-mcrypt

    25. > --with-gd

    26. > --enable-gd-native-ttf

    27. > --with-openssl

    28. > --with-mhash

    29. > --enable-pcntl

    30. > --enable-sockets

    31. > --with-xmlrpc

    32. > --enable-zip

    33. > --enable-soap

    34. > --enable-short-tags

    35. > --enable-zend-multibyte

    36. > --enable-static

    37. > --with-xsl

    38. > --with-fpm-user=www      #nginx表示指定PHP-FPM进程管理的用户为www,此处最好和Nginx服务用户统一

    39. > --with-fpm-group=www      #表示指定PHP-FPM进程管理的组为www,此处最好与Nginx服务用户组统一。

    40. > --enable-ftp     #表示激活PHP-FPM方式服务,即以FastCGIF方式运行PHP服务。

    1. #特别强调:上述每行结尾的换行符反斜线()之后不能再有任何字符包括空格

    编译PHP

    [root@wangmingxin php-5.3.28]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18

    [root@wangmingxin php-5.3.28]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/

    [root@wangmingxin php-5.3.28]# touch ext/phar/phar.phar

    [root@wangmingxin php-5.3.28]# make

     #make最后的正确提示

     Build complete.

     Don't forget to run 'make test'.

    [root@wangmingxin php-5.3.28]# make install     //安装PHP生成文件到系统

    配置PHP引擎配置文件php.ini

    [root@wangmingxin ~]# ln -s /usr/local/php5.3.28/ /usr/local/php     //设置软连接以方便访问

    [root@wangmingxin ~]# ls -l /usr/local/php

    lrwxrwxrwx 1 root root 21 Nov 27 22:24 /usr/local/php -> /usr/local/php5.3.28/

    [root@wangmingxin ~]# cd /usr/src/php-5.3.28/   //查看PHP配置默认模板文件

    [root@wangmingxin php-5.3.28]# ls php.ini*

    php.ini-development  php.ini-production

    [root@wangmingxin php-5.3.28]# cp php.ini-production /usr/local/php/lib/php.ini   //拷贝PHP配置文件到PHP默认目录,并更改文件名为php.ini

    [root@wangmingxin php-5.3.28]# ls -l /usr/local/php/lib/php.ini

    -rw-r--r-- 1 root root 69627 Nov 27 22:29 /usr/local/php/lib/php.ini

     

     配置PHPFastCGI方式)的配置文件php-fpm.conf



    [root@wangmingxin php-5.3.28]# /bin/cp php.ini-production /usr/local/php/lib/php.ini

    [root@wangmingxin php-5.3.28]# ls -l /usr/local/php/lib/php.ini

    -rw-r--r-- 1 root root 69627 Nov 27 22:33 /usr/local/php/lib/php.ini

    [root@wangmingxin php-5.3.28]# cd /usr/local/php/etc/

    [root@wangmingxin etc]# ls

    pear.conf  php-fpm.conf.default

    [root@wangmingxin etc]# /bin/cp php-fpm.conf.default php-fpm.conf

    关于php-fpm.conf,暂时可用默认的配置,先把服务搭好,以后再进行优化。



    启动PHP服务(FastCGI方式)

    [root@wangmingxin etc]# /usr/local/php/sbin/php-fpm     //启动PHP服务php-fpm

    [root@wangmingxin etc]# ps -ef | grep php-fpm     //检查PHP服务php-fpm的进程及启动端口的情况

    root       4961      1  0 22:35 ?        00:00:00 php-fpm: master process (/usr/local/php5.3.28/etc/php-fpm.conf)

    www        4962   4961  0 22:35 ?        00:00:00 php-fpm: pool www          

    www        4963   4961  0 22:35 ?        00:00:00 php-fpm: pool www          

    root       4965 117449  8 22:35 pts/1    00:00:00 grep php-fpm

    [root@wangmingxin yum.repos.d]# lsof -i:9000     //默认9000端口提供服务

    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

    php-fpm 4961 root    7u  IPv4 123027      0t0  TCP localhost:cslistener (LISTEN)

    php-fpm 4962  www    0u  IPv4 123027      0t0  TCP localhost:cslistener (LISTEN)

    php-fpm 4963  www    0u  IPv4 123027      0t0  TCP localhost:cslistener (LISTEN)

    #配置Nginx支持PHP程序请求访问

    修改配置文件

    [root@wangmingxin etc]# cd /usr/local/nginx/conf/

    [root@wangmingxin conf]# cp nginx.conf nginx.conf.02

    [root@wangmingxin conf]# vim nginx.conf

    worker_processes  1;

    events {

        worker_connections  1024;

    }

    http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  65;

        server {

            listen       80;

            server_name  blog.yunjisuan.com;

            location / {

                root   html/blog;

                index  index.html index.htm;

            }

            location ~ .*.(php|php5)?$ {

                    root html/blog;

                    fastcgi_pass 127.0.0.1:9000;

                    fastcgi_index index.php;

                    include fastcgi.conf;

            }

        }

    }

    检查并启动Nginx

    [root@wangmingxin conf]# /usr/local/nginx/sbin/nginx -t

    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

    [root@wangmingxin conf]# /usr/local/nginx/sbin/nginx -s reload

    ##此步在生产环境很关键,如不提前检查语法,重启后发现语法错误会导致Nginx无法提供服务,,给用户访问体验带来不好的影响。

    测试LNMP环境生效情况

    测试PHP解析的请求是否OK

    [root@wangmingxin conf]# cd /usr/local/nginx/html/

    [root@wangmingxin html]# mkdir blog

    [root@wangmingxin html]# cd blog/     //进入指定的默认站点目录后,编辑index.php

    [root@wangmingxin blog]# echo "<?php phpinfo(); ?>" >yunjisuan.php



    调整Windows下的host解析:本地IP 域名blog.yunjisuan.com

    打开浏览器,输入http://blog.yunjisuan.com/test_info.php 即可打开如下图所示界面:

    表明: 出现上述界面,表示Nginx配合PHP解析已经正常。



    针对Nginx请求访问PHP,然后对PHP连接mysql的情况进行测试

    [root@wangmingxin php-5.3.28]# cd /usr/local/nginx/html/

    [root@wangmingxin html]# cd blog/

    [root@wangmingxin blog]# vim test_info.php     //编辑test_mysql.php

    <?php

            $link_id=mysql_connect('localhost','root','666666');

        if($link_id){

            echo "mysql successful by juAnne !";

        }else{

            echo mysql_error();

        }

    ?>

     

     

    至此,LNMP的组合已基本搭建完毕。当然,我们还没有做相关优化

    4 部署一个blog程序服务

     开源博客程序WordPress介绍

    WordPress 是一套利用PHP语言和MySQL数据库开发的开源免费的blog(博客,网站)程序,用户可以在支持PHP环境和MySQL数据库的服务器上建立blog站点。它的功能非常强大,拥有众多插件,易于扩充功能。其安装和使用也都非常方便。目前WordPress已经成为搭建blog平台的主流,很多发布平台都是根据WordPress二次开发的,如果你也想像他们一样拥有自己的blog,可购买网上的域名及空间,然后搭建LNMP环境,部署WordPress程序后就可以轻松成就自己的梦想了。

    MySQL数据库配置准备

    [root@localhost ~]# mysql -uroot -p666666     //登陆MySQL数据库

    Welcome to the MySQL monitor.  Commands end with ; or g.

    Your MySQL connection id is 11

    Server version: 5.5.32 MySQL Community Server (GPL)

     

    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

     

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

     

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

     

    mysql> create database wordpress;     #创建一个数据库,名字为wordpress,用于存放blog数据

    Query OK, 1 row affected (0.27 sec)

     

    mysql> show databases like 'wordpress';     #查看

    +----------------------+

    | Database (wordpress) |

    +----------------------+

    | wordpress            |

    +----------------------+

    1 row in set (0.37 sec)

     

    mysql> grant all on wordpress.* to wordpress@'localhost' identified by '666666';

    Query OK, 0 rows affected (0.33 sec)

     

    mysql> flush privileges;     #刷新权限,使得创建用户生效

    Query OK, 0 rows affected (0.28 sec)

     

    mysql> show grants for wordpress@'localhost';     #查看用户对应权限

    +------------------------------------------------------------------------------------------------------------------+

    | Grants for wordpress@localhost                                                                                   |

    +------------------------------------------------------------------------------------------------------------------+

    | GRANT USAGE ON *.* TO 'wordpress'@'localhost' IDENTIFIED BY PASSWORD '*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC' |

    | GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpress'@'localhost'                                                 |

    +------------------------------------------------------------------------------------------------------------------+

    2 rows in set (0.06 sec)

     

    mysql> select user,host from mysql.user;     #查看数据库里创建的wordpress用户

    +-----------+----------------+

    | user      | host           |

    +-----------+----------------+

    | root      | 127.0.0.1      |

    | root      | ::1            |

    |           | localhost      |

    | root      | localhost      |

    | wordpress | localhost      |             #只允许本机通过wordpress用户访问数据库

    |           | zhangminagjuan |

    | root      | zhangminagjuan |

    +-----------+----------------+

    7 rows in set (0.12 sec)

     

    mysql> quit

    Bye

     



    # NginxPHP环境配置准备

    选择之前配置好的支持LNMP的blog域名对应的虚拟主机,命令如下:

    [root@localhost ~]# cd /usr/local/nginx/conf

    [root@localhost conf]# vim nginx.conf

     server {

            listen       80;

            server_name  blog.yunjisuan.com;

            location / {

                root   html/blog;

                index  index.php index.html index.htm;     #补充一个首页文件index.php

            }

            location ~ .*.(php|php5)?$ {

                    root html/blog;

                    fastcgi_pass 127.0.0.1:9000;

                    fastcgi_index index.php;

                    include fastcgi.conf;

                    }

            }

    [root@localhost conf]# /usr/local/nginx/sbin/nginx -s reload

    获取WordPress博客程序,并放置到blog域名对应虚拟主机的站点目录下,即/usr/local/nginx/html/blog,操作命令如下:

    [root@wangmingxin blog]# cd

    [root@wangmingxin ~]# cd /usr/local/nginx/html/blog/

    [root@wangmingxin blog]# ls      #浏览www.wordpress.org下载博客程序

    test_info.php  test_mysql.php  wordpress-4.7.4-zh_CN.tar.gz

    [root@wangmingxin blog]# tar xf wordpress-4.7.4-zh_CN.tar.gz     #解压

    [root@wangmingxin blog]# ls

    test_info.php  test_mysql.php  wordpress  wordpress-4.7.4-zh_CN.tar.gz

    [root@wangmingxin blog]# rm -f test_info.php  test_mysql.php     #删除无用文件

    [root@wangmingxin blog]# ls

    wordpress  wordpress-4.7.4-zh_CN.tar.gz

    [root@wangmingxin blog]# mv wordpress/* .     #把目录里的内容移动到blogcom根目录下

    [root@wangmingxin blog]# /bin/mv wordpress-4.7.4-zh_CN.tar.gz /root/     #移走源程序

    [root@wangmingxin blog]# ls -l     #完整的blog程序内容

    total 192

    -rw-r--r--  1 nobody 65534   418 Sep 25  2013 index.php

    -rw-r--r--  1 nobody 65534 19935 Jan  3  2017 license.txt

    -rw-r--r--  1 nobody 65534  6956 Apr 23  2017 readme.html

    drwxr-xr-x  2 nobody 65534  4096 Nov 28 01:08 wordpress

    -rw-r--r--  1 nobody 65534  5447 Sep 28  2016 wp-activate.php

    drwxr-xr-x  9 nobody 65534  4096 Apr 23  2017 wp-admin

    -rw-r--r--  1 nobody 65534   364 Dec 19  2015 wp-blog-header.php

    -rw-r--r--  1 nobody 65534  1627 Aug 29  2016 wp-comments-post.php

    -rw-r--r--  1 nobody 65534  2930 Apr 23  2017 wp-config-sample.php

    drwxr-xr-x  5 nobody 65534  4096 Apr 23  2017 wp-content

    -rw-r--r--  1 nobody 65534  3286 May 25  2015 wp-cron.php

    drwxr-xr-x 18 nobody 65534 12288 Apr 23  2017 wp-includes

    -rw-r--r--  1 nobody 65534  2422 Nov 21  2016 wp-links-opml.php

    -rw-r--r--  1 nobody 65534  3301 Oct 25  2016 wp-load.php

    -rw-r--r--  1 nobody 65534 33939 Nov 21  2016 wp-login.php

    -rw-r--r--  1 nobody 65534  8048 Jan 11  2017 wp-mail.php

    -rw-r--r--  1 nobody 65534 16255 Apr  7  2017 wp-settings.php

    -rw-r--r--  1 nobody 65534 29896 Oct 19  2016 wp-signup.php

    -rw-r--r--  1 nobody 65534  4513 Oct 15  2016 wp-trackback.php

    -rw-r--r--  1 nobody 65534  3065 Sep  1  2016 xmlrpc.php

    [root@wangmingxin blog]# chown -R www.www /usr/local/nginx/html/blog/     #授权用户访问

    [root@wangmingxin blog]# ls -l     #最终博客目录和权限

    total 192

    -rw-r--r--  1 www www   418 Sep 25  2013 index.php

    -rw-r--r--  1 www www 19935 Jan  3  2017 license.txt

    -rw-r--r--  1 www www  6956 Apr 23  2017 readme.html

    drwxr-xr-x  2 www www  4096 Nov 28 01:08 wordpress

    -rw-r--r--  1 www www  5447 Sep 28  2016 wp-activate.php

    drwxr-xr-x  9 www www  4096 Apr 23  2017 wp-admin

    -rw-r--r--  1 www www   364 Dec 19  2015 wp-blog-header.php

    -rw-r--r--  1 www www  1627 Aug 29  2016 wp-comments-post.php

    -rw-r--r--  1 www www  2930 Apr 23  2017 wp-config-sample.php

    drwxr-xr-x  5 www www  4096 Apr 23  2017 wp-content

    -rw-r--r--  1 www www  3286 May 25  2015 wp-cron.php

    drwxr-xr-x 18 www www 12288 Apr 23  2017 wp-includes

    -rw-r--r--  1 www www  2422 Nov 21  2016 wp-links-opml.php

    -rw-r--r--  1 www www  3301 Oct 25  2016 wp-load.php

    -rw-r--r--  1 www www 33939 Nov 21  2016 wp-login.php

    -rw-r--r--  1 www www  8048 Jan 11  2017 wp-mail.php

    -rw-r--r--  1 www www 16255 Apr  7  2017 wp-settings.php

    -rw-r--r--  1 www www 29896 Oct 19  2016 wp-signup.php

    -rw-r--r--  1 www www  4513 Oct 15  2016 wp-trackback.php

    -rw-r--r--  1 www www  3065 Sep  1  2016 xmlrpc.php

     

    (3)开始安装blog博客程序

    打开浏览器输入blog.yunjisuan.com(提前做好hosts或DNS解析),回车后,出现下图:

     

    仔细阅读页面的文字信息后,单击“现在就开始”按钮继续,然后在出现的页面表单上填写相应的内容,如下图所示:

     

     

     

     

     

  • 相关阅读:
    servlet中doGet()和doPost()的用法
    mybatis动态SQL中的sql片段
    动态SQL语句
    Mybaits的中的对象映射(包含仅有基本数据类型的属性的和对象类型的属性的)
    <img src = "..."/>的一个图片上面怎么在放上字
    启动tomcat时出现The specified JRE installation does not exist 如何解决?
    Navicat图形更改表结构的时,设置外键时出现1452错误
    数据库主键和外键
    数据库设计的过程中的设置外键的作用
    Hibernate 事务管理
  • 原文地址:https://www.cnblogs.com/wangmingxin/p/10035435.html
Copyright © 2020-2023  润新知