linux运维之LNMP

关于LNMP知识:

1.LNMP的介绍:

  在2010年以前,互联网最常用的经典Web服务环境组合就是

LAMP(即时Linux,Apache,Mysql,PHP),近几年随着Nginx Web服务的

逐渐流行,出现了LNMP全称为Linux、Nginx、Mysql、PHP首字母缩写。

2.LNMP的工作流程:

  1)当LNMP组合工作时,首先是用户通过浏览器输入域名请求Nginx Web服务,

如果请求是静态的资源,则是Nginx解析返回给客户。

  2)如果是动态请求(.php结尾),那么Nginx就会把它通过FAstcgi接口(生产常用方法)

发送给PHP引擎服务(Fastcgi进程php-fpm)进行解析。如果这个请求要读取数据库数据,

那么PHP就会继续向后请求Mysql数据库,以读取需要的数据,并最终通过Nginx服务

把获取的数据返回给用户,这就是LNMP环境的基本顺序流程,这个请求流程就是企业使用

LNMP环境的常用流程。

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

3. Nginx与PHP、MySQL之间是如何工作的

1)用户通过http发出请求,请求会先抵达LNMP架构中的Nginx

2)Nginx会根据用户的请求进行判断,这个判断由location进行完成

3)判断用户请求是静态页面,Nginx直接进行处理

4)判断用户请求的是动态页面,Nginx会交给fastcgi协议下发

5)fastcgi协议会将请求交给php-fpm管理进程处理,php-fpm管理进程

会调用具体的工作进程warrap

6)warrap会调用php程序进行解析,如果是解析代码会直接返回

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

4.安装LNMP架构

1)配置yum源

  [root@web01 ~]# cat /etc/yum.repos.d/php.repo

  [webtatic-php]

  name = php Repository

  baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/

  gpgcheck = 0

yum install nginx -y

    yum remove php-mysql-5.4 php php-fpm php-common

    yum -y install php71w php71w-cli php71w-common php71w-devel

    php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo

    php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached

    php71w-pecl-redis php71w-pecl-mongodb


启动nginx php-fpm

    systemctl start nginx

    systemctl start php-fpm

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

5. Nginx与PHP集成的原理

1)编写能解析PHP的Nginx配置文件

  [root@web01 conf.d]# cat php.sm.com.conf

    server {

        listen 80;

        server_name php.sm.com;

        root /code;

        location / {

            index index.php;

        }

        location ~ \.php$ {

            fastcgi_pass 127.0.0.1:9000;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            include fastcgi_params;

        }

    }

2)编写PHP代码,测试访问效果


  [root@web01 conf.d]# cat /code/info.php

   

        phpinfo();

    ?>

3)host劫持

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

6.Mysql数据库介绍(可以单独拿出来使用)

  1)Mysql是互联网领域里非常重要的,山手广大用户欢迎的一款 开源关系型数据库软件,

由瑞典Mysql AB公司开发与维护。2006年,Mysql AB公司被SUN公司收购。2008年,SUN公司

又被传统的数据库领域大佬甲骨文(orcle)公司收购。所以,Mysql数据库软件现在属于Oracle

公司,但依然是开源的。

  Mysql数据库的最常用标准化语言为SQL结构化查询语言。

  2)为什么选择Mysql数据库

    目前,绝大多数使用Linux操作系统的互联网企业都在使用Mysql作为后端的数据库,

从大型的BAT门户,到电商门户平台,分类门户平台等无一例外。mysql数据库到底有什么

优势和特点呢?

  (1)性能卓越,服务稳定,很少出现异常宕机

  (2)开放源代码且无版权制约,自主性强,使用成本低。

  (3)历史悠久,社区及用户非常活跃,遇见问题,可以很快获取帮助。

  (4)软件体积小,安装使用简单,并且易于维护,安装及维护成本低。

  (5)支持多种操作系统,提供多种API接口,支持多种开发语言,特别是

对流行的PHP语言无缝支持。

  (6)品牌口碑效应,使得企业无需考虑直接用。

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

7.安装Mysql数据库

  1)Mysql的安装方法,常见的方法:

  (1)yum/rpm 包安装

    特点:简单、速度快,但是没法定制安装,入门新手采用。

  (2)二进制安装

      特点:解压软件简单配置后就能使用,不用安装,速度较快

      例如:mysql-5.5.32-linux2.6-x86_64.tar.gz

  (3)源码编译安装

      特点:是可以定制安装参数,但是安装时间长

      例如软件名:mysql-5.5.32.tar.gz

  (4)源码软件结合/yum/rpm来安装

      特点:把源码软件制作成符合要求的rpm,放到yum仓库里,然后

通过yum来安装。

注意:

  1)建议和Nginx服务安装在同一机器上。

  2)重视操作过程的报错输出,有错误要解决掉再继续,不能忽略编译中的错误。

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

  2)Mysql的二进制安装:

  (1)创建软件目录:

    [root@db01 ~]# mkdir -p /app/

      上传软件到此目录

  (2)解压并改名为mysql

      [root@db01 app]# mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql

      [root@db01 app]# ls -l /app/mysql/

      total 36

      drwxr-xr-x  2 root root  4096 Mar  4 14:55 bin

      -rw-r--r--  1 7161 31415 17987 Sep 13  2017 COPYING

      drwxr-xr-x  2 root root    55 Mar  4 14:55 docs

      drwxr-xr-x  3 root root  4096 Mar  4 14:55 include

      drwxr-xr-x  5 root root    229 Mar  4 14:55 lib

      drwxr-xr-x  4 root root    30 Mar  4 14:55 man

      -rw-r--r--  1 7161 31415  2478 Sep 13  2017 README

      drwxr-xr-x 28 root root  4096 Mar  4 14:55 share

      drwxr-xr-x  2 root root    90 Mar  4 14:55 support-files

    修改环境变量:

    vim /etc/profile

    export PATH=/app/mysql/bin:$PATH

    [root@db01 bin]# source /etc/profile


  (3)建立mysql用户和组


        useradd mysql

  (4)创建相关目录并修改权限

        mkdir /data/mysql -p

        chown -R mysql.mysql /app/*

        chown -R mysql.mysql /data/*

  (5)初始化数据(建库)

      初始化数据,初始化管理员的密码为空

        \rm -rf  /data/mysql/*

        [root@db01 ~]# mysqld --initialize-insecure  --user=mysql --basedir=/app/mysql --datadir=/data/mysql

        2019-04-18T03:37:43.146018Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

        2019-04-18T03:37:43.892132Z 0 [Warning] InnoDB: New log files created, LSN=45790

        2019-04-18T03:37:43.970412Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

        2019-04-18T03:37:44.029490Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5378f3b3-618b-11e9-9164-000c294234c8.

        2019-04-18T03:37:44.041469Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

        2019-04-18T03:37:44.042348Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

      [root@db01 ~]# cd /data/mysql/

      [root@db01 mysql]# ll

        total 110628

      -rw-r----- 1 mysql mysql      56 Apr 18 11:37 auto.cnf

      -rw-r----- 1 mysql mysql      419 Apr 18 11:37 ib_buffer_pool

      -rw-r----- 1 mysql mysql 12582912 Apr 18 11:37 ibdata1

      -rw-r----- 1 mysql mysql 50331648 Apr 18 11:37 ib_logfile0

      -rw-r----- 1 mysql mysql 50331648 Apr 18 11:37 ib_logfile1

      drwxr-x--- 2 mysql mysql    4096 Apr 18 11:37 mysql

      drwxr-x--- 2 mysql mysql    8192 Apr 18 11:37 performance_schema

      drwxr-x--- 2 mysql mysql    8192 Apr 18 11:37 sys

      [root@db01 mysql]#

      注释:5.6初始化的区别:

      /application/mysql/scripts/mysql_install_db  --user=mysql

      --datadir=/application/mysql/data

      --basedir=/application/mysql

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

  (6)书写默认配置文件

      vim /etc/my.cnf

      [mysqld]

      user=mysql

      basedir=/app/mysql

      datadir=/data/mysql

      server_id=6

      port=3306

      socket=/tmp/mysql.sock

      [mysql]

      socket=/tmp/mysql.sock

      prompt=3306 [\\d]>

  (7)配置启动脚本:

      [root@db01 mysql]# cd /app/mysql/support-files

      [root@db01 support-files]# ./mysql.server start

      Starting MySQL.Logging to '/data/mysql/db01.err'.

      SUCCESS!

      cp mysql.server    /etc/init.d/mysqld

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

  (8)使用systemd管理mysql

      vim /etc/systemd/system/mysqld.service

      [Unit]

      Description=MySQL Server

      Documentation=man:mysqld(8)

      Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

      After=network.target

      After=syslog.target

      [Install]

      WantedBy=multi-user.target

      [Service]

      User=mysql

      Group=mysql

      ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf

      LimitNOFILE = 5000

  注意:将原来模式启动mysqld先关闭,然后再用systemd管理。


  systemctl  start/stop/restart/status  mysqld

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

  (9)安装后的简单管理

    [root@db01 ~]# mysqladmin -uroot -p password 123

      Enter password:

      mysqladmin: [Warning] Using a password on the command line interface can be insecure.

      Warning: Since password will be sent to server in plain text,

  use ssl connection to ensure password safety.

      5.6版本:

      select user,password,host from mysql.user;

      5.7 中用户基本信息

      select user,authentication_string,host from mysql.user;

      desc  mysql.user;

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

(10) 小结:

  1.版本 (主流版本的GA时间了解一下)

    5.6 5.7

    5.6.38  5.7.20

    20170913

    (1) 初始化方式变了

      mysql_install_db 

      mysqld  --initialize-insecure

    (2) 用户安全

        12位

        180

      4种复杂度

    (3)密码字段

      authentication_strings

  2. 建库(初始化数据库)

    mysqld --intialize-insecure --user=mysql

    --basedir=/app/mysql --datadir=/data/mysql

  3.简易的配制文件/etc/my.cnf

      user

      basedir

      datadir

      server_id

      port

      socket

  4.管理员密码


    mysqladmin -uroot -p password xx

===============================(mysql结束)====================================

8.FastCGI介绍:

  1)什么是CGI

    CGI的全称为“通用网关接口”(Common Gateway Interface),为HTTP

服务器与其他机器上的程序服务通信交流的一种工具,CGI程序需要运行在

网络服务器上。(很少用了)


  2)什么是FastCGI:

    FastCGI是一个可伸缩地、高速的在HTTP服务器和动态脚本语言间通信的接口。

在linux下,FastCGI接口(即为socket,这个socket可以是文件socket,也可以是

IP socket)。主要优点是把动态语言和HTTP服务器分离开来的,多数流行的HTTP

服务器都支持FastCGI,也包括Apache,Nginx,Lighttpd等。

    FastCGI是采用的C/S架构。 FastCGI的主要优点是把动态语言和HTTP服务器

分离开来,使Nginx专门处理静态请求及向后转发的动态请求,而PHP/PHP-FPM服务器

则专门解析PHP动态请求。

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

9.PHP与MySQL集成的原理

  1)启动数据库

    [root@web01 ~]# systemctl start mysql

  2)配置连接密码

    [root@web01 ~]# mysqladmin password sm@2019

  3)测试登录mysql

    [root@web01 ~]# mysql -uroot sm@2019

      Mysql [(none)]>

  4)编写php连接数据库的代码

    [root@web01 ~]# /code/mysqli.php

     

        $servername = "localhost";

        $username = "root";

        $password = "sm@2019";

        // 创建连接

        $conn = mysqli_connect($servername, $username, $password);

        // 检测连接

        if (!$conn) {

            die("Connection failed: " . mysqli_connect_error());

        }

        echo "php连接MySQL数据库成功";

    ?>

  5)可以直接使用php命令测试(也可以通过浏览器的方式去测试)

  [root@web01 ~]# php /code/mysqli.php

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

10.通过LNMP架构部署Wordpress

  1)编写Nginx集成PHP的配置文件 (定义域名以及站点的目录位置)

    [root@web01 conf.d]# cat blog.sm.com.conf

      server {

        listen 80;

        server_name blog.sm.com;

        root /code/wordpress;

        location / {

        index index.php;

      }

        location ~ \.php$ {

            fastcgi_pass 127.0.0.1:9000;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include fastcgi_params;

    }

}

  2)根据Nginx配置,初始化环境,然后上传代码

    1.准备站点目录

        [root@web01 conf.d]# mkdir /code

    2.下载wordpress代码

        [root@web01 conf.d]# cd /code

        [root@web01 code]# tar xf wordpress-5.2.3-zh_CN.tar.gz

  3)创建数据库名

      [root@web01 code]# mysql -uroot -p sm.com


    Mysql [(none)]> create database wordpress;

    Mysql [(none)]> show databases;

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

    | Database          |

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

    | information_schema |

    | mysql              |

    | performance_schema |

    | test              |

    | wordpress          |

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

    5 rows in set (0.01 sec)

  4)统一Nginx PHP的权限 为 www

    [root@web01 code]# groupadd www -g 666

    [root@web01 code]# useradd -u666 -g666 www


    [root@web01 code]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf

    [root@web01 code]# chown -R www.www /code

    [root@web01 code]# systemctl restart nginx


    [root@web01 code]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf

    [root@web01 code]#  sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

    [root@web01 code]# systemctl restart php-fpm

  5)WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的

服务器上架设属于自己的网站。

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

你可能感兴趣的:(linux运维之LNMP)