LNMP架构

一、了解LNMP架构

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
(1)Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
(2)Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
(3)Mysql是一个小型关系型数据库管理系统。 PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
(4)这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

lnmp架构部署示意图:

LNMP架构_第1张图片

1.Apache+PHP 和 Nginx+PHP的区别

Apache一般是把PHP当做自己的一个模块来启动;而Ngnix则是把http请求变量转发给PHP进程,即PHP独立进程,与Ngnix通信,这种方式叫做Fast-CGI运行方式。所以Apache所编译的PHP不能用于Nginx。

LNMP架构_第2张图片

2.什么是Fast-CGI

  Fast-CGI是一个可伸缩的、高速的在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持Fast-CGI,包括Apache、Nginx和lighttpd等。同时,Fast-CGI也被许多脚本语言支持,其中就有PHP。
  Fast-CGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。
  FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给Fast-CGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

3.Nginx+Fast-CGI运行原理

  Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过Fast-CGI接口来调用。Fast-CGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。
  wrapper:为了调用CGI程序,还需要一个Fast-CGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过Fast-CGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过Fast-CGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+Fast-CGI的整个运作过程。

LNMP架构_第3张图片

                                                               Nginx+Fast-CGI运行过程

###########################mysql源码编译##########################

1.下载cmake-2.8.12.2-4.el6.x86_64.rpm 和mysql-boost-5.7.17.tar.gz
2.安装源码编译工具cmake(支持编译C++语言):cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y          

3.tar zxf mysql-boost-5.7.17.tar.gz             ##解压源码包

4.cd mysql-5.7.17/

LNMP架构_第4张图片

5.创建预编译环境,可以定制即加上自己所需的安装条件(比如安装位置等等)

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 \      Unix  socket文件路径
> -DWITH_MYISAM_STORAGE_ENGINE=1 \                                          安装 myisam 存储引擎
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \                                     安装 innodb 存储引擎
> -DDEFAULT_CHARSET=utf8 \                                                                 使用utf8字符
> -DDEFAULT_COLLATION=utf8_general_ci \                                          校验字符

> -DEXTRA_CHARSETS=all \                                                                      安装所有扩展字符集

6.直接执行完上面命令后,会报错,要解决一系列依赖性

LNMP架构_第5张图片

yum install gcc gcc-c++ -y                 rm -fr CMakeCache.txt    

LNMP架构_第6张图片

cmake后加入语句-DWITH_BOOST=boost/boost_1_59_0/ 并删除CMakeCache.txt(编译缓存文件信息) 

LNMP架构_第7张图片

cmake

yum install ncurses-devel -y      cmake    rm -fr CMakeCache.txt   #ncurses-devel为字符终端处理库

LNMP架构_第8张图片

yum intsall bison -y     cmake                        ##linux下c/c++语法分析器

rm -fr CMakeCache.txt      cmake

LNMP架构_第9张图片

7.编译 make && make install

LNMP架构_第10张图片

8.配置mysql

1)进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放在/etc下

cd /usr/local/lnmp/mysql/                        # mysql的安装位置

cd support-files/                                      #配置文件所在位置

cp my-default.cnf /etc/my.cnf                 # 将配置文件拷贝到/etc(系统默认配置文件目录)

LNMP架构_第11张图片

2)配置mysql服务

vim /etc/my.cnf                         ##编辑mysql配置文件

# These are commonly set, remove the # and set as required.

basedir = /usr/local/lnmp/mysql                                                   # mysql的安装目录

datadir = /usr/local/lnmp/mysql/data                                            # mysql数据存放位置

port = 3306                                                                                     # mysql服务对外端口

# server_id = .....

socket = /usr/local/lnmp/mysql/data/mysql.sock                         # mysql与外界联系的套接字文件位置

LNMP架构_第12张图片

3)将编译完成的mysql启动脚本复制到系统启动服务的默认目录中

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

4)对mysql服务进行限制(利用mysql用户),将mysql服务的工作空间局限在mysql用户的家目录中,创建mysql组和mysql用户

groupadd -g 27 mysql

useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql -s /sbin/nologin mysql             #指定mysql用户的家目录为/usr/local/lnmp/mysql/data(-M表示不创建其家目录)。为了系统安全,MYSQL默认使用mysql用户来运行相关程序。

id mysql         ##查看mysql用户id

5)将mysql目录下的data目录的所属组修改为mysql,因为mysql服务将要往这个目录中写数据,保证其有执行权限

cd  /usr/local/lnmp/mysql/

chown mysql.mysql  . -R  

ll

LNMP架构_第13张图片
6)将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令

vim /root/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin     ##将mysql命令的路径加入环境变量 方便使用

source .bash_profile      ##加载.bash_profile文件  把mysql对应的文本脚本添加到环境变量中。也可以加载root的path中,使用软连接添加进来。(ln -s /usr/local/lnmp/mysql/bin/* /usr/local/sbin

7)执行mysql的配置初始化文件

mysqld --initialize --user=mysql          ##注意生成的初始化密码在最底下(注意不要冒号后面的空格)

LNMP架构_第14张图片

8)mysql的安全初始化
此时,mysqld服务已经可以开启关闭了

cd /usr/local/lnmp/mysql/

chown root.root . -R

chown mysql data/ -R ###将此目录的所有文件用户和家目录都改成超户 ,除了data改成mysql因为mysql服务将要往这个目录中写数据,保证其有执行权限

LNMP架构_第15张图片

/etc/init.d/mysqld start


执行安全初始化脚本mysql_secure_installation

(1)在第一次交互请求后面输入刚刚初始化时复制的密码

(2)然后输入两次新密码

(3)接下来的交互式请求可以直接回车,这条交互式请求是询问你是否要检查密码强度, 如果输入y,就要重新修改密码,密码长度必须超过8位,必须有大小写字母, 所以我们直接回车

(4)接下来会询问是否要修改root密码,直接回车,因为上面已经设置过了

  (5) 是否删除匿名用户直接enter跳过

(6)接下来全部输入y回车就行 现在就可以直接进入mysql了

登陆:

mysql -p   或者 mysql -u root -pwestos

LNMP架构_第16张图片

至此 mysql源码编译成功!!!

########################PHP源码编译##############################

1.下载php源码包进行解压

tar jxf php-5.6.35.tar.bz2

LNMP架构_第17张图片

cd php-5.6.35

ls

LNMP架构_第18张图片

./configure --help | grep mysql      ###过滤出与mysql相关的模块

LNMP架构_第19张图片

2进入解压目录创造预编译环境

./configure --perfix=/usr/local/lnmp/php                                        ##php安装的位置

--with-config-file-path=/usr/local/lnmp/php/etc                            #php配置文件所在的位置

--with-mysql=mysqlnd --enable-mysqlnd

--with-mysqli=mysqlnd

--with-pdo-mysql=mysqlnd                                                          ##支持与mysql数据库之间建立联系

--with=openssl                                                                              ##支持openssl加密

 --with-snmp

--with-gd --with-zlib

--with-curl

--with-libxml-dir                                                                     ##支持libxml函数

--with-png-dir --with-jpeg-dir --with-freetype-dir                ##php处理图片格式

--with-pear

--with-gettext

--with-gmp

--enable-inline-optimization

--enable-soap

--enable-ftp

--enable-sockets

--enable-mbstring

--enable-fpm                             # 开启fpm模式(nginx等服务用的)

--with-fpm-user=nginx                                             # 对PHP服务的限制通过nginx用户来实现

--with-fpm-group=nginx                                           # PHP以nginx用户组身份运行 

--with-mcrypt                                                            # 提供了对多种块算法的支持 主要用来实现加密等算法

--with-mhash                                                           # 加密算法

LNMP架构_第20张图片

LNMP架构_第21张图片

3.解决依赖性

yum install libxml2-devel -y

LNMP架构_第22张图片

yum install openssl-devel -y

yum install curl-devel -y

yum install gmp-devel -y

yum install net-snmp-devel -y

LNMP架构_第23张图片

###注意这几个包系统里面没有,需要从网上下载 ######

yum install -y gd-devel-2.0.35-11.el6.x86_64.rpm

LNMP架构_第24张图片

LNMP架构_第25张图片

yum install libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm -y

rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm

然后重新执行这条命令:

./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --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

LNMP架构_第26张图片

4.编译和安装

make && make install

LNMP架构_第27张图片

5.拷贝文件配置文件

cd /usr/local/lnmp/php/etc

cp php-fpm,conf.default php-fpm.conf

cd

cd php-5.6.35

cp php.ini-production /usr/local/lnmp/php/etc/php.ini

6.修改之前拷贝的配置文件(配置pid和时区)

vim /usr/local/lnmp/php/etc/php-fpm.conf   

将第25行注释去掉(pid)

cd /usr/local/lnmp/php/etc/

vim php.ini ###修改时区

933 [Date]

934 ; Defines the default timezone used by the date functions

935 ; http://php.net/date.timezone 936 date.timezone = Asia/Shanghai

7.建立nginx用户

useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx

id nginx

8.将php启动的脚本复制到系统启动脚本的默认目录下,并测试php是否可以启动

cd

cd php-5.6.35/sapi/fpm/

cp init.d.php-fpm /etc/init.d/php-fpm                   ###制作php启动脚本

chmod +x /etc/init.d/php-fpm                               ###给启动脚本添加执行权限

/etc/init.d/php-fpm start ps ax                              ###查看php进程是否开启

netstat -antlp                                                         ###查看端口状态

LNMP架构_第28张图片

至此php源码编译成功!!

####################源码编译nginx#######################

 

1.解压源码包
tar zxf nginx-1.10.1.tar.gz

LNMP架构_第29张图片
2.去掉版本号

cd nginx-1.10.1

cd src/core/   

vim nginx.h       ##去掉版本号

3.注释掉179行

cd nginx-1.10.1/auto/cc/

vim gcc

##debug,找到那行进行注释

4.进行预编译

cd nginx-1.10.1

./configure --help ###查看要添加的模块帮助

./configure --prefix=/usr/local/lnmp/nginx

--with-http_ssl_module

--with-http_stub_status_module

--user=nginx

--group=nginx

--with-threads

--with-file-aio

LNMP架构_第30张图片

5.解决依赖性安装

yum install -y pcre-devel           

重新执行这条命令:

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --user=nginx --group=nginx --with-threads  --with-file-aio

LNMP架构_第31张图片

6.编译安装

make && make install

LNMP架构_第32张图片

7.配置nginx服务
cd /usr/local/lnmp/nginx/conf
vim nginx.conf

LNMP架构_第33张图片

vim /etc/security/limits.conf

nginx            -             nofile      65536

8.将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令

vim /root/.bash_profile ###制作nginx启动脚本

10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin

source .bash_profile ###刷新一下

cd /usr/local/lnmp/nginx/sbin/

nginx -t ##检测语法

nginx ###打开nginx

cd /usr/local/lnmp/nginx/html/ ###默认发布目录

vim index.php

LNMP架构_第34张图片

  phpinfo()

?>

/etc/init.d/php-fpm reload    重新加载php服务

在网站分别访问172.25.45.1   172.25.45.1/index.php

LNMP架构_第35张图片

LNMP架构_第36张图片

为了方便测试再次编辑nginx.conf

cd /usr/local/lnmp/nginx/conf

vim nginx.conf

nginx -s reload

 

LNMP架构_第37张图片

########################论坛搭建##############################

下载论坛安装包:Discuz_X3.2_SC_UTF8.zip 

yum install unzip -y

unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/ ###解压到指定目录

LNMP架构_第38张图片

cd /usr/local/lnmp/nginx/html/

mv upload bbs ###改目录名

测试:172.25.45.1/bbs/install      选择我同意

LNMP架构_第39张图片

 

cd bbs/

chmod 777 config/ data/ uc_server/ uc_client/ -R    ##修改下面目录权限   若不改 下面文件权限会产生报错

LNMP架构_第40张图片

选择下一步

LNMP架构_第41张图片

选择全新安装 点击下一步

LNMP架构_第42张图片

设置管理员密码  点击下一步

LNMP架构_第43张图片

LNMP架构_第44张图片

此时在/usr/local/lnmp/php/etc/php.ini 我们需要指定php连接mysql的通信接口,三个位置

cd /usr/local/lnmp/php/etc/

ls

vim php.ini

LNMP架构_第45张图片

/etc/init.d/php-fpm reload

在此安装时还会报错,是因为连接数据库的权限不够

LNMP架构_第46张图片

/etc/init.d/php-fpm reload ###重新加载配置文件

cd /usr/local/  ll ###查看里面目录权限

LNMP架构_第47张图片

cd lnmp/ ll ###查看里面目录权限

cd mysql/ ll ###查看里面目录权限

LNMP架构_第48张图片

chmod 755 data/ ###将data目录权限修改

/etc/init.d/mysqld start

此时论坛成功安装   (注意mysql中root用户密码的准确性)

LNMP架构_第49张图片

登陆查看  172.25.45.1/bbs/forum.php

LNMP架构_第50张图片

管理员身份登陆之后进入管理员管理中心,提示删除/install/目录下的php文件,按提示执行,避免二次安装

LNMP架构_第51张图片

cd /usr/local/lnmp/nginx/html/bbs/install/

ls

rm -fr index.php    ##删除此文件

LNMP架构_第52张图片

 

你可能感兴趣的:(LNMP架构)