LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)

概念解析

LNMP架构介绍

LNMP = Linux+Nginx+Mysql+PHP

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。

LNMP和LAMP唯一不同是指提供web服务的是Nginx,

在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。

Nginx直接处理静态请求,动态请求会转发给php-fpm.

LAMP的工作原理

浏览器发送http request请求到服务器(Nginx)服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx,服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

mysql源码编译

1.得到mysql数据库的源码包,并进行解压,然后查看目录mysql-5.7.17下的内容

[root@server1 ~]# ls
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz 
[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# ls

在这里插入图片描述
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第1张图片

2.创建一个目录(用于将之后编译的的MYSQL,PHP,nginx都放在一起)

[root@server1 mysql-5.7.17]# mkdir /usr/local/lnmp/

在这里插入图片描述
3.安装源码编译工具cmake(支持编译C++语言)

cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等

[root@server1 ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y

在这里插入图片描述
4.解决依赖性
在这里插入图片描述
5.进入解压目录创造预编译环境

[root@server1 mysql-5.7.17]# 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/

在这里插入图片描述
编译成功画面
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第2张图片
如果编译失败,可以重新进行编译,但要先删除缓存

[root@server1 mysql-5.7.17]# rm -rf CMakeCache.txt

6.扩容磁盘(磁盘大小要在20G以上)
使用fdisk -l查看磁盘的大小
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第3张图片
添加一块虚拟硬盘,并建立分区
在这里插入图片描述

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第4张图片
将新增磁盘扩充到需要扩充的磁盘的物理卷组
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第5张图片

扩大逻辑卷VolGroup-lv_root为20G
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第6张图片
但是查看挂载的文件系统的大小并没有发生改变,同步文件系统并再次查看,发现根目录下的文件系统的大小也已经成功改变,说明磁盘扩容成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第7张图片
再添加一块,重复操作,达到20G以上
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第8张图片

7.安装

[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# make 

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第9张图片

[root@server1 mysql-5.7.17]# make install

在这里插入图片描述

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第10张图片
8.进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放置/etc/my.cnf并编译此文件

[root@server1 ~]# cd /etc/
[root@server1 etc]# cp my.cnf my.cnf.bak
[root@server1 etc]# cd
[root@server1 ~]# cd mysql-5.7.17/support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf	#根据你的主机内存复制 mysql 配置文件
[root@server1 ~]# vim /etc/my.cnf

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第11张图片
/etc/my.cnf中的内容

18 basedir = /usr/local/lnmp/mysql								# mysql的安装目录
19 datadir = /usr/local/lnmp/mysql/data						# mysql数据存放位置
22 socket = /usr/local/lnmp/mysql/data/mysql.sock		# mysql与外界联系的套接字文件位置

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第12张图片
9.创建组和用户mysql(利用mysql用户对mysql服务进行限制,将mysql服务的工作可以局限在mysql用户的家目录中)

[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
[root@server1 ~]# id mysql

在这里插入图片描述

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

[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld	#将脚本复制到系统启动服务中
[root@server1 support-files]# cd /etc/init.d
[root@server1 init.d]# chmod +x mysqld 	##添加权限
[root@server1 init.d]# /etc/init.d/mysqld ^C	#命令可以补齐则说明成功

在这里插入图片描述
11.创建data目录

将mysql目录下的所有文件的所有组都改为mysql,只有data目录的所有人是mysql
因为mysql服务将要往这个目录中写数据,保证其有执行权限

[root@server1 mysql]# mkdir data
[root@server1 mysql]# ll	#修改权限前
[root@server1 mysql]# chgrp mysql /usr/local/lnmp/mysql -R
[root@server1 mysql]# chown mysql /usr/local/lnmp/mysql/data -R
[root@server1 mysql]# ll	#修改权限后

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第13张图片
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第14张图片
12.将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令(完成后mysql命令可以生成)

[root@server1 mysql]# vim ~/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

[root@server1 mysql]# source ~/.bash_profile	#使之生效

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第15张图片

在这里插入图片描述
13.执行mysql的配置初始化文件(注意/usr/local/lnmp/mysql/data下不能有任何文件,如果有,必须将其全部删除才可成功执行配置初始化文件)

[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# cd data
[root@server1 data]# ls	#查看时没有任何文件或目录
[root@server1 data]# mysqld --user=mysql --initialize
[root@server1 data]# ls	#执行文件后生成了文件和目录

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第16张图片
14.开启mysqld

[root@server1 data]# /etc/init.d/mysqld start

在这里插入图片描述
15.尝试进入mysql数据库并查看,发现无法查看

[root@server1 data]# mysql -uroot -p					3#输入初始密码

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第17张图片
在这里插入图片描述

16.无法正常查看的原因是因为没有设置安全初始化,所以下面将设置安全初始化
新密码设置为redhat

[root@server1 mysql]# mysql_secure_installatio

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第18张图片

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第19张图片

17,测试 再次进入mysql数据库并查看,发现可以成功查看

[root@server1 mysql]# mysql -uroot -predhat

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第20张图片
18 查看服务,端口是3306

[root@server1 mysql]# netstat -ntlp

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第21张图片

php源码编译

1.将得到的php源码包进行解压

[root@server1 ~]#  tar jxf php-5.6.35.tar.bz2

在这里插入图片描述
2.解决依赖性

[root@server1 ~]# yum install -y libmcrypt-2.5.8-9.el6.x86_64.rpm
[root@server1 ~]# yum install -y libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
以上两个包要在官网上下载

[root@server1 php-5.6.35]# yum install libxml2-devel -y
[root@server1 php-5.6.35]# yum install openssl-devel -y
[root@server1 php-5.6.35]# yum install libcurl-devel -y

[root@server1 php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[root@server1 php-5.6.35]# yum install 2:libpng-devel-1.2.49-1.el6_2.x86_64 -y
[root@server1 php-5.6.35]# yum install freetype-devel -y
[root@server1 php-5.6.35]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
[root@server1 php-5.6.35]# yum install net-snmp-devel -y

在这里插入图片描述
3.进入解压目录创造预编译环境

 ./configure --prefix=/usr/local/lnmp/php         # php安装的位置
--with-config-file-path=/usr/local/lnmp/php/etc     # php配置文件所在的位置
--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-gmp 
--with-gettext 
--with-pear 
--enable-mysqlnd 
--with-mysql=mysqlnd 
--with-mysqli=mysqlnd 
--with-pdo-mysql=mysqlnd           # 支持与mysql数据库之间建立联系
--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架构的搭建——源码编译(MYSQL,PHP,nginx)_第22张图片

4.编译和安装

[root@server1 php-5.6.35]# make && make install

在这里插入图片描述
成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第23张图片

5.创建nginx用户

[root@server1 php-5.6.35]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
[root@server1 php-5.6.35]# id nginx

在这里插入图片描述

6.做php服务的简单配置(配置pid和时区)

[root@server1 etc]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# ls
pear.conf  php-fpm.conf.default
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# vim php-fpm.conf
 25 pid = run/php-fpm.pid   ##去掉注释
149 user = nginx     ##保证用户和组都是ngnix
150 group = nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini 
date.timezone =Asia/Shanghai    ##修改时区

在这里插入图片描述

在这里插入图片描述
7.将php启动的脚本复制到系统启动脚本的默认目录下,并测试php是否可以启动

[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# cd sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm         # init.d.php-fpm是编译完成的启动脚本
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm        #给脚本加上可执行权限
[root@server1 fpm]# /etc/init.d/php-fpm start
Starting php-fpm  done

[root@server1 fpm]# netstat -tlnp          # 查看php服务的监听端口(9000)

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第24张图片
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第25张图片

nginx的源码编译

1.得到nginx的源码包并解压

[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz

在这里插入图片描述

2.去掉nginx的版本号

[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# vim src/core/nginx.h 
14 #define NGINX_VER          "nginx/" 

在这里插入图片描述

3.关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)

[root@server1 nginx-1.14.0]# vim auto/cc/gcc 
171 # debug
172 #CFLAGS="$CFLAGS -g"     ##添加注释

在这里插入图片描述

在这里插入图片描述

4.解决源编译中的依赖性问题

[root@server1 nginx-1.14.0]# yum install pcre-devel gcc zlib-devel -y

在这里插入图片描述

5.创造预编译环境

[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx

在这里插入图片描述
成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第26张图片

6.安装

[root@server1 nginx-1.14.0]# make && make install

在这里插入图片描述

成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第27张图片

  1. 配置nginx服务
[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/nginx/conf/
[root@server1 conf]# vim nginx.conf

 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;   ##添加index.php(放在最前面)
 46         }

 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 70             include        fastcgi.conf;  ##修改
 71         }

在这里插入图片描述

在这里插入图片描述

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第28张图片

8.创建一个软连接,可以直接调用命令

[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/    ##创建一个软连接

在这里插入图片描述

9.检测nginx服务是否可用并打开nginx服务

[root@server1 sbin]# nginx -t  ##语法检测
[root@server1 nginx-1.14.0]# nginx  ##打开nginx
[root@server1 nginx-1.14.0]# netstat -tnlp     ##查看端口为80

在这里插入图片描述

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第29张图片

10.浏览器中输入172.25.79.1 显示nginx页面

LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第30张图片
11.访问测试

[root@server1 ~]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# vim index.php   ##编写默认页面

在这里插入图片描述
在这里插入图片描述
测试:
浏览器中输入172.25.79.1/index.php,出现以下界面则,表示nginx和PHP结合成功
LNMP架构的搭建——源码编译(MYSQL,PHP,nginx)_第31张图片

你可能感兴趣的:(LNMP架构的搭建——源码编译(MYSQL,PHP,nginx))