四、企业级LNMP环境应用实践

一、LNMP应用环境

1.LNMP介绍

LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。–来自于百度

2.LNMP组合工作流程

➢当LNMP组合工作时,先是用户通过浏览器输入域名请求NginxWeb服务,如果请求是静态资源,则由Nginx解析返回给用户。

➢如果是动态请求(.php结尾),那么Nginx就会把它通过FastCGI接口(生产常用方法)发送给PHP弓|擎服务(FastCGI进程php-fpm)进行解析。

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

二、LNMP之MySQL数据库

1.MySQL数据库介绍

MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。

MySQL 的象征符号是一只名为 Sakila 的海豚,代表着 MySQL 数据库的速度、能力、精确和优秀本质。

目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多公司都采用 MySQL 数据库以降低成本。

MySQL 数据库可以称得上是目前运行速度最快的 SQL 语言数据库之一。除了具有许多其他数据库所不具备的功能外,MySQL 数据库还是一种完全免费的产品,用户可以直接通过网络下载 MySQL 数据库,而不必支付任何费用。

2.MySQL数据库特点

① 功能强大
MySQL 中提供了多种数据库存储引擎,各引擎各有所长,适用于不同的应用场合,用户可以选择最合适的引擎以得到最高性能,可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL5 支持事务、视图、存储过程、触发器等。
② 支持跨平台
MySQL 支持至少 20 种以上的开发平台,包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。这使得在任何平台下编写的程序都可以进行移植,而不需要对程序做任何的修改。
③ 运行速度快
高速是 MySQL 的显著特性。在 MySQL 中,使用了极快的 B 树磁盘表(MyISAM)和索引压缩;通过使用优化的单扫描多连接,能够极快地实现连接;SQL 函数使用高度优化的类库实现,运行速度极快。
④ 支持面向对象
PHP 支持混合编程方式。编程方式可分为纯粹面向对象、纯粹面向过程、面句对象与面向过程混合 3 种方式。
⑤ 安全性高
灵活和安全的权限与密码系统,允许基本主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码的安全。
⑥ 成本低
MySQL 数据库是一种完全免费的产品,用户可以直接通过网络下载。
⑦ 支持各种开发语言
MySQL 为各种流行的程序设计语言提供支持,为它们提供了很多的 API 函数,包括 PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl 语言等。
⑧ 数据库存储容量大
MySQL 数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由 MySQL 内部限制决定的。InnoDB 存储引擎将 InnoDB 表保存在一个表空间内,该表空间可由数个文件创建,表空间的最大容量为 64TB,可以轻松处理拥有上千万条记录的大型数据库。
⑨ 支持强大的内置函数
PHP 中提供了大量内置函数,几乎涵盖了 Web 应用开发中的所有功能。它内置了数据库连接、文件上传等功能,MySQL 支持大量的扩展库,如 MySQLi 等,可以为快速开发 Web 应用提供便利。

3.安装MySQL数据库

① 安装概述
MySQL有几种不同的产品线,且每种产品线又有很多不同的版本,这里选择MySQL5.7系列作为LNMP的组合环境数据库平台。
MySQL的安装方法也有很多,常见方法有:

MySQL安装方式 特点说明
yum/rpm包安装 特点是简单、速度快,但没法定制安装,入门新手用这种方式
二进制安装 解压软件,简单配置后就可以使用,不用安装,速度较快,专业DBA喜欢这种方式。软件名如:mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
源码编译安装 特点是可以定制安装,但是安装时间长,例如:字符集安装路径,等等。软件名如:mysql-5.7.23.tar.gz
源码软件结合yum/rpm安装 把源码软件制作成符合要求的rpm,放到yum仓库里,然后通过yum来安装。结合了yum安装和源码安装的优点,即安装快速,可任意定制参数。

② 安装步骤介绍

  1. 创建mysql用户的账号
    首先以root身份登录到Linux系统中,然后执行如下命令创建mysql组用户组账号:
[root@web01 ~]# groupadd mysql
[root@web01 ~]# useradd -s /sbin/nologin -g mysql -M mysql
  1. 安装编译工具,如果已有了可以忽略
[root@web01 ~]# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake
  1. 创建mysql安装目录并更改其属主为mysql
mkdir -p /usr/local/mysql/data&&chown -R mysql:mysql /usr/local/mysql
  1. 下载解压MySQL包:
[root@web01 ~]# cd /usr/src/
[root@web01 src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.34.tar.gz  #带有boost库的,MySQL 5.7 之后的版本,cmake编译需要boost类库,如果下的不是这种的话,那还需要单独下个boost库的包,解压后放进mysql解压目录就行。
[root@web01 src] tar zxvf mysql-boost-5.7.34.tar.gz
[root@web01 src]# cd mysql-5.7.34/
[root@web01 mysql-5.7.34]# cmake  -DWITH_BOOST=boost/ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/usr/local/mysql/data -DINSTALL_MANDIR=/usr/share/man -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1
[root@web01 mysql-5.7.23]# make && make install

cmake编译配置参数说明:

-DCMAKE_INSTALL_PREFIX=dir_name   # 安装的主目录
-DMYSQL_DATADIR=dir_name MySQL   # 文件目录的路径,这个参数也可以在启动MySQL的时候带上--datadir参数进行设置
-DSYSCONFDIR=dir_name my.cnf   # 参数文件的路径
-DWITH_INNOBASE_STORAGE_ENGINE=1   # 将INNODB存储引擎编译进去
-DWITH_MYISAM_STORAGE_ENGINE=1   # 将MYISAM存储引擎编译进去
-DWITH_MEMORY_STORAGE_ENGINE=1   # 安装memory存储引擎
-DWITH_READLINE=bool   # 是否使用readline库
-DMYSQL_UNIX_ADDR=file_name Unix socket   # 文件的路径,socket文件用于服务器监听连接,这个参数必须是绝对路径
-DMYSQL_TCP_PORT=port_num   # 服务器监听TCP/IP连接的端口,默认是3306
-DENABLED_LOCAL_INFILE=1   # 是否打开LOAD DATA INFILE的LOCAL参数
-DWITH_PARTITION_STORAGE_ENGINE=1   # 将分区存储引擎编译进去
-DEXTRA_CHARSETS=all   # 安装所有扩展字符集
-DDEFAULT_CHARSET   # 字符集,默认字符集是latin1
-DDEFAULT_COLLATION=collation_name   # 服务校对,默认的是latin1_swedish_ci,可以通过SHOW COLLATION语句查看哪个校对匹配的字符集
-DWITH_BOOST   # boost类库所在目录
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1   # 将FEDERATED存储引擎编译进去
-DWITH_BLACKHOLE_STORAGE_ENGINE=1   # 将BLACKHOLE存储引擎编译进去
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1   # 不编译EXAMPLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1   # 将Performance Schema(性能视图)存储引擎编译进去
-DCOMPILATION_COMMENT=string   # 编译环境描述
-DENABLED_PROFILING=bool   # 是否开启profiling代码的查询(用于SHOW PROFILE and SHOW PROFILES语句)
-DWITH_EXTRA_CHARSETS=name   # 指定额外的字符集,默认是all,包含所有的字符集。
-DINSTALL_BINDIR=dir_name   # 安装用户程序的路径,默认路径是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_DOCDIR=dir_name   #安装文档的路径,默认路径是DCMAKE_INSTALL_PREFIX/doc
-DINSTALL_INCLUDEDIR=dir_name   #安装头文件的路径,默认路径是DCMAKE_INSTALL_PREFIX/include
-DINSTALL_LIBDIR=dir_name   # 安装库文件的路径,默认路径是DCMAKE_INSTALL_PREFIX/lib
-DINSTALL_MANDIR=dir_name   #安装帮助手册的路径,默认路径是DCMAKE_INSTALL_PREFIX/man
-DINSTALL_PLUGINDIR=dir_name   # 安装插件的路径,默认路径是DCMAKE_INSTALL_PREFIX/lib/plugin
-DINSTALL_SBINDIR=dir_name   # 安装mysqld服务端启动脚本的路径,默认路径是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_SCRIPTDIR=dir_name   # 初始化MySQL数据库的数据文件路径的mysql_install_db脚本路径,默认路径是DCMAKE_INSTALL_PREFIX/scripts
-DINSTALL_SQLBENCHDIR=dir_name   # 安装sql-bench的路径,默认路径是DCMAKE_INSTALL_PREFIX
-DINSTALL_SUPPORTFILESDIR=dir_name   # 安装支持文件的路径,默认路径是DCMAKE_INSTALL_PREFIX/support-files
  1. 配置文件my.cnf
    此版本没有默认的配置文件需要自己去网上搜索或者自己写:
[root@web01 mysql]# vi /etc/my.cnf
[mysqld]
port=3306
datadir=/data
pid-file=/var/run/mysql/mysql.pid
socket=/var/lib/mysql/mysql.socket
log-error=/var/log/mysql/mysql.log
user=mysql

[client]
socket=/var/lib/mysql/mysql.socket
  1. 创建相关目录,并修改权限
[root@web01 ~]# mkdir /data/
[root@web01 ~]# mkdir /var/lib/mysql
[root@web01 ~]# mkdir /var/run/mysql
[root@web01 ~]# mkdir /var/log/mysql
[root@web01 ~]# chown -R mysql:mysql /usr/local/mysql  /data/  /var/lib/mysql  /var/log/mysql  /var/run/mysql   #修改权限
  1. 配置启动文件
[root@web01 mysql]# cat /usr/lib/systemd/system/mysql.service 
[Unit]
Description=mysql
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecRestart=/usr/local/mysql/support-files/mysql.server restart
ExecReload=/usr/local/mysql/support-files/mysql.server reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 设置MySQL服务开机自启动
[root@web01 ~]# systemctl enable mysql.service
  1. 启动MySQL服务
[root@web01 ~]# systemctl  restart  mysql.service
[root@web01 ~]# netstat -anptu | grep mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      22684/mysqld 
  1. 重置密码
[root@web01 ~]# mysql  #回车直接可以登录
mysql> set password = password('123456');  #修改mysql登陆密码:123456
Query OK, 0 rows affected, 1 warning (0.00 sec)

三、LNMP之PHP安装

1.安装依赖包

[root@lb01 src]# yum -y install openssl openssl-devel libxml2-devel bzip2-devel libcurl-devel libmcrypt-devel  #yum仓库没有libmcrypt-devel包,需要自己下载手动编译安装
[root@lb01 src]# tar -zxvf libmcrypt-2.5.7.tar.gz
[root@lb01 src]# cd libmcrypt-2.5.7
[root@lb01 libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt
[root@lb01 libmcrypt-2.5.7]# make && make install

2.获取软件包

[root@lb01 src]# wget http://mirrors.sohu.com/php/php-5.6.12.tar.gz

3.解压编译安装PHP

[root@lb01 src]# tar -zxvf php-5.6.12.tar.gz 
[root@lb01 src]# cd php-5.6.12
[root@lb01 php-5.6.12]# ./configure --prefix=/usr/local/php --with-mysql --with-pdo-mysql  --with-mysqli  --with-openssl --enable-fpm  --enable-sockets  --enable-sysvshm   --enable-mbstring   --with-freetype-dir  --with-jpeg-dir  --with-png-dir--with-zlib-dir  --with-libxml-dir=/usr  --enable-xml --with-mhash  --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc  --with-config-file-scan-dir=/etc/php.d --with-bz2  --with-curl
[root@lb01 php-5.6.12]# make && make install

参数介绍
–with-mysql \                   //支持mysql
–with-pdo-mysql \                //支持pdo模块
–with-mysqli \                  //支持mysqli模块         
–with-openssl \                  //支持openssl模块
–enable-fpm \                   //支持fpm模式
–enable-sockets \                //启用socket支持
–enable-sysvshm \                //启用系统共享内存支持
–enable-mbstring \                //使多字节字符串的支持
–with-freetype-dir \              //设置FreeType安装前缀路径
–with-jpeg-dir \                //设置libjpeg安装前缀路径
–with-png-dir \                //设置libpng安装前缀路径
–with-zlib-dir \                //设置libz安装前缀路径
–with-libxml-dir=/usr \            //设置libxml2安装路径
–enable-xml \                 
–with-mhash \                 //支持mhash
–with-mcrypt \                 //支持mcrypt
–with-config-file-path=/etc \        //配置文件路径
–with-config-file-scan-dir=/etc/php.d \ //配置文件扫描路径
–with-bz2 \               //支持BZip2
–with-curl   //支持curl

4.配置PHP

[root@lb01 php-5.6.12]#  cp php.ini-production /etc/php.ini    #提供配置文件
[root@lb01 php-5.6.12]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm   #为php-fpm提供脚本
[root@lb01 php-5.6.12]# chmod +x /etc/init.d/php-fpm
[root@lb01 php-5.6.12]# chkconfig --add php-fpm
[root@lb01 php-5.6.12]# chkconfig php-fpm on
[root@lb01 php-5.6.12]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf     #提供php-fpm配置文件

5.启动PHP服务

[root@lb01 ~ ]# /etc/init.d/php-fpm start
[root@lb01 ~]# netstat -anput |grep php-fpm
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      38354/php-fpm: mast 

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

1. 修改Nginx配置文件

此处的环境为上一篇文章《三、Nginx web服务应用》的环境,可按照如下步骤编辑Nginx的配置文件。
查看Nginx当前的配置,命令如下

[root@lb01 ~]# egrep -v '^$|#' /usr/local/nginx/conf/nginx.conf  #去除#号和包含空行的内容
worker_processes  1;
error_log  logs/error.log;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    sendfile        on;
    keepalive_timeout  65;
include extra/tiantian.conf;
include extra/status.conf;
include extra/blog.conf;
}
[root@web01 ~]# egrep -v '^$|#' /usr/local/nginx/conf/extra/tiantian.conf 
 server {
        listen       88;
        server_name  www.tiantian.com ;
        charset utf-8;
        location / {
            root   html/tiantian;
            index  index.php index.html index.htm;
        }
	access_log logs/access_tiantian.log main;
location ~ \.php$ {              #此location为nginx支持php访问配置
            root  html/tiantian;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
 }

2.测试LNMP环境生效情况

编写显示PHP配置信息的简单PHP文件代码

[root@web01 ~]# cat /usr/local/nginx/html/tiantian/index.php 

客户端访问:www.tiantian.com:88/index.php
四、企业级LNMP环境应用实践_第1张图片
编辑测试连接mysql数据库的简单代码

[root@web01 tiantian]# cat index.php 
close();
?>

访问www.tiantian.com:88/index.php
在这里插入图片描述
到此,LNMP的组合已基本搭建完毕。相关优化,后面文章见!!!

你可能感兴趣的:(Linux手记,linux,lnmp)